@rushdb/javascript-sdk 1.19.1 → 2.0.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/dist/index.cjs CHANGED
@@ -1 +1,3 @@
1
- "use strict";var Te=Object.create;var L=Object.defineProperty;var De=Object.getOwnPropertyDescriptor;var we=Object.getOwnPropertyNames;var be=Object.getPrototypeOf,Ie=Object.prototype.hasOwnProperty;var xe=(n,e)=>{for(var t in e)L(n,t,{get:e[t],enumerable:!0})},ae=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of we(e))!Ie.call(n,s)&&s!==t&&L(n,s,{get:()=>e[s],enumerable:!(r=De(e,s))||r.enumerable});return n};var oe=(n,e,t)=>(t=n!=null?Te(be(n)):{},ae(e||!n||!n.__esModule?L(t,"default",{value:n,enumerable:!0}):t,n)),Oe=n=>ae(L({},"__esModule",{value:!0}),n);var He={};xe(He,{DBRecordInstance:()=>m,DBRecordsArrayInstance:()=>b,EmptyTargetError:()=>I,HttpClient:()=>O,HttpClientResponse:()=>N,Model:()=>ne,NonUniqueResultError:()=>v,RestAPI:()=>C,RushDB:()=>f,Transaction:()=>A,UniquenessError:()=>E,default:()=>Fe,extractMixedPropertiesFromToken:()=>re,idToDate:()=>te,idToTimestamp:()=>V,initSDK:()=>se,mergeDefaultsWithPayload:()=>M,parseConfig:()=>Z,pickUniqFieldsFromRecord:()=>K,pickUniqFieldsFromRecords:()=>X,validateInteger:()=>ee});module.exports=Oe(He);var O=class n{makeRequest(e,{headers:t,method:r,protocol:s,requestData:a,timeout:o}){throw new Error("makeRequest not implemented.")}static makeTimeoutError(){let e=new TypeError(n.TIMEOUT_ERROR_CODE);return e.code=n.TIMEOUT_ERROR_CODE,e}};O.CONNECTION_CLOSED_ERROR_CODES=["ECONNRESET","EPIPE"];O.TIMEOUT_ERROR_CODE="ETIMEDOUT";var $=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.")}},N=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 Y=oe(require("http"),1),Q=oe(require("https"),1);var Pe="string",Ee="datetime",Ae="boolean",Be="number",_e="null",qe="vector",ie=[Pe,Ee,Ae,Be,_e,qe];var de=Y.default||Y,pe=Q.default||Q,Ce=new de.Agent({keepAlive:!0}),je=new pe.Agent({keepAlive:!0}),W=class extends O{constructor(e){super(),this._agent=e}makeRequest(e,{headers:t,method:r,protocol:s,requestData:a,timeout:o}){let i=new URL(e),d=s==="http"||i.protocol==="http:",c=this._agent;return c||(c=d?Ce:je),new Promise((p,l)=>{let h=(d?de:pe).request({agent:c,ciphers:"DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2:!MD5",headers:t,host:i.hostname,method:r,path:i.pathname+i.search,port:i.port});h.setTimeout(o!=null?o:8e4,()=>{h.destroy(O.makeTimeoutError())}),h.on("response",y=>{p(new J(y))}),h.on("error",y=>{l(y)}),h.once("socket",y=>{let w=a?JSON.stringify(a):"";y.connecting?y.once(d?"connect":"secureConnect",()=>{h.write(w),h.end()}):(h.write(w),h.end())})})}},J=class extends ${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 r="";this._res.setEncoding("utf8"),this._res.on("data",s=>{r+=s}),this._res.once("end",()=>{try{e(JSON.parse(r))}catch(s){t(s)}})})}};var R=n=>typeof n=="object"&&Array.isArray(n)&&n!==null,T=n=>n!==null&&Object.prototype.toString.call(n)==="[object Object]",j=n=>T(n)&&Object.keys(n).length===0,le=n=>typeof n=="number"||typeof n=="string"||typeof n=="boolean"||n===null;function ke(n,e){let t={...n};return e.forEach(r=>{delete t[r]}),t}var k=n=>T(n)?ke(n,["__label","__id","__proptypes"]):n,_=n=>R(n)?n.map(_):T(n)?Object.fromEntries(Object.entries(n).filter(([e,t])=>t!==void 0).map(([e,t])=>[e,_(t)])):n,z=n=>R(n)?n.every(le):le(n),U=n=>T(n)&&Object.values(n).every(z),P=n=>typeof n=="string",D=n=>{if(typeof n=="string"){if(n.toLowerCase()==="true")return!0;if(n.toLowerCase()==="false")return!1}return R(n)&&n.length===0||T(n)&&Object.keys(n).length===0?!1:!!n};var G=["httpClient","timeout","host","port","protocol","url","logger","options"],he={initial:"in",extended:"ex",fullFeatured:"ff"};var E=class n extends Error{constructor(e,t){super(`Record with label "${e}" and properties ${JSON.stringify(t)} already exists`),this.name="UniquenessError",Object.setPrototypeOf(this,n.prototype)}},I=class n extends Error{constructor(e){super(e),this.name="EmptyTarget",Object.setPrototypeOf(this,n.prototype)}},v=class n 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,n.prototype)}};var M=async(n,e)=>{let t=Object.entries(n).map(async([a,o])=>o.default&&typeof o.default<"u"&&typeof e[a]>"u"?{key:a,value:typeof o.default=="function"?await o.default():o.default}:{key:a,value:void 0});return{...(await Promise.all(t)).reduce((a,{key:o,value:i})=>(i!==void 0&&(a[o]=i),a),{}),...e}},K=(n,e)=>Object.entries(e).filter(([t])=>{var r;return(r=n[t])==null?void 0:r.unique}).reduce((t,[r,s])=>(r in n&&(t[r]=s),t),{}),X=(n,e,t)=>{let r={},s=Object.entries(e).filter(([,a])=>a.unique).reduce((a,[o])=>(a[o]=!0,a),{});return n.forEach(a=>{Object.entries(a).forEach(([o,i])=>{if(o in s)if(r[o]){if(r[o].includes(i))throw new E(t,{[o]:i});r[o]=[...r[o],i]}else r[o]=[i]})}),r},Z=n=>{if(!n)return{};if(!T(n))throw new Error("Config must be an object");if(Object.keys(n).filter(t=>!G.includes(t)).length>0)throw new Error(`Config object may only contain the following: ${G.join(", ")}`);return n};function ee(n,e,t){if(!Number.isInteger(e)){if(t!==void 0)return t;throw new Error(`${n} must be an integer`)}return e}function V(n){let e=n.split("-"),t=e[0]+e[1].slice(0,4);return parseInt(t,16)}function te(n){return new Date(V(n))}function re(n){let e=/^([a-z]{2})_([01]{3}\d{0,})_(.+)$/,t=n.match(e);if(!t)return[null,n];let[,r,s,a]=t,i=Object.entries(he).find(([h,y])=>y===r)[0],[d,c,p]=s.split("");return[{...{customDB:d==="1",managedDB:c==="1",selfHosted:p==="1",planType:i}},a]}var m=class{constructor(e={}){this.data=e}exists(){return D(this.data.__id)&&D(this.data.__label)}id(){if(!D(this.data.__id))throw new Error("DBRecordInstance: Unable to access 'id'. The Record's `data.__id` is missing or incorrect.");return this.data.__id}label(){if(!D(this.data.__label))throw new Error("DBRecordInstance: Unable to access 'label'. The Record's `data.__label` is missing or incorrect.");return this.data.__label}proptypes(){if(!D(this.data.__proptypes))throw new Error("DBRecordInstance: Unable to access 'proptypes'. The Record's `data.__proptypes` is missing or incorrect.");return this.data.__proptypes}date(){try{return te(this.id())}catch{throw new Error("DBRecordInstance: Unable to access 'date'. The Record's `data.__id` is missing or incorrect.")}}timestamp(){try{return V(this.id())}catch{throw new Error("DBRecordInstance: Unable to access 'timestamp'. The Record's `data.__id` is missing or incorrect.")}}async delete(e){if(!D(this.data))throw new Error("DBRecordInstance: Unable to delete Record. The Record data is undefined.");return await f.getInstance().records.deleteById(this.id(),e)}async update(e,t){if(!D(this.data))throw new Error("DBRecordInstance: Unable to update Record. The Record data is undefined.");return f.getInstance().records.update({label:this.label(),target:this.id(),data:e},t)}async set(e,t){if(!D(this.data))throw new Error("DBRecordInstance: Unable to set. The Record data is undefined.");return f.getInstance().records.set({label:this.label(),target:this.id(),data:e},t)}async attach(e,t,r){if(!D(this.data))throw new Error("DBRecordInstance: Unable to attach Record. The Record data is undefined.");return f.getInstance().records.attach({source:this.id(),target:e,options:t},r)}async detach(e,t,r){if(!D(this.data))throw new Error("DBRecordInstance: Unable to detach Record. The Record data is undefined.");return f.getInstance().records.detach({source:this.id(),target:e,options:t},r)}},b=class{constructor(e=[],t=0,r){this.data=e,this.total=t,this.searchQuery=r}};var Ue={"Content-Type":"application/json"},ge=({httpClient:n,token:e,url:t})=>async(r,{headers:s,...a})=>{let o=await n.makeRequest(`${t}${r}`,{credentials:"omit",headers:Object.assign({...Ue,...s},typeof e<"u"?{token:e}:{}),...a});if(o.getStatusCode()>=200&&o.getStatusCode()<300)return await o.toJSON();throw new Error(`${o.getStatusCode()}`)};var A=class{constructor(e){this.id=e}async rollback(){return await f.getInstance().tx.rollback(this.id)}async commit(){return await f.getInstance().tx.commit(this.id)}};var ye="api.rushdb.com";var ue="https",fe="/api/v1";var S=n=>n?{"x-transaction-id":n}:void 0,Me=n=>P(n)||n instanceof A,u=n=>Me(n)?n instanceof A?n.id:n:void 0,me=n=>/^[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(n),x=n=>{if(P(n)&&me(n))return n;if(n instanceof m&&n.data)return n.data.__id;if(T(n)&&"__id"in n&&me(n.__id))return n.__id},q=n=>!(!T(n)||T(n)&&"name"in n&&!P(n.name)||T(n)&&"type"in n&&(!P(n.type)||!ie.includes(n.type))||!("value"in n)||!z(n.value)||"metadata"in n&&!P(n.metadata)||"valueSeparator"in n&&!P(n.valueSeparator)),Se=n=>{let e=ue,t=ye,r=443,s=fe;if("url"in n){let o=new URL(n.url);e=o.protocol.replace(":",""),t=o.hostname,r=parseInt(o.port||(e==="http"?"80":e==="https"?"443":""))}"host"in n&&"port"in n&&"protocol"in n&&(e=n.protocol.replace(":",""),t=n.host,r=n.port),s&&!s.startsWith("/")&&(s="/"+s);let a="";return e==="http"&&r===80||e==="https"&&r===443||(a=":"+r),`${e}://${t}${a}${s}`},g=(n=8)=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let r=0;r<n;r++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t};var C=class{constructor(e,t){this.records={attach:async({source:e,target:t,options:r},s)=>{var l,h;let a=u(s),i=`/relationships/${x(e)}`,d={headers:Object.assign({},S(a)),method:"POST",requestData:{targetIds:this._extractTargetIds(t,"Attach"),...(r==null?void 0:r.type)&&{type:r.type},...(r==null?void 0:r.direction)&&{direction:r.direction}}},c=typeof this.logger=="function"?g():"";(l=this.logger)==null||l.call(this,{requestId:c,path:i,...d});let p=await this.fetcher(i,d);return(h=this.logger)==null||h.call(this,{requestId:c,path:i,...d,responseData:p.data}),p},detach:async({source:e,target:t,options:r},s)=>{var l,h;let a=u(s),i=`/relationships/${x(e)}`,d={headers:Object.assign({},S(a)),method:"PUT",requestData:{targetIds:this._extractTargetIds(t,"Detach"),...(r==null?void 0:r.typeOrTypes)&&{typeOrTypes:r.typeOrTypes},...(r==null?void 0:r.direction)&&{direction:r.direction}}},c=typeof this.logger=="function"?g():"";(l=this.logger)==null||l.call(this,{requestId:c,path:i,...d});let p=await this.fetcher(i,d);return(h=this.logger)==null||h.call(this,{requestId:c,path:i,...d,responseData:p.data}),p},create:async({label:e,data:t,options:r},s)=>{var l,h;let a=u(s),o="/records",i={headers:Object.assign({},S(a)),method:"POST",requestData:{}},d=typeof this.logger=="function"?g():"",c=k(_(t));if(R(c)&&c.every(q))i.requestData={label:e,properties:c,options:r};else if(U(c))i.requestData={label:e,data:c,options:r};else throw T(c)?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.");(l=this.logger)==null||l.call(this,{requestId:d,path:o,...i});let p=await this.fetcher(o,i);return(h=this.logger)==null||h.call(this,{requestId:d,path:o,...i,responseData:p.data}),p!=null&&p.success&&(p!=null&&p.data)?new m(p.data):new m},createMany:async(e,t)=>{var p,l,h;let r=R(e.data)?e.data:[e.data];if(!r.every(y=>U(y)))throw new Error("records.createMany supports only flat records (no nested objects/arrays). Use records.importJson for nested JSON.");let a=u(t),o="/records/import/json",i={headers:Object.assign({},S(a)),method:"POST",requestData:{...e,data:r}},d=typeof this.logger=="function"?g():"";(p=this.logger)==null||p.call(this,{requestId:d,path:o,...i});let c=await this.fetcher(o,i);if((l=this.logger)==null||l.call(this,{requestId:d,path:o,...i,responseData:c.data}),c!=null&&c.success&&(c!=null&&c.data)){let y=R(c.data)?(h=c.data)==null?void 0:h.map(w=>new m(w)):[];return new b(y,c.total)}return new b([])},importJson:async(e,t)=>{var h,y,w;let{data:r,options:s}=e,{label:a}=e,o=r;if(!a)if(T(r)&&!R(r)){let F=k(r),H=Object.keys(F);if(H.length===1)a=H[0],o=F[a];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 i=u(t),d="/records/import/json",c={headers:Object.assign({},S(i)),method:"POST",requestData:{label:a,data:o,options:s}},p=typeof this.logger=="function"?g():"";(h=this.logger)==null||h.call(this,{requestId:p,path:d,...c});let l=await this.fetcher(d,c);if((y=this.logger)==null||y.call(this,{requestId:p,path:d,...c,responseData:l.data}),l!=null&&l.success&&(l!=null&&l.data)){let F=R(l.data)?(w=l.data)==null?void 0:w.map(H=>new m(H)):[];return new b(F,l.total)}return new b([])},importCsv:async(e,t)=>{var d,c;let r=u(t),s="/records/import/csv",a={headers:Object.assign({},S(r)),method:"POST",requestData:e},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);if((c=this.logger)==null||c.call(this,{requestId:o,path:s,...a,responseData:i.data}),i!=null&&i.success&&(i!=null&&i.data)){let p=R(i.data)?i.data.map(l=>new m(l)):[];return new b(p,i.total)}return new b([])},delete:async(e,t)=>{var d,c,p;if(j(e.where)&&!((d=this==null?void 0:this.options)!=null&&d.allowForceDelete))throw new I("You must specify criteria to delete records. Empty criteria are not allowed. If this was intentional, use the Dashboard instead.");let r=u(t),s="/records/delete",a={headers:Object.assign({},S(r)),method:"POST",requestData:e!=null?e:{}},o=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);return(p=this.logger)==null||p.call(this,{requestId:o,path:s,...a,responseData:i.data}),i},deleteById:async(e,t)=>{var c,p;let r=u(t),s=R(e),a=s?"/records/delete":`/records/${e}`,o={headers:Object.assign({},S(r)),method:s?"POST":"DELETE",requestData:s?{limit:1e3,where:{$id:{$in:e}}}:void 0},i=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:i,path:a,...o});let d=await this.fetcher(a,o);return(p=this.logger)==null||p.call(this,{requestId:i,path:a,...o,responseData:d.data}),d},export:async(e,t)=>{var d,c;let r=u(t),s="/records/export/csv",a={headers:Object.assign({},S(r)),method:"POST",requestData:e!=null?e:{}},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);return(c=this.logger)==null||c.call(this,{requestId:o,path:s,...a,responseData:i.data}),i},find:async(e,t)=>{var l,h;let{id:r,...s}=e,a=u(t),o=r?`/records/${r}/search`:"/records/search",i={headers:Object.assign({},S(a)),method:"POST",requestData:s!=null?s:{}},d=typeof this.logger=="function"?g():"";(l=this.logger)==null||l.call(this,{requestId:d,path:o,...i});let c=await this.fetcher(o,i);(h=this.logger)==null||h.call(this,{requestId:d,path:o,...i,responseData:c.data});let p=c.data.map(y=>new m(y));return new b(p,c.total,e)},findById:async(e,t)=>{var d,c;let r=u(t),s=R(e)?"/records":`/records/${e}`,a={headers:Object.assign({},S(r)),method:R(e)?"POST":"GET",requestData:R(e)?{ids:e}:void 0},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);if((c=this.logger)==null||c.call(this,{requestId:o,path:s,...a,responseData:i.data}),R(e)){let p=i.data.map(l=>new m(l));return new b(p,i.total)}else return new m(i.data)},findOne:async(e,t)=>{var c,p;let r=u(t),s="/records/search",a={headers:Object.assign({},S(r)),method:"POST",requestData:{...e,limit:1,skip:0}},o=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);(p=this.logger)==null||p.call(this,{requestId:o,path:s,...a,responseData:i.data});let[d]=i.data;return new m(d)},findUniq:async(e,t)=>{var c,p;let r=u(t),s="/records/search",a={headers:Object.assign({},S(r)),method:"POST",requestData:{...e,limit:1,skip:0}},o=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);if((p=this.logger)==null||p.call(this,{requestId:o,path:s,...a,responseData:i.data}),typeof i.total<"u"&&i.total>1)throw new v(i.total,e);let[d]=i.data;return new m(d)},set:async({target:e,label:t,data:r,options:s},a)=>{var y,w;let o=u(a),d=`/records/${x(e)}`,c={headers:Object.assign({},S(o)),method:"PUT",requestData:{}},p=typeof this.logger=="function"?g():"",l=k(_(r));if(R(l)&&l.every(q))c.requestData={label:t,properties:l};else if(U(l))c.requestData={label:t,data:l,options:s};else throw T(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:d,...c});let h=await this.fetcher(d,c);return(w=this.logger)==null||w.call(this,{requestId:p,path:d,...c,responseData:h.data}),h!=null&&h.success&&(h!=null&&h.data)?new m(h.data):new m},update:async({target:e,label:t,data:r,options:s},a)=>{var y,w;let o=u(a),d=`/records/${x(e)}`,c={headers:Object.assign({},S(o)),method:"PATCH",requestData:{}},p=typeof this.logger=="function"?g():"",l=k(_(r));if(R(l)&&l.every(q))c.requestData={label:t,properties:l};else if(U(l))c.requestData={label:t,data:l,options:s};else throw T(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:d,...c});let h=await this.fetcher(d,c);return(w=this.logger)==null||w.call(this,{requestId:p,path:d,...c,responseData:h.data}),h!=null&&h.success&&(h!=null&&h.data)?new m(h.data):new m},upsert:async({label:e,data:t,options:r},s)=>{var h,y,w;let a=u(s),o="/records",i={headers:Object.assign({},S(a)),method:"POST",requestData:{}},d=typeof this.logger=="function"?g():"",c=k(_(t)),p={...r,mergeBy:(h=r==null?void 0:r.mergeBy)!=null?h:[]};if(R(c)&&c.every(q))i.requestData={label:e,properties:c,options:p};else if(U(c))i.requestData={label:e,data:c,options:p};else throw T(c)?new Error("Provided data is not a flat object. Upsert supports flat objects or property drafts array."):new Error("Provided data is not valid.");(y=this.logger)==null||y.call(this,{requestId:d,path:o,...i});let l=await this.fetcher(o,i);return(w=this.logger)==null||w.call(this,{requestId:d,path:o,...i,responseData:l.data}),l!=null&&l.success&&(l!=null&&l.data)?new m(l.data):new m}};this.relationships={createMany:async(e,t)=>{var d,c;let r=u(t),s="/relationships/create-many",a={headers:Object.assign({},S(r)),method:"POST",requestData:e!=null?e:{}},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);return(c=this.logger)==null||c.call(this,{requestId:o,path:s,...a,responseData:i.data}),i},deleteMany:async(e,t)=>{var d,c;let r=u(t),s="/relationships/delete-many",a={headers:Object.assign({},S(r)),method:"POST",requestData:e!=null?e:{}},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);return(c=this.logger)==null||c.call(this,{requestId:o,path:s,...a,responseData:i.data}),i},find:async(e,t)=>{var p,l;let r=u(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 o=`/relationships/search${s.toString()?"?"+s.toString():""}`,i={headers:Object.assign({},S(r)),method:"POST",requestData:e!=null?e:{}},d=typeof this.logger=="function"?g():"";(p=this.logger)==null||p.call(this,{requestId:d,path:o,...i});let c=await this.fetcher(o,i);return(l=this.logger)==null||l.call(this,{requestId:d,path:o,...i,responseData:c.data}),c}};this.properties={delete:async(e,t)=>{var d,c;let r=u(t),s=`/properties/${e}`,a={headers:Object.assign({},S(r)),method:"DELETE"},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);return(c=this.logger)==null||c.call(this,{requestId:o,path:s,...a,responseData:i.data}),i},find:async(e,t)=>{var d,c;let r=u(t),s="/properties/search",a={headers:Object.assign({},S(r)),method:"POST",requestData:e!=null?e:{}},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);return(c=this.logger)==null||c.call(this,{requestId:o,path:s,...a,responseData:i.data}),i},findById:async(e,t)=>{var d,c;let r=u(t),s=`/properties/${e}`,a={headers:Object.assign({},S(r)),method:"GET"},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);return(c=this.logger)==null||c.call(this,{requestId:o,path:s,...a,responseData:i.data}),i},values:async(e,t,r)=>{var c,p;let s=u(r),a=`/properties/${e}/values`,o={headers:Object.assign({},S(s)),method:"POST",requestData:t!=null?t:{}},i=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:i,path:a,...o});let d=await this.fetcher(a,o);return(p=this.logger)==null||p.call(this,{requestId:i,path:a,...o,responseData:d.data}),d}};this.labels={find:async(e,t)=>{var d,c;let r=u(t),s="/labels/search",a={headers:Object.assign({},S(r)),method:"POST",requestData:e!=null?e:{}},o=typeof this.logger=="function"?g():"";(d=this.logger)==null||d.call(this,{requestId:o,path:s,...a});let i=await this.fetcher(s,a);return(c=this.logger)==null||c.call(this,{requestId:o,path:s,...a,responseData:i.data}),i}};this.tx={begin:async e=>{var o,i;let t="/tx",r={method:"POST",requestData:T(e)&&"ttl"in e?e:{}},s=typeof this.logger=="function"?g():"";(o=this.logger)==null||o.call(this,{requestId:s,path:t,...r});let a=await this.fetcher(t,r);return(i=this.logger)==null||i.call(this,{requestId:s,path:t,...r,responseData:a.data}),new A(a.data.id)},commit:async e=>{var i,d;let r=`/tx/${u(e)}/commit`,s={method:"POST",requestData:{}},a=typeof this.logger=="function"?g():"";(i=this.logger)==null||i.call(this,{requestId:a,path:r,...s});let o=await this.fetcher(r,s);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...s,responseData:o.data}),o},get:async e=>{var i,d;let r=`/tx/${u(e)}`,s={method:"GET"},a=typeof this.logger=="function"?g():"";(i=this.logger)==null||i.call(this,{requestId:a,path:r,...s});let o=await this.fetcher(r,s);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...s,responseData:o.data}),new A(o.data.id)},rollback:async e=>{var i,d;let r=`/tx/${u(e)}/rollback`,s={method:"POST",requestData:{}},a=typeof this.logger=="function"?g():"";(i=this.logger)==null||i.call(this,{requestId:a,path:r,...s});let o=await this.fetcher(r,s);return(d=this.logger)==null||d.call(this,{requestId:a,path:r,...s,responseData:o.data}),o}};this.settings={get:async()=>{var a,o;let e="/sdk/settings",t={method:"GET"},r=typeof this.logger=="function"?g():"";(a=this.logger)==null||a.call(this,{requestId:r,path:e,...t});let s=await this.fetcher(e,t);return(o=this.logger)==null||o.call(this,{requestId:r,path:e,...t,responseData:s.data}),s}};this.query={raw:async({query:e,params:t},r)=>{var c,p;let s=u(r),a="/query/raw",o={headers:Object.assign({},S(s)),method:"POST",requestData:{query:e,params:t}},i=typeof this.logger=="function"?g():"";(c=this.logger)==null||c.call(this,{requestId:i,path:a,...o});let d=await this.fetcher(a,o);return(p=this.logger)==null||p.call(this,{requestId:i,path:a,...o,responseData:d.data}),d}};if(this.fetcher=null,t!=null&&t.httpClient){let r=Se(t);this.fetcher=ge({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 m){let s=x(e);if(!s)throw new I(`${t} error: Target id is empty`);return[s]}if(R(e)&&e.every(s=>s instanceof m)){let s=e.map(x).filter(D);if(!s.length)throw new I(`${t} error: Target ids are empty`);return s}if(e instanceof b){let s=(r=e.data)==null?void 0:r.map(x).filter(D);if(!(s!=null&&s.length))throw new I(`${t} error: Target ids are empty`);return s}if(T(e)&&"__id"in e)return[e.__id];if(R(e)&&e.every(s=>T(s)&&"__id"in s)){let s=e.map(x).filter(D);if(!s.length)throw new I(`${t} error: Target ids are empty`);return s}return R(e)?e:P(e)?[e]:[]}};var Re,B=class B extends C{constructor(e,t){var a;let r=Z(t);super(e,{...r,httpClient:(a=r.httpClient)!=null?a:Re}),B.instance=this;let[s]=re(e!=null?e:"");this.initializeSync(s,e,r)}initializeSync(e,t,r){let s=e?{planType:e.planType,customDB:e.customDB,managedDB:e.managedDB,selfHosted:e.selfHosted}:null;B.state={initialized:!0,debug:!1,timeout:ee("timeout",r==null?void 0:r.timeout,8e4),token:t,...s&&{serverSettings:s}}}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 D(B.instance)}toDBRecordInstance(e){return new m(e)}};B.instance=null,B.state={initialized:!1,debug:!1,timeout:8e4};var f=B,se=n=>{Re=n};var ne=class{constructor(e,t){this.label=e,this.schema=t}getLabel(){return this.label}async toDBRecordInstance(e){try{return f.getInstance().toDBRecordInstance(e)}catch{throw new Error("No RushDB instance was provided during model initialization.")}}async find(e,t){let r=e!=null?e:{};return f.getInstance().records.find({...r,labels:[this.label]},t)}async findOne(e,t){let r=e!=null?e:{};return f.getInstance().records.findOne({...r,labels:[this.label]},t)}async findById(e,t){return this.findOne({where:{$id:e}},t)}async findUniq(e,t){let r=e!=null?e:{};return f.getInstance().records.findUniq({...r,labels:[this.label]},t)}async create(e,t){var i;let r=await M(this.schema,e),s=K(this.schema,r),a=D(s),o=f.getInstance();if(a){let d=t!=null?t:await o.tx.begin(),c=await this.find({where:s},d),p=typeof t<"u";if(!((i=c==null?void 0:c.data)!=null&&i.length)){let h=await o.records.create({label:this.label,data:r},d);return p||await d.commit(),h}else throw p||await d.commit(),new E(this.label,s)}return await o.records.create({label:this.label,data:r},t)}async attach({source:e,target:t,options:r},s){return await f.getInstance().records.attach({source:e,target:t,options:r},s)}async detach({source:e,target:t,options:r},s){return await f.getInstance().records.detach({source:e,target:t,options:r},s)}async handleSetOrUpdate(e,t,r,s){var d,c;if(R(t)&&t.every(q))throw new Error(`Model.${r} with Array<PropertyDraft> as payload is not implemented yet.`);let a=f.getInstance(),o=await M(this.schema,t),i=K(this.schema,o);if(!j(i)){let p=s!=null?s:await a.tx.begin(),l=await this.find({where:i},p),h=typeof s<"u";if(!((d=l==null?void 0:l.data)!=null&&d.length)||l.data.length===1&&((c=l.data[0])==null?void 0:c.id())===x(e)){let w=await a.records[r]({target:e,label:this.label,data:o},p);return h||await p.commit(),w}else throw h||await p.commit(),new E(this.label,i)}return await a.records[r]({label:this.label,target:e,data:o},s)}async set(e,t,r){return await this.handleSetOrUpdate(e,t,"set",r)}async update(e,t,r){return await this.handleSetOrUpdate(e,t,"update",r)}async createMany(e,t){var o;let r=f.getInstance(),s=typeof t<"u",a=t!=null?t:await r.tx.begin();try{let i=await Promise.all(e.map(async p=>await M(this.schema,p))),d=X(i,this.schema,this.label);if(!j(d)){let p=Object.entries(d).map(([h,y])=>({[h]:{$in:y}})),l=await this.find({where:{$or:p}},a);if((o=l==null?void 0:l.data)!=null&&o.length)throw new E(this.label,Object.keys(d))}let c=await r.records.createMany({label:this.label,data:i},a);return s||await a.commit(),c}catch(i){throw s||await a.rollback(),i}}async delete(e,t){if(j(e.where))throw new I(`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 f.getInstance().records.delete({...e,labels:[this.label]},t)}async deleteById(e,t){return await f.getInstance().records.deleteById(e,t)}};se(new W);var Fe=f;0&&(module.exports={DBRecordInstance,DBRecordsArrayInstance,EmptyTargetError,HttpClient,HttpClientResponse,Model,NonUniqueResultError,RestAPI,RushDB,Transaction,UniquenessError,extractMixedPropertiesFromToken,idToDate,idToTimestamp,initSDK,mergeDefaultsWithPayload,parseConfig,pickUniqFieldsFromRecord,pickUniqFieldsFromRecords,validateInteger});
1
+ "use strict";var Re=Object.create;var H=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var be=Object.getOwnPropertyNames;var we=Object.getPrototypeOf,De=Object.prototype.hasOwnProperty;var Ie=(i,e)=>{for(var t in e)H(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))!De.call(i,r)&&r!==t&&H(i,r,{get:()=>e[r],enumerable:!(s=Te(e,r))||s.enumerable});return i};var oe=(i,e,t)=>(t=i!=null?Re(we(i)):{},ae(e||!i||!i.__esModule?H(t,"default",{value:i,enumerable:!0}):t,i)),xe=i=>ae(H({},"__esModule",{value:!0}),i);var Le={};Ie(Le,{DBRecordInstance:()=>S,DBRecordsArrayInstance:()=>I,EmptyTargetError:()=>E,HttpClient:()=>P,HttpClientResponse:()=>V,Model:()=>se,NonUniqueResultError:()=>v,RestAPI:()=>k,RushDB:()=>u,Transaction:()=>B,UniquenessError:()=>_,default:()=>Me,idToDate:()=>te,idToTimestamp:()=>K,initSDK:()=>re,mergeDefaultsWithPayload:()=>F,parseConfig:()=>X,pickUniqFieldsFromRecord:()=>N,pickUniqFieldsFromRecords:()=>Z,validateInteger:()=>ee});module.exports=xe(Le);var P=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}};P.CONNECTION_CLOSED_ERROR_CODES=["ECONNRESET","EPIPE"];P.TIMEOUT_ERROR_CODE="ETIMEDOUT";var $=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 Oe="string",Ee="datetime",Pe="boolean",Ae="number",_e="null",ie=[Oe,Ee,Pe,Ae,_e];var de=J.default||J,pe=Y.default||Y,Be=new de.Agent({keepAlive:!0}),Ce=new pe.Agent({keepAlive:!0}),W=class extends P{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?Be:Ce),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(P.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 ${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]",U=i=>b(i)&&Object.keys(i).length===0,le=i=>typeof i=="number"||typeof i=="string"||typeof i=="boolean"||i===null;function qe(i,e){let t={...i};return e.forEach(s=>{delete t[s]}),t}var M=i=>b(i)?qe(i,["__label","__id","__proptypes"]):i,q=i=>R(i)?i.map(q):b(i)?Object.fromEntries(Object.entries(i).filter(([e,t])=>t!==void 0).map(([e,t])=>[e,q(t)])):i,z=i=>R(i)?i.every(le):le(i),L=i=>b(i)&&Object.values(i).every(z),A=i=>typeof i=="string",D=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)}},E=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 D(this.data.__id)&&D(this.data.__label)}get id(){if(!D(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(!D(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(!D(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(!D(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(!D(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(!D(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(!D(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(!D(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
+ `)?`"${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 B=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 B,m=i=>Ue(i)?i instanceof B?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 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}}},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=M(q(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(L(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(w=>L(w)))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((w,O)=>{var ne;return(ne=e.vectors[O])!=null&&ne.length?{...w,$vectors:e.vectors[O]}:w}):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 w=R(p.data)?(T=p.data)==null?void 0:T.map(O=>new S(O)):[];return new I(w,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 w=M(s),O=Object.keys(w);if(O.length===1)n=O[0],a=w[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 w=R(l.data)?(T=l.data)==null?void 0:T.map(O=>new S(O)):[];return new I(w,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 E("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,w;let o=m(a),d=`/records/${x(e)}`,p={headers:Object.assign({},f(o)),method:"PUT",requestData:{}},l=typeof this.logger=="function"?g():"",h=M(q(s));if(R(h)&&h.every(j))p.requestData={label:t,properties:h,...(n==null?void 0:n.length)&&{vectors:n}};else if(L(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(w=this.logger)==null||w.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=M(q(s));if(R(l)&&l.every(j))d.requestData={label:t,properties:l};else if(L(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,w;let a=m(n),o="/records",c={headers:Object.assign({},f(a)),method:"POST",requestData:{}},d=typeof this.logger=="function"?g():"",p=M(q(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(L(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(w=this.logger)==null||w.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={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 B(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 B(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 E(`${t} error: Target id is empty`);return[r]}if(R(e)&&e.every(r=>r instanceof S)){let r=e.map(x).filter(D);if(!r.length)throw new E(`${t} error: Target ids are empty`);return r}if(e instanceof I){let r=(s=e.data)==null?void 0:s.map(x).filter(D);if(!(r!=null&&r.length))throw new E(`${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(D);if(!r.length)throw new E(`${t} error: Target ids are empty`);return r}return R(e)?e:A(e)?[e]:[]}};var Se,C=class C 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}),C.instance=this,this.initializeSync(s,r)}initializeSync(e,t){C.state={initialized:!0,debug:!1,timeout:ee("timeout",t==null?void 0:t.timeout,8e4),token:e}}static getInstance(){if(C.instance)return C.instance;throw new Error('RushDB not initialized. Please create a RushDB instance first: new RushDB("RUSHDB_API_KEY")')}static isInitialized(){return D(C.instance)}toDBRecordInstance(e){return new S(e)}};C.instance=null,C.state={initialized:!1,debug:!1,timeout:8e4};var u=C,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=D(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 w=l.data[0],O=await o.records.set({target:w.id,label:this.label,data:r},p);return h||await p.commit(),O}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 E(`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 Me=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 +1,3 @@
1
- var be=Object.defineProperty,De=Object.defineProperties;var we=Object.getOwnPropertyDescriptors;var W=Object.getOwnPropertySymbols;var te=Object.prototype.hasOwnProperty,re=Object.prototype.propertyIsEnumerable;var ee=(n,e,t)=>e in n?be(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,p=(n,e)=>{for(var t in e||(e={}))te.call(e,t)&&ee(n,t,e[t]);if(W)for(var t of W(e))re.call(e,t)&&ee(n,t,e[t]);return n},g=(n,e)=>De(n,we(e));var $=(n,e)=>{var t={};for(var r in n)te.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&W)for(var r of W(n))e.indexOf(r)<0&&re.call(n,r)&&(t[r]=n[r]);return t};var y=(n,e,t)=>new Promise((r,s)=>{var a=d=>{try{o(t.next(d))}catch(c){s(c)}},i=d=>{try{o(t.throw(d))}catch(c){s(c)}},o=d=>d.done?r(d.value):Promise.resolve(d.value).then(a,i);o((t=t.apply(n,e)).next())});var Ie="string",xe="datetime",Oe="boolean",Pe="number",Ee="null",Ae="vector",se=[Ie,xe,Oe,Pe,Ee,Ae];var B=class n{makeRequest(e,{headers:t,method:r,protocol:s,requestData:a,timeout:i}){throw new Error("makeRequest not implemented.")}static makeTimeoutError(){let e=new TypeError(n.TIMEOUT_ERROR_CODE);return e.code=n.TIMEOUT_ERROR_CODE,e}};B.CONNECTION_CLOSED_ERROR_CODES=["ECONNRESET","EPIPE"];B.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 n extends B{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=n.makeFetchWithAbortTimeout(e):this._fetchFn=n.makeFetchWithRaceTimeout(e)}static makeFetchWithRaceTimeout(e){return(t,r,s)=>{let a,i=new Promise((d,c)=>{a=setTimeout(()=>{a=null,c(B.makeTimeoutError())},s)}),o=e(t,r);return Promise.race([o,i]).finally(()=>{a&&clearTimeout(a)})}}static makeFetchWithAbortTimeout(e){return(t,r,s)=>y(this,null,function*(){let a=new AbortController,i=setTimeout(()=>{i=null,a.abort(B.makeTimeoutError())},s);try{return yield e(t,g(p({},r),{signal:a.signal}))}catch(o){throw o.name==="AbortError"?B.makeTimeoutError():o}finally{i&&clearTimeout(i)}})}makeRequest(o,d){return y(this,arguments,function*(e,{headers:t,method:r,protocol:s,requestData:a,timeout:i}){let c=r=="POST"||r=="PUT"||r=="PATCH",h=JSON.stringify(a)||(c?"":void 0),l=yield this._fetchFn(e,{body:h,headers:t,method:r},i!=null?i:8e4);return new Q(l)})}},Q=class n extends N{constructor(e){super(e.status,n._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 w=n=>typeof n=="object"&&Array.isArray(n)&&n!==null,I=n=>n!==null&&Object.prototype.toString.call(n)==="[object Object]",F=n=>I(n)&&Object.keys(n).length===0,ae=n=>typeof n=="number"||typeof n=="string"||typeof n=="boolean"||n===null;function Be(n,e){let t=p({},n);return e.forEach(r=>{delete t[r]}),t}var H=n=>I(n)?Be(n,["__label","__id","__proptypes"]):n,v=n=>w(n)?n.map(v):I(n)?Object.fromEntries(Object.entries(n).filter(([e,t])=>t!==void 0).map(([e,t])=>[e,v(t)])):n,z=n=>w(n)?n.every(ae):ae(n),M=n=>I(n)&&Object.values(n).every(z),C=n=>typeof n=="string",x=n=>{if(typeof n=="string"){if(n.toLowerCase()==="true")return!0;if(n.toLowerCase()==="false")return!1}return w(n)&&n.length===0||I(n)&&Object.keys(n).length===0?!1:!!n};var G=["httpClient","timeout","host","port","protocol","url","logger","options"],oe={initial:"in",extended:"ex",fullFeatured:"ff"};var j=class n extends Error{constructor(e,t){super(`Record with label "${e}" and properties ${JSON.stringify(t)} already exists`),this.name="UniquenessError",Object.setPrototypeOf(this,n.prototype)}},q=class n extends Error{constructor(e){super(e),this.name="EmptyTarget",Object.setPrototypeOf(this,n.prototype)}},V=class n 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,n.prototype)}};var J=(n,e)=>y(void 0,null,function*(){let t=Object.entries(n).map(o=>y(void 0,[o],function*([a,i]){return i.default&&typeof i.default!="undefined"&&typeof e[a]=="undefined"?{key:a,value:typeof i.default=="function"?yield i.default():i.default}:{key:a,value:void 0}})),s=(yield Promise.all(t)).reduce((a,{key:i,value:o})=>(o!==void 0&&(a[i]=o),a),{});return p(p({},s),e)}),Z=(n,e)=>Object.entries(e).filter(([t])=>{var r;return(r=n[t])==null?void 0:r.unique}).reduce((t,[r,s])=>(r in n&&(t[r]=s),t),{}),ie=(n,e,t)=>{let r={},s=Object.entries(e).filter(([,a])=>a.unique).reduce((a,[i])=>(a[i]=!0,a),{});return n.forEach(a=>{Object.entries(a).forEach(([i,o])=>{if(i in s)if(r[i]){if(r[i].includes(o))throw new j(t,{[i]:o});r[i]=[...r[i],o]}else r[i]=[o]})}),r},ce=n=>{if(!n)return{};if(!I(n))throw new Error("Config must be an object");if(Object.keys(n).filter(t=>!G.includes(t)).length>0)throw new Error(`Config object may only contain the following: ${G.join(", ")}`);return n};function de(n,e,t){if(!Number.isInteger(e)){if(t!==void 0)return t;throw new Error(`${n} must be an integer`)}return e}function X(n){let e=n.split("-"),t=e[0]+e[1].slice(0,4);return parseInt(t,16)}function pe(n){return new Date(X(n))}function le(n){let e=/^([a-z]{2})_([01]{3}\d{0,})_(.+)$/,t=n.match(e);if(!t)return[null,n];let[,r,s,a]=t,o=Object.entries(oe).find(([m,u])=>u===r)[0],[d,c,h]=s.split("");return[p({},{customDB:d==="1",managedDB:c==="1",selfHosted:h==="1",planType:o}),a]}var D=class{constructor(e={}){this.data=e}exists(){return x(this.data.__id)&&x(this.data.__label)}id(){if(!x(this.data.__id))throw new Error("DBRecordInstance: Unable to access 'id'. The Record's `data.__id` is missing or incorrect.");return this.data.__id}label(){if(!x(this.data.__label))throw new Error("DBRecordInstance: Unable to access 'label'. The Record's `data.__label` is missing or incorrect.");return this.data.__label}proptypes(){if(!x(this.data.__proptypes))throw new Error("DBRecordInstance: Unable to access 'proptypes'. The Record's `data.__proptypes` is missing or incorrect.");return this.data.__proptypes}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.")}}timestamp(){try{return X(this.id())}catch(e){throw new Error("DBRecordInstance: Unable to access 'timestamp'. The Record's `data.__id` is missing or incorrect.")}}delete(e){return y(this,null,function*(){if(!x(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 y(this,null,function*(){if(!x(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 y(this,null,function*(){if(!x(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 y(this,null,function*(){if(!x(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 y(this,null,function*(){if(!x(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}};var qe={"Content-Type":"application/json"},he=({httpClient:n,token:e,url:t})=>(r,i)=>y(void 0,null,function*(){var o=i,{headers:s}=o,a=$(o,["headers"]);let d=yield n.makeRequest(`${t}${r}`,p({credentials:"omit",headers:Object.assign(p(p({},qe),s),typeof e!="undefined"?{token:e}:{})},a));if(d.getStatusCode()>=200&&d.getStatusCode()<300)return yield d.toJSON();throw new Error(`${d.getStatusCode()}`)});var k=class{constructor(e){this.id=e}rollback(){return y(this,null,function*(){return yield b.getInstance().tx.rollback(this.id)})}commit(){return y(this,null,function*(){return yield b.getInstance().tx.commit(this.id)})}};var ye="api.rushdb.com";var ue="https",ge="/api/v1";var T=n=>n?{"x-transaction-id":n}:void 0,_e=n=>C(n)||n instanceof k,R=n=>_e(n)?n instanceof k?n.id:n:void 0,me=n=>/^[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(n),A=n=>{if(C(n)&&me(n))return n;if(n instanceof D&&n.data)return n.data.__id;if(I(n)&&"__id"in n&&me(n.__id))return n.__id},U=n=>!(!I(n)||I(n)&&"name"in n&&!C(n.name)||I(n)&&"type"in n&&(!C(n.type)||!se.includes(n.type))||!("value"in n)||!z(n.value)||"metadata"in n&&!C(n.metadata)||"valueSeparator"in n&&!C(n.valueSeparator)),fe=n=>{let e=ue,t=ye,r=443,s=ge;if("url"in n){let i=new URL(n.url);e=i.protocol.replace(":",""),t=i.hostname,r=parseInt(i.port||(e==="http"?"80":e==="https"?"443":""))}"host"in n&&"port"in n&&"protocol"in n&&(e=n.protocol.replace(":",""),t=n.host,r=n.port),s&&!s.startsWith("/")&&(s="/"+s);let a="";return e==="http"&&r===80||e==="https"&&r===443||(a=":"+r),`${e}://${t}${a}${s}`},S=(n=8)=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let r=0;r<n;r++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t};var L=class{constructor(e,t){this.records={attach:(a,i)=>y(this,[a,i],function*({source:e,target:t,options:r},s){var u,f;let o=R(s),c=`/relationships/${A(e)}`,h={headers:Object.assign({},T(o)),method:"POST",requestData:p(p({targetIds:this._extractTargetIds(t,"Attach")},(r==null?void 0:r.type)&&{type:r.type}),(r==null?void 0:r.direction)&&{direction:r.direction})},l=typeof this.logger=="function"?S():"";(u=this.logger)==null||u.call(this,p({requestId:l,path:c},h));let m=yield this.fetcher(c,h);return(f=this.logger)==null||f.call(this,g(p({requestId:l,path:c},h),{responseData:m.data})),m}),detach:(a,i)=>y(this,[a,i],function*({source:e,target:t,options:r},s){var u,f;let o=R(s),c=`/relationships/${A(e)}`,h={headers:Object.assign({},T(o)),method:"PUT",requestData:p(p({targetIds:this._extractTargetIds(t,"Detach")},(r==null?void 0:r.typeOrTypes)&&{typeOrTypes:r.typeOrTypes}),(r==null?void 0:r.direction)&&{direction:r.direction})},l=typeof this.logger=="function"?S():"";(u=this.logger)==null||u.call(this,p({requestId:l,path:c},h));let m=yield this.fetcher(c,h);return(f=this.logger)==null||f.call(this,g(p({requestId:l,path:c},h),{responseData:m.data})),m}),create:(a,i)=>y(this,[a,i],function*({label:e,data:t,options:r},s){var u,f;let o=R(s),d="/records",c={headers:Object.assign({},T(o)),method:"POST",requestData:{}},h=typeof this.logger=="function"?S():"",l=H(v(t));if(w(l)&&l.every(U))c.requestData={label:e,properties:l,options:r};else if(M(l))c.requestData={label:e,data:l,options:r};else throw I(l)?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.");(u=this.logger)==null||u.call(this,p({requestId:h,path:d},c));let m=yield this.fetcher(d,c);return(f=this.logger)==null||f.call(this,g(p({requestId:h,path:d},c),{responseData:m.data})),m!=null&&m.success&&(m!=null&&m.data)?new D(m.data):new D}),createMany:(e,t)=>y(this,null,function*(){var h,l,m;let r=w(e.data)?e.data:[e.data];if(!r.every(u=>M(u)))throw new Error("records.createMany supports only flat records (no nested objects/arrays). Use records.importJson for nested JSON.");let a=R(t),i="/records/import/json",o={headers:Object.assign({},T(a)),method:"POST",requestData:g(p({},e),{data:r})},d=typeof this.logger=="function"?S():"";(h=this.logger)==null||h.call(this,p({requestId:d,path:i},o));let c=yield this.fetcher(i,o);if((l=this.logger)==null||l.call(this,g(p({requestId:d,path:i},o),{responseData:c.data})),c!=null&&c.success&&(c!=null&&c.data)){let u=w(c.data)?(m=c.data)==null?void 0:m.map(f=>new D(f)):[];return new E(u,c.total)}return new E([])}),importJson:(e,t)=>y(this,null,function*(){var m,u,f;let{data:r,options:s}=e,{label:a}=e,i=r;if(!a)if(I(r)&&!w(r)){let O=H(r),P=Object.keys(O);if(P.length===1)a=P[0],i=O[a];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=R(t),d="/records/import/json",c={headers:Object.assign({},T(o)),method:"POST",requestData:{label:a,data:i,options:s}},h=typeof this.logger=="function"?S():"";(m=this.logger)==null||m.call(this,p({requestId:h,path:d},c));let l=yield this.fetcher(d,c);if((u=this.logger)==null||u.call(this,g(p({requestId:h,path:d},c),{responseData:l.data})),l!=null&&l.success&&(l!=null&&l.data)){let O=w(l.data)?(f=l.data)==null?void 0:f.map(P=>new D(P)):[];return new E(O,l.total)}return new E([])}),importCsv:(e,t)=>y(this,null,function*(){var d,c;let r=R(t),s="/records/import/csv",a={headers:Object.assign({},T(r)),method:"POST",requestData:e},i=typeof this.logger=="function"?S():"";(d=this.logger)==null||d.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);if((c=this.logger)==null||c.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),o!=null&&o.success&&(o!=null&&o.data)){let h=w(o.data)?o.data.map(l=>new D(l)):[];return new E(h,o.total)}return new E([])}),delete:(e,t)=>y(this,null,function*(){var d,c,h;if(F(e.where)&&!((d=this==null?void 0:this.options)!=null&&d.allowForceDelete))throw new q("You must specify criteria to delete records. Empty criteria are not allowed. If this was intentional, use the Dashboard instead.");let r=R(t),s="/records/delete",a={headers:Object.assign({},T(r)),method:"POST",requestData:e!=null?e:{}},i=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);return(h=this.logger)==null||h.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),o}),deleteById:(e,t)=>y(this,null,function*(){var c,h;let r=R(t),s=w(e),a=s?"/records/delete":`/records/${e}`,i={headers:Object.assign({},T(r)),method:s?"POST":"DELETE",requestData:s?{limit:1e3,where:{$id:{$in:e}}}:void 0},o=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,p({requestId:o,path:a},i));let d=yield this.fetcher(a,i);return(h=this.logger)==null||h.call(this,g(p({requestId:o,path:a},i),{responseData:d.data})),d}),export:(e,t)=>y(this,null,function*(){var d,c;let r=R(t),s="/records/export/csv",a={headers:Object.assign({},T(r)),method:"POST",requestData:e!=null?e:{}},i=typeof this.logger=="function"?S():"";(d=this.logger)==null||d.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);return(c=this.logger)==null||c.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),o}),find:(e,t)=>y(this,null,function*(){var m,u;let l=e,{id:r}=l,s=$(l,["id"]),a=R(t),i=r?`/records/${r}/search`:"/records/search",o={headers:Object.assign({},T(a)),method:"POST",requestData:s!=null?s:{}},d=typeof this.logger=="function"?S():"";(m=this.logger)==null||m.call(this,p({requestId:d,path:i},o));let c=yield this.fetcher(i,o);(u=this.logger)==null||u.call(this,g(p({requestId:d,path:i},o),{responseData:c.data}));let h=c.data.map(f=>new D(f));return new E(h,c.total,e)}),findById:(e,t)=>y(this,null,function*(){var d,c;let r=R(t),s=w(e)?"/records":`/records/${e}`,a={headers:Object.assign({},T(r)),method:w(e)?"POST":"GET",requestData:w(e)?{ids:e}:void 0},i=typeof this.logger=="function"?S():"";(d=this.logger)==null||d.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);if((c=this.logger)==null||c.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),w(e)){let h=o.data.map(l=>new D(l));return new E(h,o.total)}else return new D(o.data)}),findOne:(e,t)=>y(this,null,function*(){var c,h;let r=R(t),s="/records/search",a={headers:Object.assign({},T(r)),method:"POST",requestData:g(p({},e),{limit:1,skip:0})},i=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);(h=this.logger)==null||h.call(this,g(p({requestId:i,path:s},a),{responseData:o.data}));let[d]=o.data;return new D(d)}),findUniq:(e,t)=>y(this,null,function*(){var c,h;let r=R(t),s="/records/search",a={headers:Object.assign({},T(r)),method:"POST",requestData:g(p({},e),{limit:1,skip:0})},i=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);if((h=this.logger)==null||h.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),typeof o.total!="undefined"&&o.total>1)throw new V(o.total,e);let[d]=o.data;return new D(d)}),set:(i,o)=>y(this,[i,o],function*({target:e,label:t,data:r,options:s},a){var O,P;let d=R(a),h=`/records/${A(e)}`,l={headers:Object.assign({},T(d)),method:"PUT",requestData:{}},m=typeof this.logger=="function"?S():"",u=H(v(r));if(w(u)&&u.every(U))l.requestData={label:t,properties:u};else if(M(u))l.requestData={label:t,data:u,options:s};else throw I(u)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(O=this.logger)==null||O.call(this,p({requestId:m,path:h},l));let f=yield this.fetcher(h,l);return(P=this.logger)==null||P.call(this,g(p({requestId:m,path:h},l),{responseData:f.data})),f!=null&&f.success&&(f!=null&&f.data)?new D(f.data):new D}),update:(i,o)=>y(this,[i,o],function*({target:e,label:t,data:r,options:s},a){var O,P;let d=R(a),h=`/records/${A(e)}`,l={headers:Object.assign({},T(d)),method:"PATCH",requestData:{}},m=typeof this.logger=="function"?S():"",u=H(v(r));if(w(u)&&u.every(U))l.requestData={label:t,properties:u};else if(M(u))l.requestData={label:t,data:u,options:s};else throw I(u)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(O=this.logger)==null||O.call(this,p({requestId:m,path:h},l));let f=yield this.fetcher(h,l);return(P=this.logger)==null||P.call(this,g(p({requestId:m,path:h},l),{responseData:f.data})),f!=null&&f.success&&(f!=null&&f.data)?new D(f.data):new D}),upsert:(a,i)=>y(this,[a,i],function*({label:e,data:t,options:r},s){var f,O,P;let o=R(s),d="/records",c={headers:Object.assign({},T(o)),method:"POST",requestData:{}},h=typeof this.logger=="function"?S():"",l=H(v(t)),m=g(p({},r),{mergeBy:(f=r==null?void 0:r.mergeBy)!=null?f:[]});if(w(l)&&l.every(U))c.requestData={label:e,properties:l,options:m};else if(M(l))c.requestData={label:e,data:l,options:m};else throw I(l)?new Error("Provided data is not a flat object. Upsert supports flat objects or property drafts array."):new Error("Provided data is not valid.");(O=this.logger)==null||O.call(this,p({requestId:h,path:d},c));let u=yield this.fetcher(d,c);return(P=this.logger)==null||P.call(this,g(p({requestId:h,path:d},c),{responseData:u.data})),u!=null&&u.success&&(u!=null&&u.data)?new D(u.data):new D})};this.relationships={createMany:(e,t)=>y(this,null,function*(){var d,c;let r=R(t),s="/relationships/create-many",a={headers:Object.assign({},T(r)),method:"POST",requestData:e!=null?e:{}},i=typeof this.logger=="function"?S():"";(d=this.logger)==null||d.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);return(c=this.logger)==null||c.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),o}),deleteMany:(e,t)=>y(this,null,function*(){var d,c;let r=R(t),s="/relationships/delete-many",a={headers:Object.assign({},T(r)),method:"POST",requestData:e!=null?e:{}},i=typeof this.logger=="function"?S():"";(d=this.logger)==null||d.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);return(c=this.logger)==null||c.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),o}),find:(e,t)=>y(this,null,function*(){var h,l;let r=R(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 i=`/relationships/search${s.toString()?"?"+s.toString():""}`,o={headers:Object.assign({},T(r)),method:"POST",requestData:e!=null?e:{}},d=typeof this.logger=="function"?S():"";(h=this.logger)==null||h.call(this,p({requestId:d,path:i},o));let c=yield this.fetcher(i,o);return(l=this.logger)==null||l.call(this,g(p({requestId:d,path:i},o),{responseData:c.data})),c})};this.properties={delete:(e,t)=>y(this,null,function*(){var d,c;let r=R(t),s=`/properties/${e}`,a={headers:Object.assign({},T(r)),method:"DELETE"},i=typeof this.logger=="function"?S():"";(d=this.logger)==null||d.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);return(c=this.logger)==null||c.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),o}),find:(e,t)=>y(this,null,function*(){var d,c;let r=R(t),s="/properties/search",a={headers:Object.assign({},T(r)),method:"POST",requestData:e!=null?e:{}},i=typeof this.logger=="function"?S():"";(d=this.logger)==null||d.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);return(c=this.logger)==null||c.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),o}),findById:(e,t)=>y(this,null,function*(){var d,c;let r=R(t),s=`/properties/${e}`,a={headers:Object.assign({},T(r)),method:"GET"},i=typeof this.logger=="function"?S():"";(d=this.logger)==null||d.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);return(c=this.logger)==null||c.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),o}),values:(e,t,r)=>y(this,null,function*(){var c,h;let s=R(r),a=`/properties/${e}/values`,i={headers:Object.assign({},T(s)),method:"POST",requestData:t!=null?t:{}},o=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,p({requestId:o,path:a},i));let d=yield this.fetcher(a,i);return(h=this.logger)==null||h.call(this,g(p({requestId:o,path:a},i),{responseData:d.data})),d})};this.labels={find:(e,t)=>y(this,null,function*(){var d,c;let r=R(t),s="/labels/search",a={headers:Object.assign({},T(r)),method:"POST",requestData:e!=null?e:{}},i=typeof this.logger=="function"?S():"";(d=this.logger)==null||d.call(this,p({requestId:i,path:s},a));let o=yield this.fetcher(s,a);return(c=this.logger)==null||c.call(this,g(p({requestId:i,path:s},a),{responseData:o.data})),o})};this.tx={begin:e=>y(this,null,function*(){var i,o;let t="/tx",r={method:"POST",requestData:I(e)&&"ttl"in e?e:{}},s=typeof this.logger=="function"?S():"";(i=this.logger)==null||i.call(this,p({requestId:s,path:t},r));let a=yield this.fetcher(t,r);return(o=this.logger)==null||o.call(this,g(p({requestId:s,path:t},r),{responseData:a.data})),new k(a.data.id)}),commit:e=>y(this,null,function*(){var o,d;let r=`/tx/${R(e)}/commit`,s={method:"POST",requestData:{}},a=typeof this.logger=="function"?S():"";(o=this.logger)==null||o.call(this,p({requestId:a,path:r},s));let i=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,g(p({requestId:a,path:r},s),{responseData:i.data})),i}),get:e=>y(this,null,function*(){var o,d;let r=`/tx/${R(e)}`,s={method:"GET"},a=typeof this.logger=="function"?S():"";(o=this.logger)==null||o.call(this,p({requestId:a,path:r},s));let i=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,g(p({requestId:a,path:r},s),{responseData:i.data})),new k(i.data.id)}),rollback:e=>y(this,null,function*(){var o,d;let r=`/tx/${R(e)}/rollback`,s={method:"POST",requestData:{}},a=typeof this.logger=="function"?S():"";(o=this.logger)==null||o.call(this,p({requestId:a,path:r},s));let i=yield this.fetcher(r,s);return(d=this.logger)==null||d.call(this,g(p({requestId:a,path:r},s),{responseData:i.data})),i})};this.settings={get:()=>y(this,null,function*(){var a,i;let e="/sdk/settings",t={method:"GET"},r=typeof this.logger=="function"?S():"";(a=this.logger)==null||a.call(this,p({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(i=this.logger)==null||i.call(this,g(p({requestId:r,path:e},t),{responseData:s.data})),s})};this.query={raw:(s,a)=>y(this,[s,a],function*({query:e,params:t},r){var l,m;let i=R(r),o="/query/raw",d={headers:Object.assign({},T(i)),method:"POST",requestData:{query:e,params:t}},c=typeof this.logger=="function"?S():"";(l=this.logger)==null||l.call(this,p({requestId:c,path:o},d));let h=yield this.fetcher(o,d);return(m=this.logger)==null||m.call(this,g(p({requestId:c,path:o},d),{responseData:h.data})),h})};if(this.fetcher=null,t!=null&&t.httpClient){let r=fe(t);this.fetcher=he({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 q(`${t} error: Target id is empty`);return[s]}if(w(e)&&e.every(s=>s instanceof D)){let s=e.map(A).filter(x);if(!s.length)throw new q(`${t} error: Target ids are empty`);return s}if(e instanceof E){let s=(r=e.data)==null?void 0:r.map(A).filter(x);if(!(s!=null&&s.length))throw new q(`${t} error: Target ids are empty`);return s}if(I(e)&&"__id"in e)return[e.__id];if(w(e)&&e.every(s=>I(s)&&"__id"in s)){let s=e.map(A).filter(x);if(!s.length)throw new q(`${t} error: Target ids are empty`);return s}return w(e)?e:C(e)?[e]:[]}};var Se,_=class _ extends L{constructor(e,t){var a;let r=ce(t);super(e,g(p({},r),{httpClient:(a=r.httpClient)!=null?a:Se})),_.instance=this;let[s]=le(e!=null?e:"");this.initializeSync(s,e,r)}initializeSync(e,t,r){let s=e?{planType:e.planType,customDB:e.customDB,managedDB:e.managedDB,selfHosted:e.selfHosted}:null;_.state=p({initialized:!0,debug:!1,timeout:de("timeout",r==null?void 0:r.timeout,8e4),token:t},s&&{serverSettings:s})}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 x(_.instance)}toDBRecordInstance(e){return new D(e)}};_.instance=null,_.state={initialized:!1,debug:!1,timeout:8e4};var b=_,Re=n=>{Se=n};var Te=class{constructor(e,t){this.label=e,this.schema=t}getLabel(){return this.label}toDBRecordInstance(e){return y(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 y(this,null,function*(){let r=e!=null?e:{};return b.getInstance().records.find(g(p({},r),{labels:[this.label]}),t)})}findOne(e,t){return y(this,null,function*(){let r=e!=null?e:{};return b.getInstance().records.findOne(g(p({},r),{labels:[this.label]}),t)})}findById(e,t){return y(this,null,function*(){return this.findOne({where:{$id:e}},t)})}findUniq(e,t){return y(this,null,function*(){let r=e!=null?e:{};return b.getInstance().records.findUniq(g(p({},r),{labels:[this.label]}),t)})}create(e,t){return y(this,null,function*(){var o;let r=yield J(this.schema,e),s=Z(this.schema,r),a=x(s),i=b.getInstance();if(a){let d=t!=null?t:yield i.tx.begin(),c=yield this.find({where:s},d),h=typeof t!="undefined";if(!((o=c==null?void 0:c.data)!=null&&o.length)){let m=yield i.records.create({label:this.label,data:r},d);return h||(yield d.commit()),m}else throw h||(yield d.commit()),new j(this.label,s)}return yield i.records.create({label:this.label,data:r},t)})}attach(a,i){return y(this,arguments,function*({source:e,target:t,options:r},s){return yield b.getInstance().records.attach({source:e,target:t,options:r},s)})}detach(a,i){return y(this,arguments,function*({source:e,target:t,options:r},s){return yield b.getInstance().records.detach({source:e,target:t,options:r},s)})}handleSetOrUpdate(e,t,r,s){return y(this,null,function*(){var d,c;if(w(t)&&t.every(U))throw new Error(`Model.${r} with Array<PropertyDraft> as payload is not implemented yet.`);let a=b.getInstance(),i=yield J(this.schema,t),o=Z(this.schema,i);if(!F(o)){let h=s!=null?s:yield a.tx.begin(),l=yield this.find({where:o},h),m=typeof s!="undefined";if(!((d=l==null?void 0:l.data)!=null&&d.length)||l.data.length===1&&((c=l.data[0])==null?void 0:c.id())===A(e)){let f=yield a.records[r]({target:e,label:this.label,data:i},h);return m||(yield h.commit()),f}else throw m||(yield h.commit()),new j(this.label,o)}return yield a.records[r]({label:this.label,target:e,data:i},s)})}set(e,t,r){return y(this,null,function*(){return yield this.handleSetOrUpdate(e,t,"set",r)})}update(e,t,r){return y(this,null,function*(){return yield this.handleSetOrUpdate(e,t,"update",r)})}createMany(e,t){return y(this,null,function*(){var i;let r=b.getInstance(),s=typeof t!="undefined",a=t!=null?t:yield r.tx.begin();try{let o=yield Promise.all(e.map(h=>y(this,null,function*(){return yield J(this.schema,h)}))),d=ie(o,this.schema,this.label);if(!F(d)){let h=Object.entries(d).map(([m,u])=>({[m]:{$in:u}})),l=yield this.find({where:{$or:h}},a);if((i=l==null?void 0:l.data)!=null&&i.length)throw new j(this.label,Object.keys(d))}let c=yield r.records.createMany({label:this.label,data:o},a);return s||(yield a.commit()),c}catch(o){throw s||(yield a.rollback()),o}})}delete(e,t){return y(this,null,function*(){if(F(e.where))throw new q(`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(g(p({},e),{labels:[this.label]}),t)})}deleteById(e,t){return y(this,null,function*(){return yield b.getInstance().records.deleteById(e,t)})}};Re(new K);var Ht=b;export{D as DBRecordInstance,E as DBRecordsArrayInstance,q as EmptyTargetError,B as HttpClient,Y as HttpClientResponse,Te as Model,V as NonUniqueResultError,L as RestAPI,b as RushDB,k as Transaction,j as UniquenessError,Ht as default,le as extractMixedPropertiesFromToken,pe as idToDate,X as idToTimestamp,Re as initSDK,J as mergeDefaultsWithPayload,ce as parseConfig,Z as pickUniqFieldsFromRecord,ie as pickUniqFieldsFromRecords,de as validateInteger};
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=(o,e,t)=>e in o?Te(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,d=(o,e)=>{for(var t in e||(e={}))re.call(e,t)&&te(o,t,e[t]);if(V)for(var t of V(e))se.call(e,t)&&te(o,t,e[t]);return o},y=(o,e)=>be(o,we(e));var W=(o,e)=>{var t={};for(var r in o)re.call(o,r)&&e.indexOf(r)<0&&(t[r]=o[r]);if(o!=null&&V)for(var r of V(o))e.indexOf(r)<0&&se.call(o,r)&&(t[r]=o[r]);return t};var h=(o,e,t)=>new Promise((r,s)=>{var n=c=>{try{i(t.next(c))}catch(l){s(l)}},a=c=>{try{i(t.throw(c))}catch(l){s(l)}},i=c=>c.done?r(c.value):Promise.resolve(c.value).then(n,a);i((t=t.apply(o,e)).next())});var De="string",Ie="datetime",xe="boolean",Oe="number",Ee="null",ne=[De,Ie,xe,Oe,Ee];var B=class o{makeRequest(e,{headers:t,method:r,protocol:s,requestData:n,timeout:a}){throw new Error("makeRequest not implemented.")}static makeTimeoutError(){let e=new TypeError(o.TIMEOUT_ERROR_CODE);return e.code=o.TIMEOUT_ERROR_CODE,e}};B.CONNECTION_CLOSED_ERROR_CODES=["ECONNRESET","EPIPE"];B.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 o extends B{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=o.makeFetchWithAbortTimeout(e):this._fetchFn=o.makeFetchWithRaceTimeout(e)}static makeFetchWithRaceTimeout(e){return(t,r,s)=>{let n,a=new Promise((c,l)=>{n=setTimeout(()=>{n=null,l(B.makeTimeoutError())},s)}),i=e(t,r);return Promise.race([i,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(B.makeTimeoutError())},s);try{return yield e(t,y(d({},r),{signal:n.signal}))}catch(i){throw i.name==="AbortError"?B.makeTimeoutError():i}finally{a&&clearTimeout(a)}})}makeRequest(i,c){return h(this,arguments,function*(e,{headers:t,method:r,protocol:s,requestData:n,timeout:a}){let l=r=="POST"||r=="PUT"||r=="PATCH",p=JSON.stringify(n)||(l?"":void 0),g=yield this._fetchFn(e,{body:p,headers:t,method:r},a!=null?a:8e4);return new z(g)})}},z=class o extends N{constructor(e){super(e.status,o._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=o=>typeof o=="object"&&Array.isArray(o)&&o!==null,x=o=>o!==null&&Object.prototype.toString.call(o)==="[object Object]",v=o=>x(o)&&Object.keys(o).length===0,oe=o=>typeof o=="number"||typeof o=="string"||typeof o=="boolean"||o===null;function Pe(o,e){let t=d({},o);return e.forEach(r=>{delete t[r]}),t}var M=o=>x(o)?Pe(o,["__label","__id","__proptypes"]):o,F=o=>I(o)?o.map(F):x(o)?Object.fromEntries(Object.entries(o).filter(([e,t])=>t!==void 0).map(([e,t])=>[e,F(t)])):o,G=o=>I(o)?o.every(oe):oe(o),$=o=>x(o)&&Object.values(o).every(G),q=o=>typeof o=="string",E=o=>{if(typeof o=="string"){if(o.toLowerCase()==="true")return!0;if(o.toLowerCase()==="false")return!1}return I(o)&&o.length===0||x(o)&&Object.keys(o).length===0?!1:!!o};var Z=["httpClient","timeout","host","port","protocol","url","logger","options"];var k=class o extends Error{constructor(e,t){super(`Record with label "${e}" and properties ${JSON.stringify(t)} already exists`),this.name="UniquenessError",Object.setPrototypeOf(this,o.prototype)}},C=class o extends Error{constructor(e){super(e),this.name="EmptyTarget",Object.setPrototypeOf(this,o.prototype)}},Q=class o 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,o.prototype)}};var J=(o,e)=>h(void 0,null,function*(){let t=Object.entries(o).map(i=>h(void 0,[i],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:i})=>(i!==void 0&&(n[a]=i),n),{});return d(d({},s),e)}),X=(o,e)=>Object.entries(e).filter(([t])=>{var r;return(r=o[t])==null?void 0:r.unique}).reduce((t,[r,s])=>(r in o&&(t[r]=s),t),{}),ie=(o,e,t)=>{let r={},s=Object.entries(e).filter(([,n])=>n.unique).reduce((n,[a])=>(n[a]=!0,n),{});return o.forEach(n=>{Object.entries(n).forEach(([a,i])=>{if(a in s)if(r[a]){if(r[a].includes(i))throw new k(t,{[a]:i});r[a]=[...r[a],i]}else r[a]=[i]})}),r},ce=o=>{if(!o)return{};if(!x(o))throw new Error("Config must be an object");if(Object.keys(o).filter(t=>!Z.includes(t)).length>0)throw new Error(`Config object may only contain the following: ${Z.join(", ")}`);return o};function de(o,e,t){if(!Number.isInteger(e)){if(t!==void 0)return t;throw new Error(`${o} must be an integer`)}return e}function ee(o){let e=o.split("-"),t=e[0]+e[1].slice(0,4);return parseInt(t,16)}function le(o){return new Date(ee(o))}var D=class{constructor(e={}){this.data=e}get exists(){return E(this.data.__id)&&E(this.data.__label)}get id(){if(!E(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(!E(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(!E(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 le(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(!E(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(!E(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(!E(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(!E(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(!E(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)})}},P=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 i,c;if(!this.searchQuery)throw new Error("DBRecordsArrayInstance: Cannot paginate \u2014 no searchQuery was provided.");let t=(i=this.searchQuery.skip)!=null?i:0,r=(c=this.searchQuery.limit)!=null?c:100,s=y(d({},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
+ `)?`"${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(i=>s.records.update({target:i.id,label:i.data.__label,data:e},t)))}})}};var Ae={"Content-Type":"application/json"},pe=({httpClient:o,token:e,url:t})=>(r,a)=>h(void 0,null,function*(){var i=a,{headers:s}=i,n=W(i,["headers"]);let c=yield o.makeRequest(`${t}${r}`,d({credentials:"omit",headers:Object.assign(d(d({},Ae),s),typeof e!="undefined"?{Authorization:`Bearer ${e}`}:{})},n));if(c.getStatusCode()>=200&&c.getStatusCode()<300)return yield c.toJSON();throw new Error(`${c.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=o=>o?{"x-transaction-id":o}:void 0,Ce=o=>q(o)||o instanceof U,T=o=>Ce(o)?o instanceof U?o.id:o:void 0,ue=o=>/^[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(o),A=o=>{if(q(o)&&ue(o))return o;if(o instanceof D&&o.data)return o.data.__id;if(x(o)&&"__id"in o&&ue(o.__id))return o.__id},H=o=>!(!x(o)||x(o)&&"name"in o&&!q(o.name)||x(o)&&"type"in o&&(!q(o.type)||!ne.includes(o.type))||!("value"in o)||!G(o.value)||"metadata"in o&&!q(o.metadata)||"valueSeparator"in o&&!q(o.valueSeparator)),me=o=>{let e=ge,t=he,r=443,s=ye;if("url"in o){let a=new URL(o.url);e=a.protocol.replace(":",""),t=a.hostname,r=parseInt(a.port||(e==="http"?"80":e==="https"?"443":""))}"host"in o&&"port"in o&&"protocol"in o&&(e=o.protocol.replace(":",""),t=o.host,r=o.port),s&&!s.startsWith("/")&&(s="/"+s);let n="";return e==="http"&&r===80||e==="https"&&r===443||(n=":"+r),`${e}://${t}${n}${s}`},S=(o=8)=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let r=0;r<o;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 f,m;let i=T(s),l=`/relationships/${A(e)}`,p={headers:Object.assign({},w(i)),method:"POST",requestData:d(d({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"?S():"";(f=this.logger)==null||f.call(this,d({requestId:g,path:l},p));let u=yield this.fetcher(l,p);return(m=this.logger)==null||m.call(this,y(d({requestId:g,path:l},p),{responseData:u.data})),u}),detach:(n,a)=>h(this,[n,a],function*({source:e,target:t,options:r},s){var f,m;let i=T(s),l=`/relationships/${A(e)}`,p={headers:Object.assign({},w(i)),method:"PUT",requestData:d(d({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"?S():"";(f=this.logger)==null||f.call(this,d({requestId:g,path:l},p));let u=yield this.fetcher(l,p);return(m=this.logger)==null||m.call(this,y(d({requestId:g,path:l},p),{responseData:u.data})),u}),create:(a,i)=>h(this,[a,i],function*({label:e,data:t,options:r,vectors:s},n){var m,R;let c=T(n),l="/records",p={headers:Object.assign({},w(c)),method:"POST",requestData:{}},g=typeof this.logger=="function"?S():"",u=M(F(t));if(I(u)&&u.every(H))p.requestData=d({label:e,properties:u,options:r},(s==null?void 0:s.length)&&{vectors:s});else if($(u))p.requestData=d({label:e,data:u,options:r},(s==null?void 0:s.length)&&{vectors:s});else throw x(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,d({requestId:g,path:l},p));let f=yield this.fetcher(l,p);return(R=this.logger)==null||R.call(this,y(d({requestId:g,path:l},p),{responseData:f.data})),f!=null&&f.success&&(f!=null&&f.data)?new D(f.data):new D}),createMany:(e,t)=>h(this,null,function*(){var g,u,f,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,O)=>{var j;return(j=e.vectors[O])!=null&&j.length?y(d({},R),{$vectors:e.vectors[O]}):R}):r,a=T(t),i="/records/import/json",c={headers:Object.assign({},w(a)),method:"POST",requestData:{label:e.label,data:n,options:e.options}},l=typeof this.logger=="function"?S():"";(u=this.logger)==null||u.call(this,d({requestId:l,path:i},c));let p=yield this.fetcher(i,c);if((f=this.logger)==null||f.call(this,y(d({requestId:l,path:i},c),{responseData:p.data})),p!=null&&p.success&&(p!=null&&p.data)){let R=I(p.data)?(m=p.data)==null?void 0:m.map(O=>new D(O)):[];return new P(R,p.total)}return new P([])}),importJson:(e,t)=>h(this,null,function*(){var u,f,m;let{data:r,options:s}=e,{label:n}=e,a=r;if(!n)if(x(r)&&!I(r)){let R=M(r),O=Object.keys(R);if(O.length===1)n=O[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 i=T(t),c="/records/import/json",l={headers:Object.assign({},w(i)),method:"POST",requestData:{label:n,data:a,options:s}},p=typeof this.logger=="function"?S():"";(u=this.logger)==null||u.call(this,d({requestId:p,path:c},l));let g=yield this.fetcher(c,l);if((f=this.logger)==null||f.call(this,y(d({requestId:p,path:c},l),{responseData:g.data})),g!=null&&g.success&&(g!=null&&g.data)){let R=I(g.data)?(m=g.data)==null?void 0:m.map(O=>new D(O)):[];return new P(R,g.total)}return new P([])}),importCsv:(e,t)=>h(this,null,function*(){var c,l;let r=T(t),s="/records/import/csv",n={headers:Object.assign({},w(r)),method:"POST",requestData:e},a=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);if((l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i!=null&&i.success&&(i!=null&&i.data)){let p=I(i.data)?i.data.map(g=>new D(g)):[];return new P(p,i.total)}return new P([])}),delete:(e,t)=>h(this,null,function*(){var c,l,p;if(v(e.where)&&!((c=this==null?void 0:this.options)!=null&&c.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"?S():"";(l=this.logger)==null||l.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);return(p=this.logger)==null||p.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i}),deleteById:(e,t)=>h(this,null,function*(){var l,p;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},i=typeof this.logger=="function"?S():"";(l=this.logger)==null||l.call(this,d({requestId:i,path:n},a));let c=yield this.fetcher(n,a);return(p=this.logger)==null||p.call(this,y(d({requestId:i,path:n},a),{responseData:c.data})),c}),export:(e,t)=>h(this,null,function*(){var c,l;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"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i}),find:(e,t)=>h(this,null,function*(){var u,f;let g=e,{id:r}=g,s=W(g,["id"]),n=T(t),a=r?`/records/${r}/search`:"/records/search",i={headers:Object.assign({},w(n)),method:"POST",requestData:s!=null?s:{}},c=typeof this.logger=="function"?S():"";(u=this.logger)==null||u.call(this,d({requestId:c,path:a},i));let l=yield this.fetcher(a,i);(f=this.logger)==null||f.call(this,y(d({requestId:c,path:a},i),{responseData:l.data}));let p=l.data.map(m=>new D(m));return new P(p,l.total,e)}),findById:(e,t)=>h(this,null,function*(){var c,l;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"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);if((l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),I(e)){let p=i.data.map(g=>new D(g));return new P(p,i.total)}else return new D(i.data)}),findOne:(e,t)=>h(this,null,function*(){var l,p;let r=T(t),s="/records/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:y(d({},e),{limit:1,skip:0})},a=typeof this.logger=="function"?S():"";(l=this.logger)==null||l.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);(p=this.logger)==null||p.call(this,y(d({requestId:a,path:s},n),{responseData:i.data}));let[c]=i.data;return new D(c)}),findUniq:(e,t)=>h(this,null,function*(){var l,p;let r=T(t),s="/records/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:y(d({},e),{limit:1,skip:0})},a=typeof this.logger=="function"?S():"";(l=this.logger)==null||l.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);if((p=this.logger)==null||p.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),typeof i.total!="undefined"&&i.total>1)throw new Q(i.total,e);let[c]=i.data;return new D(c)}),set:(i,c)=>h(this,[i,c],function*({target:e,label:t,data:r,options:s,vectors:n},a){var O,j;let l=T(a),g=`/records/${A(e)}`,u={headers:Object.assign({},w(l)),method:"PUT",requestData:{}},f=typeof this.logger=="function"?S():"",m=M(F(r));if(I(m)&&m.every(H))u.requestData=d({label:t,properties:m},(n==null?void 0:n.length)&&{vectors:n});else if($(m))u.requestData=d({label:t,data:m,options:s},(n==null?void 0:n.length)&&{vectors:n});else throw x(m)?new Error("Provided data is not a flat object. Consider to use `importJson` method."):new Error("Provided data is not valid.");(O=this.logger)==null||O.call(this,d({requestId:f,path:g},u));let R=yield this.fetcher(g,u);return(j=this.logger)==null||j.call(this,y(d({requestId:f,path:g},u),{responseData:R.data})),R!=null&&R.success&&(R!=null&&R.data)?new D(R.data):new D}),update:(a,i)=>h(this,[a,i],function*({target:e,label:t,data:r,options:s},n){var R,O;let c=T(n),p=`/records/${A(e)}`,g={headers:Object.assign({},w(c)),method:"PATCH",requestData:{}},u=typeof this.logger=="function"?S():"",f=M(F(r));if(I(f)&&f.every(H))g.requestData={label:t,properties:f};else if($(f))g.requestData={label:t,data:f,options:s};else throw x(f)?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,d({requestId:u,path:p},g));let m=yield this.fetcher(p,g);return(O=this.logger)==null||O.call(this,y(d({requestId:u,path:p},g),{responseData:m.data})),m!=null&&m.success&&(m!=null&&m.data)?new D(m.data):new D}),upsert:(a,i)=>h(this,[a,i],function*({label:e,data:t,options:r,vectors:s},n){var R,O,j;let c=T(n),l="/records",p={headers:Object.assign({},w(c)),method:"POST",requestData:{}},g=typeof this.logger=="function"?S():"",u=M(F(t)),f=y(d({},r),{mergeBy:(R=r==null?void 0:r.mergeBy)!=null?R:[]});if(I(u)&&u.every(H))p.requestData=d({label:e,properties:u,options:f},(s==null?void 0:s.length)&&{vectors:s});else if($(u))p.requestData=d({label:e,data:u,options:f},(s==null?void 0:s.length)&&{vectors:s});else throw x(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.");(O=this.logger)==null||O.call(this,d({requestId:g,path:l},p));let m=yield this.fetcher(l,p);return(j=this.logger)==null||j.call(this,y(d({requestId:g,path:l},p),{responseData:m.data})),m!=null&&m.success&&(m!=null&&m.data)?new D(m.data):new D})};this.relationships={createMany:(e,t)=>h(this,null,function*(){var c,l;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"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i}),deleteMany:(e,t)=>h(this,null,function*(){var c,l;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"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i}),find:(e,t)=>h(this,null,function*(){var p,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():""}`,i={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},c=typeof this.logger=="function"?S():"";(p=this.logger)==null||p.call(this,d({requestId:c,path:a},i));let l=yield this.fetcher(a,i);return(g=this.logger)==null||g.call(this,y(d({requestId:c,path:a},i),{responseData:l.data})),l})};this.properties={delete:(e,t)=>h(this,null,function*(){var c,l;let r=T(t),s=`/properties/${e}`,n={headers:Object.assign({},w(r)),method:"DELETE"},a=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i}),find:(e,t)=>h(this,null,function*(){var c,l;let r=T(t),s="/properties/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i}),findById:(e,t)=>h(this,null,function*(){var c,l;let r=T(t),s=`/properties/${e}`,n={headers:Object.assign({},w(r)),method:"GET"},a=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i}),values:(e,t,r)=>h(this,null,function*(){var l,p;let s=T(r),n=`/properties/${e}/values`,a={headers:Object.assign({},w(s)),method:"POST",requestData:t!=null?t:{}},i=typeof this.logger=="function"?S():"";(l=this.logger)==null||l.call(this,d({requestId:i,path:n},a));let c=yield this.fetcher(n,a);return(p=this.logger)==null||p.call(this,y(d({requestId:i,path:n},a),{responseData:c.data})),c})};this.labels={find:(e,t)=>h(this,null,function*(){var c,l;let r=T(t),s="/labels/search",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i})};this.tx={begin:e=>h(this,null,function*(){var a,i;let t="/tx",r={method:"POST",requestData:x(e)&&"ttl"in e?e:{}},s=typeof this.logger=="function"?S():"";(a=this.logger)==null||a.call(this,d({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(i=this.logger)==null||i.call(this,y(d({requestId:s,path:t},r),{responseData:n.data})),new U(n.data.id)}),commit:e=>h(this,null,function*(){var i,c;let r=`/tx/${T(e)}/commit`,s={method:"POST",requestData:{}},n=typeof this.logger=="function"?S():"";(i=this.logger)==null||i.call(this,d({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(c=this.logger)==null||c.call(this,y(d({requestId:n,path:r},s),{responseData:a.data})),a}),get:e=>h(this,null,function*(){var i,c;let r=`/tx/${T(e)}`,s={method:"GET"},n=typeof this.logger=="function"?S():"";(i=this.logger)==null||i.call(this,d({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(c=this.logger)==null||c.call(this,y(d({requestId:n,path:r},s),{responseData:a.data})),new U(a.data.id)}),rollback:e=>h(this,null,function*(){var i,c;let r=`/tx/${T(e)}/rollback`,s={method:"POST",requestData:{}},n=typeof this.logger=="function"?S():"";(i=this.logger)==null||i.call(this,d({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(c=this.logger)==null||c.call(this,y(d({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"?S():"";(n=this.logger)==null||n.call(this,d({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(a=this.logger)==null||a.call(this,y(d({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),i="/query/raw",c={headers:Object.assign({},w(a)),method:"POST",requestData:{query:e,params:t}},l=typeof this.logger=="function"?S():"";(g=this.logger)==null||g.call(this,d({requestId:l,path:i},c));let p=yield this.fetcher(i,c);return(u=this.logger)==null||u.call(this,y(d({requestId:l,path:i},c),{responseData:p.data})),p})};this.ai={getOntology:(e,t)=>h(this,null,function*(){var c,l;let r=T(t),s="/ai/ontology",n={headers:Object.assign({},w(r)),method:"POST",requestData:e!=null?e:{}},a=typeof this.logger=="function"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i}),getOntologyMarkdown:(e,t)=>h(this,null,function*(){var c,l;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"?S():"";(c=this.logger)==null||c.call(this,d({requestId:a,path:s},n));let i=yield this.fetcher(s,n);return(l=this.logger)==null||l.call(this,y(d({requestId:a,path:s},n),{responseData:i.data})),i}),indexes:{find:()=>h(this,null,function*(){var n,a;let e="/ai/indexes",t={method:"GET",headers:{}},r=typeof this.logger=="function"?S():"";(n=this.logger)==null||n.call(this,d({requestId:r,path:e},t));let s=yield this.fetcher(e,t);return(a=this.logger)==null||a.call(this,y(d({requestId:r,path:e},t),{responseData:s.data})),s}),create:e=>h(this,null,function*(){var p,g;let t="/ai/indexes",l=e,{external:r}=l,s=W(l,["external"]),n=r===!0?y(d({},s),{sourceType:"external"}):s,a={method:"POST",headers:{},requestData:n},i=typeof this.logger=="function"?S():"";(p=this.logger)==null||p.call(this,d({requestId:i,path:t},a));let c=yield this.fetcher(t,a);return(g=this.logger)==null||g.call(this,y(d({requestId:i,path:t},a),{responseData:c.data})),c}),upsertVectors:(e,t)=>h(this,null,function*(){var i,c;let r=`/ai/indexes/${e}/vectors/upsert`,s={method:"POST",headers:{},requestData:t},n=typeof this.logger=="function"?S():"";(i=this.logger)==null||i.call(this,d({requestId:n,path:r},s));let a=yield this.fetcher(r,s);return(c=this.logger)==null||c.call(this,y(d({requestId:n,path:r},s),{responseData:a.data})),a}),delete:e=>h(this,null,function*(){var a,i;let t=`/ai/indexes/${e}`,r={method:"DELETE",headers:{}},s=typeof this.logger=="function"?S():"";(a=this.logger)==null||a.call(this,d({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(i=this.logger)==null||i.call(this,y(d({requestId:s,path:t},r),{responseData:n.data})),n}),stats:e=>h(this,null,function*(){var a,i;let t=`/ai/indexes/${e}/stats`,r={method:"GET",headers:{}},s=typeof this.logger=="function"?S():"";(a=this.logger)==null||a.call(this,d({requestId:s,path:t},r));let n=yield this.fetcher(t,r);return(i=this.logger)==null||i.call(this,y(d({requestId:s,path:t},r),{responseData:n.data})),n})},search:e=>h(this,null,function*(){var i,c,l,p;let t="/ai/search",r={method:"POST",headers:{},requestData:e},s=typeof this.logger=="function"?S():"";(i=this.logger)==null||i.call(this,d({requestId:s,path:t},r));let n=yield this.fetcher(t,r);(c=this.logger)==null||c.call(this,y(d({requestId:s,path:t},r),{responseData:n.data}));let a=((l=n.data)!=null?l:[]).map(g=>new D(g));return new P(a,(p=n.total)!=null?p:0)})};if(this.fetcher=null,t!=null&&t.httpClient){let r=me(t);this.fetcher=pe({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(E);if(!s.length)throw new C(`${t} error: Target ids are empty`);return s}if(e instanceof P){let s=(r=e.data)==null?void 0:r.map(A).filter(E);if(!(s!=null&&s.length))throw new C(`${t} error: Target ids are empty`);return s}if(x(e)&&"__id"in e)return[e.__id];if(I(e)&&e.every(s=>x(s)&&"__id"in s)){let s=e.map(A).filter(E);if(!s.length)throw new C(`${t} error: Target ids are empty`);return s}return I(e)?e:q(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(d({},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 E(_.instance)}toDBRecordInstance(e){return new D(e)}};_.instance=null,_.state={initialized:!1,debug:!1,timeout:8e4};var b=_,Se=o=>{fe=o};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(d({},r),{labels:[this.label]}),t)})}findOne(e,t){return h(this,null,function*(){let r=e!=null?e:{};return b.getInstance().records.findOne(y(d({},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(d({},r),{labels:[this.label]}),t)})}create(e,t,r){return h(this,null,function*(){var c,l;let s=yield J(this.schema,e),n=X(this.schema,s),a=E(n),i=b.getInstance();if(a){let p=t!=null?t:yield i.tx.begin(),g=yield this.find({where:n},p),u=typeof t!="undefined";if(!((c=g==null?void 0:g.data)!=null&&c.length)){let m=yield i.records.create({label:this.label,data:s},p);return u||(yield p.commit()),m}else switch((l=r==null?void 0:r.onConflict)!=null?l:"throw"){case"upsert":{let R=g.data[0],O=yield i.records.set({target:R.id,label:this.label,data:s},p);return u||(yield p.commit()),O}case"skip":return u||(yield p.commit()),null;default:throw u||(yield p.commit()),new k(this.label,n)}}return yield i.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 c,l;if(this.config.validateTargetLabel&&(yield this.validateTargetLabel(e,s)),I(t)&&t.every(H))return yield b.getInstance().records[r]({label:this.label,target:e,data:t},s);let n=b.getInstance(),a=yield J(this.schema,t),i=X(this.schema,a);if(!v(i)){let p=s!=null?s:yield n.tx.begin(),g=yield this.find({where:i},p),u=typeof s!="undefined";if(!((c=g==null?void 0:g.data)!=null&&c.length)||g.data.length===1&&((l=g.data[0])==null?void 0:l.id)===A(e)){let m=yield n.records[r]({target:e,label:this.label,data:a},p);return u||(yield p.commit()),m}else throw u||(yield p.commit()),new k(this.label,i)}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 i=yield Promise.all(e.map(p=>h(this,null,function*(){return yield J(this.schema,p)}))),c=ie(i,this.schema,this.label);if(!v(c)){let p=Object.entries(c).map(([u,f])=>({[u]:{$in:f}})),g=yield this.find({where:{$or:p}},n);if((a=g==null?void 0:g.data)!=null&&a.length)throw new k(this.label,Object.keys(c))}let l=yield r.records.createMany({label:this.label,data:i},n);return s||(yield n.commit()),l}catch(i){throw s||(yield n.rollback()),i}})}delete(e,t){return h(this,null,function*(){if(v(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(d({},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,P as DBRecordsArrayInstance,C as EmptyTargetError,B 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,le as idToDate,ee as idToTimestamp,Se as initSDK,J as mergeDefaultsWithPayload,ce as parseConfig,X as pickUniqFieldsFromRecord,ie as pickUniqFieldsFromRecords,de as validateInteger};
@@ -1,7 +1,7 @@
1
1
  import { HttpClient, HttpClientResponse } from './network/HttpClient.js';
2
2
  import { RushDB } from './sdk/index.js';
3
- import { type ApiResponse, RestAPI } from './api/index.js';
4
- export { RushDB, HttpClient, HttpClientResponse, RestAPI, type ApiResponse };
3
+ import { type ApiResponse, type CreateEmbeddingIndexParams, type EmbeddingIndex, type EmbeddingIndexStats, type SemanticSearchParams, type SemanticSearchResult, type UpsertEmbeddingVectorItem, type UpsertEmbeddingVectorsParams, type UpsertEmbeddingVectorsResult, RestAPI } from './api/index.js';
4
+ export { RushDB, HttpClient, HttpClientResponse, RestAPI, type ApiResponse, type EmbeddingIndex, type CreateEmbeddingIndexParams, type EmbeddingIndexStats, type SemanticSearchParams, type SemanticSearchResult, type UpsertEmbeddingVectorItem, type UpsertEmbeddingVectorsParams, type UpsertEmbeddingVectorsResult };
5
5
  export * from './types/index.js';
6
6
  export * from './sdk/index.js';
7
7
  export default RushDB;
@@ -1,7 +1,7 @@
1
1
  import { HttpClient, HttpClientResponse } from './network/HttpClient.js';
2
2
  import { RushDB } from './sdk/index.js';
3
- import { type ApiResponse, RestAPI } from './api/index.js';
4
- export { RushDB, HttpClient, HttpClientResponse, RestAPI, type ApiResponse };
3
+ import { type ApiResponse, type CreateEmbeddingIndexParams, type EmbeddingIndex, type EmbeddingIndexStats, type SemanticSearchParams, type SemanticSearchResult, type UpsertEmbeddingVectorItem, type UpsertEmbeddingVectorsParams, type UpsertEmbeddingVectorsResult, RestAPI } from './api/index.js';
4
+ export { RushDB, HttpClient, HttpClientResponse, RestAPI, type ApiResponse, type EmbeddingIndex, type CreateEmbeddingIndexParams, type EmbeddingIndexStats, type SemanticSearchParams, type SemanticSearchResult, type UpsertEmbeddingVectorItem, type UpsertEmbeddingVectorsParams, type UpsertEmbeddingVectorsResult };
5
5
  export * from './types/index.js';
6
6
  export * from './sdk/index.js';
7
7
  export default RushDB;
@@ -1,6 +1 @@
1
1
  export declare const ALLOWED_CONFIG_PROPERTIES: string[];
2
- export declare const PlanPrefix: {
3
- readonly initial: "in";
4
- readonly extended: "ex";
5
- readonly fullFeatured: "ff";
6
- };
@@ -1,6 +1,29 @@
1
1
  import type { SearchQuery, Schema, FlattenTypes, InferSchemaTypesRead, InferSchemaTypesWrite, MaybeArray } from '../types/index.js';
2
2
  import type { DBRecord, DBRecordInstance, DBRecordsArrayInstance, DBRecordTarget, RelationDetachOptions, RelationOptions, RelationTarget } from './record.js';
3
3
  import type { Transaction } from './transaction.js';
4
+ /**
5
+ * Configuration options for a Model instance.
6
+ */
7
+ export type ModelConfig = {
8
+ /**
9
+ * When true, `set` and `update` will verify the target record's label
10
+ * matches this model's label before proceeding. Adds one extra DB read.
11
+ * @default false
12
+ */
13
+ validateTargetLabel?: boolean;
14
+ };
15
+ /**
16
+ * Options for the `create` method.
17
+ */
18
+ export type CreateOptions = {
19
+ /**
20
+ * Behavior when a uniqueness conflict is detected.
21
+ * - `'throw'` (default) — throws `UniquenessError`
22
+ * - `'upsert'` — updates the conflicting record instead
23
+ * - `'skip'` — returns `null` without throwing
24
+ */
25
+ onConflict?: 'throw' | 'upsert' | 'skip';
26
+ };
4
27
  /**
5
28
  * Represents a model in the RushDB database.
6
29
  * A model defines the structure and behavior of a specific type of record in the database.
@@ -11,16 +34,15 @@ import type { Transaction } from './transaction.js';
11
34
  export declare class Model<S extends Schema = any> {
12
35
  readonly label: string;
13
36
  readonly schema: S;
37
+ private readonly config;
14
38
  /**
15
39
  * Creates a new Model instance.
16
40
  *
17
41
  * @param modelName - The name/label of the model in the database
18
42
  * @param schema - The schema definition that describes the model's structure
19
- * @param rushDBInstance - Optional RushDB instance for model registration.
20
- * This is the recommended way to register models as it automatically
21
- * registers the model with the RushDB instance during creation.
43
+ * @param config - Optional model configuration
22
44
  */
23
- constructor(modelName: string, schema: S);
45
+ constructor(modelName: string, schema: S, config?: ModelConfig);
24
46
  /** @description
25
47
  * Type helper for a draft version of the schema.
26
48
  * Represents a flat object containing only the record's own properties
@@ -132,7 +154,7 @@ export declare class Model<S extends Schema = any> {
132
154
  * @returns Promise resolving to the created record
133
155
  * @throws UniquenessError if the record violates uniqueness constraints
134
156
  */
135
- create(record: InferSchemaTypesWrite<S>, transaction?: Transaction | string): Promise<DBRecordInstance<S, SearchQuery<S>>>;
157
+ create(record: InferSchemaTypesWrite<S>, transaction?: Transaction | string, options?: CreateOptions): Promise<DBRecordInstance<S, SearchQuery<S>> | null>;
136
158
  /**
137
159
  * Attaches a relationship between records.
138
160
  *
@@ -161,6 +183,11 @@ export declare class Model<S extends Schema = any> {
161
183
  }, transaction?: Transaction | string): Promise<import("../index.node.js").ApiResponse<{
162
184
  message: string;
163
185
  }>>;
186
+ /**
187
+ * Validates that the target record belongs to this model's label.
188
+ * @private
189
+ */
190
+ private validateTargetLabel;
164
191
  /**
165
192
  * Internal method to handle both set and update operations.
166
193
  *
@@ -7,6 +7,7 @@ import type { Transaction } from './transaction.js';
7
7
  type DBRecordInternalProps<S extends Schema = Schema> = {
8
8
  readonly __id: string;
9
9
  readonly __label: string;
10
+ readonly __score?: number;
10
11
  readonly __proptypes?: FlattenTypes<{
11
12
  [Key in RequiredKeysRead<S>]: S[Key]['type'];
12
13
  } & {
@@ -20,9 +21,12 @@ export type RecordProps<S extends Schema = Schema> = S extends S ? InferSchemaTy
20
21
  [K in keyof S]?: S[K];
21
22
  };
22
23
  /**
23
- * DBRecord with possible aggregation fields based on a search query.
24
+ * DBRecord with possible computed metric fields based on a search query.
25
+ * Uses select/groupBy as canonical. The legacy aggregate clause is deprecated and only present for vector similarity until select supports it.
24
26
  */
25
27
  export type DBRecordInferred<S extends Schema, Q extends SearchQuery<S>> = Q extends {
28
+ select: infer Sel extends Record<string, any>;
29
+ } ? DBRecord<S> & ExtractAggregateFields<Sel> : Q extends {
26
30
  aggregate: infer A extends Record<string, any>;
27
31
  } ? DBRecord<S> & ExtractAggregateFields<A> : DBRecord<S>;
28
32
  /**
@@ -75,7 +79,6 @@ export type RelationDetachOptions = {
75
79
  export type DBRecordCreationOptions = {
76
80
  returnResult?: boolean;
77
81
  suggestTypes?: boolean;
78
- castNumberArraysToVectors?: boolean;
79
82
  convertNumericValuesToNumbers?: boolean;
80
83
  capitalizeLabels?: boolean;
81
84
  relationshipType?: string;
@@ -92,50 +95,35 @@ export declare class DBRecordInstance<S extends Schema = Schema, Q extends Searc
92
95
  */
93
96
  constructor(data?: DBRecordInferred<S, Q>);
94
97
  /**
95
- *
96
98
  * Checks if this record instance exists.
97
99
  * A record is considered to exist if it has a valid ID and label.
98
- *
99
- * @returns True if the record exists, false otherwise
100
100
  */
101
- exists(): boolean;
101
+ get exists(): boolean;
102
102
  /**
103
- * Gets the unique ID of this record.
104
- *
105
- * @returns The record's ID
103
+ * The unique ID of this record.
106
104
  * @throws Error if the ID is missing or invalid
107
105
  */
108
- id(): string;
106
+ get id(): string;
109
107
  /**
110
- * Gets the label (type) of this record.
111
- *
112
- * @returns The record's label
108
+ * The label (type) of this record.
113
109
  * @throws Error if the label is missing or invalid
114
110
  */
115
- label(): string;
111
+ get label(): string;
116
112
  /**
117
- * Gets the property types of this record.
118
- *
119
- * @returns The record's property types
113
+ * The property types of this record.
120
114
  * @throws Error if the property types are missing or invalid
121
115
  */
122
- proptypes(): FlattenTypes<FlattenTypes<{ [Key in RequiredKeysRead<S>]: S[Key]["type"]; } & { [Key_1 in OptionalKeysRead<S>]?: S[Key_1]["type"] | undefined; }>> | undefined;
116
+ get proptypes(): FlattenTypes<FlattenTypes<{ [Key in RequiredKeysRead<S>]: S[Key]["type"]; } & { [Key_1 in OptionalKeysRead<S>]?: S[Key_1]["type"] | undefined; }>> | undefined;
123
117
  /**
124
- * Gets the creation date of this record.
125
- * The date is derived from the record's ID.
126
- *
127
- * @returns The record's creation date
118
+ * The creation date of this record, derived from its ID.
128
119
  * @throws Error if the ID is missing or invalid
129
120
  */
130
- date(): Date;
121
+ get date(): Date;
131
122
  /**
132
- * Gets the creation timestamp of this record.
133
- * The timestamp is derived from the record's ID.
134
- *
135
- * @returns The record's creation timestamp
123
+ * The creation timestamp of this record, derived from its ID.
136
124
  * @throws Error if the ID is missing or invalid
137
125
  */
138
- timestamp(): number;
126
+ get timestamp(): number;
139
127
  /**
140
128
  * Deletes this record from the database.
141
129
  *
@@ -213,5 +201,37 @@ export declare class DBRecordsArrayInstance<S extends Schema = Schema, Q extends
213
201
  * @param searchQuery - The search query that was used to retrieve these records
214
202
  */
215
203
  constructor(data?: Array<DBRecordInstance<S, Q>>, total?: number, searchQuery?: SearchQuery<S>);
204
+ /**
205
+ * Deletes all records in this result set.
206
+ *
207
+ * @param transaction - Optional transaction or transaction ID
208
+ * @returns Promise resolving to the delete result
209
+ */
210
+ deleteAll(transaction?: Transaction | string): Promise<{
211
+ success: boolean;
212
+ }>;
213
+ /**
214
+ * Fetches the next page of results based on the original search query.
215
+ *
216
+ * @param options - If `preserveData` is true, appends new results to existing data; otherwise replaces.
217
+ * @returns Promise resolving to the next page as a new DBRecordsArrayInstance
218
+ */
219
+ next(options?: {
220
+ preserveData?: boolean;
221
+ }): Promise<DBRecordsArrayInstance<S, Q>>;
222
+ /**
223
+ * Exports the records in this result set to a CSV string.
224
+ *
225
+ * @returns CSV string with headers derived from the first record's properties
226
+ */
227
+ exportCsv(): string;
228
+ /**
229
+ * Updates properties across all records in this result set.
230
+ * Records are updated in batches of 100.
231
+ *
232
+ * @param patch - The fields to update and their new values
233
+ * @param transaction - Optional transaction or transaction ID
234
+ */
235
+ setProperties(patch: Partial<InferSchemaTypesWrite<S>>, transaction?: Transaction | string): Promise<void>;
216
236
  }
217
237
  export {};
@@ -1,5 +1,4 @@
1
1
  import type { HttpClientInterface } from '../network/HttpClient.js';
2
- import type { PlanPrefix } from './constants';
3
2
  type ApiConnectionConfig = {
4
3
  host?: string;
5
4
  port?: number;
@@ -16,7 +15,6 @@ export type State = {
16
15
  selfHosted: boolean;
17
16
  customDB?: boolean;
18
17
  managedDB?: boolean;
19
- planType?: PlanType;
20
18
  };
21
19
  } & Partial<ApiConnectionConfig>;
22
20
  export type Logger = (payload: any) => void;
@@ -34,7 +32,4 @@ export type SDKConfig = {
34
32
  allowForceDelete?: boolean;
35
33
  };
36
34
  } & ApiConnectionConfig;
37
- export type PlanType = keyof typeof PlanPrefix;
38
- type RawServerSettings = NonNullable<State['serverSettings']>;
39
- export type TokenPublicVariables = Pick<RawServerSettings, 'selfHosted' | 'customDB' | 'managedDB' | 'planType'>;
40
35
  export {};
@@ -1,5 +1,5 @@
1
1
  import type { PropertyValue, Schema, InferSchemaTypesWrite } from '../types/index.js';
2
- import type { SDKConfig, TokenPublicVariables } from './types.js';
2
+ import type { SDKConfig } from './types.js';
3
3
  export declare const mergeDefaultsWithPayload: <S extends Schema = Schema>(schema: S, data: Partial<InferSchemaTypesWrite<S>>) => Promise<InferSchemaTypesWrite<S>>;
4
4
  export declare const pickUniqFieldsFromRecord: <S extends Schema = Schema>(schema: S, data: Partial<InferSchemaTypesWrite<S>>) => Record<string, PropertyValue>;
5
5
  export declare const pickUniqFieldsFromRecords: <S extends Schema = Schema>(data: Array<Partial<InferSchemaTypesWrite<S>>>, schema: S, label: string) => Record<string, PropertyValue[]>;
@@ -7,4 +7,3 @@ export declare const parseConfig: (config?: Record<string, unknown>) => SDKConfi
7
7
  export declare function validateInteger(name: string, n: unknown, defaultVal?: number): number;
8
8
  export declare function idToTimestamp(id: string): number;
9
9
  export declare function idToDate(id: string): Date;
10
- export declare function extractMixedPropertiesFromToken(prefixedToken: string): [TokenPublicVariables | null, string];