@tursodatabase/api
Advanced tools
+10
-3
@@ -108,5 +108,12 @@ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/index.ts | ||
| } | ||
| async listInvites() { | ||
| const response = await TursoClient.request( | ||
| `../v2/organizations/${this.config.org}/invites`, | ||
| this.config | ||
| ); | ||
| return _nullishCoalesce(response.invites, () => ( [])); | ||
| } | ||
| async inviteUser(email, role) { | ||
| const response = await TursoClient.request( | ||
| `organizations/${this.config.org}/invites`, | ||
| `../v2/organizations/${this.config.org}/invites`, | ||
| this.config, | ||
@@ -121,4 +128,4 @@ { | ||
| async deleteInvite(email) { | ||
| return TursoClient.request( | ||
| `organizations/${this.config.org}/invites/${email}`, | ||
| await TursoClient.request( | ||
| `../v2/organizations/${this.config.org}/invites/${email}`, | ||
| this.config, | ||
@@ -125,0 +132,0 @@ { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts","../src/api-token.ts","../src/organization.ts","../src/location.ts","../src/group.ts","../src/database.ts","../src/client.ts"],"names":[],"mappings":";AAAA,OAAO;;;ACqBA,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAoB,QAAqB;AAArB;AAAA,EAAsB;AAAA,EAE1C,MAAM,OAA4B;AAChC,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC;AAAA,MACA,KAAK;AAAA,IACP;AAEA,WAAO,SAAS,UAAU,CAAC;AAAA,EAC7B;AAAA,EAEA,MAAM,OAAO,MAAwC;AACnD,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,mBAAmB,IAAI;AAAA,MACvB,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,MAAwC;AACnD,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,mBAAmB,IAAI;AAAA,MACvB,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,OAA4C;AACzD,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC;AAAA,MACA,KAAK;AAAA,MACL;AAAA,QACE,SAAS;AAAA,UACP,eAAe,UAAU,KAAK;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AAEhD,WAAO;AAAA,MACL,OAAO,SAAS,QAAQ,MAAM,SAAS,MAAM;AAAA,MAC7C,QAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AACF;;;AC5BO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAAoB,QAAqB;AAArB;AAAA,EAAsB;AAAA,EAE1C,MAAM,OAAgC;AACpC,UAAM,WAAW,MAAM,YAAY,QAEhC,iBAAiB,KAAK,MAAM;AAE/B,WAAO,SAAS,iBAAiB,CAAC;AAAA,EACpC;AAAA,EAEA,MAAM,OAAO,SAAuD;AAClE,UAAM,WAAW,MAAM,YAAY,QAEhC,iBAAiB,KAAK,OAAO,GAAG,IAAI,KAAK,QAAQ;AAAA,MAClD,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,CAAC;AAED,WAAO,SAAS,gBAAgB;AAAA,EAClC;AAAA,EAEA,MAAM,SAAwB;AAC5B,WAAO,YAAY;AAAA,MACjB,iBAAiB,KAAK,OAAO,GAAG;AAAA,MAChC,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAyC;AAC7C,UAAM,WAAW,MAAM,YAAY,QAEhC,iBAAiB,KAAK,OAAO,GAAG,YAAY,KAAK,MAAM;AAE1D,WAAO,SAAS,WAAW,CAAC;AAAA,EAC9B;AAAA,EAEA,MAAM,UACJ,UACA,MACkC;AAClC,WAAO,YAAY;AAAA,MACjB,iBAAiB,KAAK,OAAO,GAAG,YAAY,QAAQ;AAAA,MACpD,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB,QAAQ;AAAA,UACR,MAAM,OAAO,OAAO;AAAA,QACtB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,UAAsD;AACvE,WAAO,YAAY;AAAA,MACjB,iBAAiB,KAAK,OAAO,GAAG,YAAY,QAAQ;AAAA,MACpD,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,OACA,MAC6B;AAC7B,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,iBAAiB,KAAK,OAAO,GAAG;AAAA,MAChC,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,EAAE,OAAO,MAAM,OAAO,OAAO,SAAS,CAAC;AAAA,MAC9D;AAAA,IACF;AAEA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,aAAa,OAA4C;AAC7D,WAAO,YAAY;AAAA,MACjB,iBAAiB,KAAK,OAAO,GAAG,YAAY,KAAK;AAAA,MACjD,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAA+B;AACnC,UAAM,WAAW,MAAM,YAAY,QAEhC,iBAAiB,KAAK,OAAO,GAAG,aAAa,KAAK,MAAM;AAE3D,WAAO,SAAS,YAAY,CAAC;AAAA,EAC/B;AACF;;;ACvGO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAoB,QAAqB;AAArB;AAAA,EAAsB;AAAA,EAE1C,MAAM,OAA4B;AAChC,UAAM,WAAW,MAAM,YAAY,QAEhC,aAAa,KAAK,MAAM;AAE3B,QAAI,CAAC,SAAS,WAAW;AACvB,aAAO,CAAC;AAAA,IACV;AAEA,WAAO,OAAO,QAAQ,SAAS,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,WAAW,OAAO;AAAA,MACtE;AAAA,MACA;AAAA,IACF,EAAE;AAAA,EACJ;AAAA,EAEA,MAAM,UAAoC;AACxC,WAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;AAAA,EACnE;AACF;;;ACzCO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAAoB,QAAqB;AAArB;AAAA,EAAsB;AAAA,EAE1C,MAAM,OAAyB;AAC7B,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,iBAAiB,KAAK,OAAO,GAAG;AAAA,MAChC,KAAK;AAAA,IACP;AAEA,WAAO,SAAS,UAAU,CAAC;AAAA,EAC7B;AAAA,EAEA,MAAM,IAAI,MAA8B;AACtC,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,iBAAiB,KAAK,OAAO,GAAG,WAAW,IAAI;AAAA,MAC/C,KAAK;AAAA,IACP;AAEA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,OACJ,MACA,UACA,SACgB;AAChB,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,iBAAiB,KAAK,OAAO,GAAG;AAAA,MAChC,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA;AAAA,UACA,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAA8B;AACzC,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,iBAAiB,KAAK,OAAO,GAAG,WAAW,IAAI;AAAA,MAC/C,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YACJ,WACA,UACgB;AAChB,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,iBAAiB,KAAK,OAAO,GAAG,WAAW,SAAS,cAAc,QAAQ;AAAA,MAC1E,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eACJ,WACA,UACgB;AAChB,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,iBAAiB,KAAK,OAAO,GAAG,WAAW,SAAS,cAAc,QAAQ;AAAA,MAC1E,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,YACJ,WACA,SAOqB;AACrB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,SAAS,YAAY;AACvB,kBAAY,IAAI,cAAc,QAAQ,UAAU;AAAA,IAClD;AAEA,QAAI,SAAS,eAAe;AAC1B,kBAAY,IAAI,iBAAiB,QAAQ,aAAa;AAAA,IACxD;AAEA,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,iBAAiB,KAAK,OAAO,GAAG,WAAW,SAAS,gBAAgB,WAAW;AAAA,MAC/E,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB,aAAa;AAAA,YACX,aAAa;AAAA,cACX,WAAW,SAAS,aAAa,aAAa,aAAa,CAAC;AAAA,YAC9D;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,WAAkC;AACnD,WAAO,MAAM,YAAY;AAAA,MACvB,iBAAiB,KAAK,OAAO,GAAG,WAAW,SAAS;AAAA,MACpD,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;;;ACzFA,SAAS,kBACP,SACmD;AACnD,SAAO,YAAY,UAAa,QAAQ,cAAc;AACxD;AAEA,SAAS,gBACP,SACkD;AAClD,SAAO,YAAY,UAAa,QAAQ,WAAW;AACrD;AAEO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAoB,QAAqB;AAArB;AAAA,EAAsB;AAAA,EAE1C,MAAM,KAAK,SAIa;AACtB,UAAM,cAAc,IAAI;AAAA,MACtB,OAAO,QAAQ;AAAA,QACb,QAAQ,SAAS;AAAA,QACjB,OAAO,SAAS;AAAA,QAChB,MAAM,SAAS;AAAA,MACjB,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,MAAM,UAAU,MAAS;AAAA,IAC/C;AAEA,UAAM,MAAM,iBAAiB,KAAK,OAAO,GAAG,aAC1C,YAAY,SAAS,IAAI,IAAI,YAAY,SAAS,CAAC,KAAK,EAC1D;AAEA,UAAM,WAAW,MAAM,YAAY,QAEhC,KAAK,KAAK,MAAM;AAEnB,YAAQ,SAAS,aAAa,CAAC,GAAG,IAAI,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;AAAA,EACvE;AAAA,EAEA,MAAM,IAAI,QAAmC;AAC3C,UAAM,WAAW,MAAM,YAAY,QAEhC,iBAAiB,KAAK,OAAO,GAAG,cAAc,MAAM,IAAI,KAAK,MAAM;AAEtE,WAAO,KAAK,eAAe,SAAS,QAAQ;AAAA,EAC9C;AAAA,EAEA,MAAM,OACJ,QACA,SAU0B;AAC1B,QAAI,kBAAkB,OAAO,KAAK,gBAAgB,OAAO,GAAG;AAC1D,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACpE;AAEA,QAAI,SAAS,MAAM;AACjB,UAAI,QAAQ,KAAK,SAAS,cAAc,CAAC,QAAQ,KAAK,MAAM;AAC1D,cAAM,IAAI,MAAM,+CAA+C;AAAA,MACjE;AACA,UAAI,QAAQ,KAAK,SAAS,UAAU,CAAC,QAAQ,KAAK,KAAK;AACrD,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC5D;AAAA,IACF;AAEA,QAAI,SAAS,MAAM,WAAW;AAC5B,cAAQ,KAAK,YAAY,KAAK,oBAAoB,QAAQ,KAAK,SAAS;AAAA,IAC1E;AAEA,UAAM,WAAW,MAAM,YAAY,QAEhC,iBAAiB,KAAK,OAAO,GAAG,cAAc,KAAK,QAAQ;AAAA,MAC5D,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB,MAAM;AAAA,QACN,GAAG;AAAA,MACL,CAAC;AAAA,IACH,CAAC;AAED,WAAO,KAAK,qBAAqB,SAAS,QAAQ;AAAA,EACpD;AAAA,EAEA,MAAM,cAAc,QAA+B;AACjD,WAAO,MAAM,YAAY;AAAA,MACvB,iBAAiB,KAAK,OAAO,GAAG,cAAc,MAAM;AAAA,MACpD,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAgB;AAC3B,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,iBAAiB,KAAK,OAAO,GAAG,cAAc,MAAM;AAAA,MACpD,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,cAAc,QAA6C;AAC/D,UAAM,WAAW,MAAM,YAAY;AAAA,MAGjC,iBAAiB,KAAK,OAAO,GAAG,cAAc,MAAM;AAAA,MACpD,KAAK;AAAA,IACP;AAEA,WAAO,SAAS,aAAa,CAAC;AAAA,EAChC;AAAA,EAEA,MAAM,YACJ,QACA,cAC2B;AAC3B,UAAM,WAAW,MAAM,YAAY;AAAA,MAGjC,iBAAiB,KAAK,OAAO,GAAG,cAAc,MAAM,cAAc,YAAY;AAAA,MAC9E,KAAK;AAAA,IACP;AAEA,WAAO,SAAS,YAAY;AAAA,EAC9B;AAAA,EAEA,MAAM,YACJ,QACA,SAOwB;AACxB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,SAAS,YAAY;AACvB,kBAAY,IAAI,cAAc,QAAQ,UAAU;AAAA,IAClD;AAEA,QAAI,SAAS,eAAe;AAC1B,kBAAY,IAAI,iBAAiB,QAAQ,aAAa;AAAA,IACxD;AAEA,UAAM,WAAW,MAAM,YAAY;AAAA,MACjC,iBAAiB,KAAK,OAAO,GAAG,cAAc,MAAM,gBAAgB,WAAW;AAAA,MAC/E,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB,aAAa;AAAA,YACX,aAAa;AAAA,cACX,WAAW,SAAS,aAAa,aAAa,aAAa,CAAC;AAAA,YAC9D;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,QAA+B;AAChD,WAAO,MAAM,YAAY;AAAA,MACvB,iBAAiB,KAAK,OAAO,GAAG,cAAc,MAAM;AAAA,MACpD,KAAK;AAAA,MACL;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,MACJ,QACA,SACwB;AACxB,UAAM,cAAc,IAAI,gBAAgB;AAExC,QAAI,SAAS,MAAM;AACjB,kBAAY,IAAI,QAAQ,KAAK,oBAAoB,QAAQ,IAAI,CAAC;AAAA,IAChE;AAEA,QAAI,SAAS,IAAI;AACf,kBAAY,IAAI,MAAM,KAAK,oBAAoB,QAAQ,EAAE,CAAC;AAAA,IAC5D;AAEA,UAAM,WAAW,MAAM,YAAY;AAAA,MAKjC,iBAAiB,KAAK,OAAO,GAAG,cAAc,MAAM,UAAU,WAAW;AAAA,MACzE,KAAK;AAAA,IACP;AAEA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEQ,oBAAoB,MAA6B;AACvD,WAAO,gBAAgB,OAAO,KAAK,YAAY,IAAI;AAAA,EACrD;AAAA,EAEQ,eAAe,IAAmC;AACxD,WAAO;AAAA,MACL,MAAM,GAAG;AAAA,MACT,IAAI,GAAG;AAAA,MACP,UAAU,GAAG;AAAA,MACb,SAAS,GAAG;AAAA,MACZ,eAAe,GAAG;AAAA,MAClB,MAAM,GAAG;AAAA,MACT,SAAS,GAAG;AAAA,MACZ,OAAO,GAAG;AAAA,MACV,UAAU,GAAG;AAAA,MACb,UAAU,GAAG;AAAA,MACb,cAAc,GAAG;AAAA,MACjB,aAAa,GAAG;AAAA,MAChB,cAAc,GAAG;AAAA,MACjB,QAAQ,GAAG;AAAA,MACX,WAAW,GAAG;AAAA,IAChB;AAAA,EACF;AAAA,EAEQ,qBAAqB,IAAgD;AAC3E,WAAO;AAAA,MACL,IAAI,GAAG;AAAA,MACP,UAAU,GAAG;AAAA,MACb,MAAM,GAAG;AAAA,IACX;AAAA,EACF;AACF;;;AC5TO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAE1C,YAAY,SAAiB,gBAAiC;AAC5D,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS,gBAAgB;AAAA,EAChC;AACF;AAEO,IAAM,cAAN,MAAkB;AAAA,EAQvB,YAAY,QAAqB;AAC/B,QAAI,CAAC,OAAO,OAAO;AACjB,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAEA,SAAK,SAAS;AAAA,MACZ,SAAS;AAAA,MACT,GAAG;AAAA,IACL;AAEA,SAAK,YAAY,IAAI,eAAe,KAAK,MAAM;AAC/C,SAAK,gBAAgB,IAAI,mBAAmB,KAAK,MAAM;AACvD,SAAK,YAAY,IAAI,eAAe,KAAK,MAAM;AAC/C,SAAK,SAAS,IAAI,YAAY,KAAK,MAAM;AACzC,SAAK,YAAY,IAAI,eAAe,KAAK,MAAM;AAAA,EACjD;AAAA,EAEA,aAAa,QACX,KACA,QACA,UAAuB,CAAC,GACxB;AACA,UAAM,WAAW,MAAM,MAAM,IAAI,IAAI,KAAK,OAAO,OAAO,GAAG;AAAA,MACzD,GAAG;AAAA,MACH,SAAS;AAAA,QACP,GAAG,QAAQ;AAAA,QACX,eAAe,UAAU,OAAO,KAAK;AAAA,QACrC,cAAc;AAAA,MAChB;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,gBAAiB,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM;AACvD,cAAM,IAAI,MAAM,gCAAgC,SAAS,MAAM,EAAE;AAAA,MACnE,CAAC;AAED,YAAM,IAAI,iBAAiB,cAAc,OAAO;AAAA,QAC9C,QAAQ,SAAS;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;AAEO,SAAS,aAAa,QAAkC;AAC7D,SAAO,IAAI,YAAY,MAAM;AAC/B","sourcesContent":["import \"whatwg-fetch\";\n\nexport { createClient } from \"./client\";\n\nexport type {\n ApiToken,\n ApiTokenWithJWT,\n RevokedApiToken,\n ApiTokenValidation,\n} from \"./api-token\";\nexport type { TursoClientError } from \"./client\";\nexport type { TursoConfig } from \"./config\";\nexport type {\n Database,\n CreatedDatabase,\n DatabaseUsage,\n InstanceUsages,\n TotalUsage,\n DatabaseInstance,\n DeletedDatabase,\n DatabaseToken,\n} from \"./database\";\nexport type { Group, ExtensionType, GroupToken } from \"./group\";\nexport type { LocationKeys, Location, ClosestLocation } from \"./location\";\nexport type {\n Organization,\n OrganizationMember,\n OrganizationInvite,\n Invoice,\n OrganizationMemberRole,\n OrganizationAddedMember,\n OrganizationRemovedMember,\n} from \"./organization\";\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface ApiToken {\n id: string;\n name: string;\n}\n\nexport interface ApiTokenWithJWT extends ApiToken {\n token: string;\n}\n\nexport interface RevokedApiToken {\n token: string;\n}\n\nexport interface ApiTokenValidation {\n valid: boolean;\n expiry: number;\n}\n\nexport class ApiTokenClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<ApiToken[]> {\n const response = await TursoClient.request<{ tokens: ApiToken[] }>(\n \"auth/api-tokens\",\n this.config\n );\n\n return response.tokens ?? [];\n }\n\n async create(name: string): Promise<ApiTokenWithJWT> {\n const response = await TursoClient.request<ApiTokenWithJWT>(\n `auth/api-tokens/${name}`,\n this.config,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n );\n\n return response;\n }\n\n async revoke(name: string): Promise<RevokedApiToken> {\n const response = await TursoClient.request<RevokedApiToken>(\n `auth/api-tokens/${name}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response;\n }\n\n async validate(token: string): Promise<ApiTokenValidation> {\n const response = await TursoClient.request<{ exp: number }>(\n \"auth/api-tokens/validate\",\n this.config,\n {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }\n );\n\n const currentTime = Math.floor(Date.now() / 1000);\n\n return {\n valid: response.exp !== -1 && response.exp > currentTime,\n expiry: response.exp,\n };\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface Organization {\n name: string;\n slug: string;\n type: \"personal\" | \"team\";\n overages: boolean;\n blocked_reads: boolean;\n blocked_writes: boolean;\n}\n\nexport interface OrganizationMember {\n role: \"owner\" | \"admin\" | \"member\";\n username: string;\n email: string;\n}\n\nexport interface OrganizationInvite {\n ID: number;\n CreatedAt: string;\n UpdatedAt: string;\n DeletedAt: string;\n Role: \"admin\" | \"member\";\n Email: string;\n OrganizationID: number;\n Organization: Organization;\n Accepted: boolean;\n}\n\nexport interface Invoice {\n invoice_number: string;\n amount_due: string;\n due_date: string;\n paid_at: string;\n payment_failed_at: string;\n invoice_pdf: string;\n}\n\nexport type OrganizationMemberRole = \"admin\" | \"member\";\n\nexport interface OrganizationAddedMember {\n member: string;\n role: OrganizationMemberRole;\n}\n\nexport interface OrganizationRemovedMember {\n member: string;\n}\n\nexport class OrganizationClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Organization[]> {\n const response = await TursoClient.request<{\n organizations: Organization[];\n }>(\"organizations\", this.config);\n\n return response.organizations ?? [];\n }\n\n async update(options: { overages: boolean }): Promise<Organization> {\n const response = await TursoClient.request<{\n organization: Organization;\n }>(`organizations/${this.config.org}`, this.config, {\n method: \"PATCH\",\n body: JSON.stringify(options),\n });\n\n return response.organization ?? null;\n }\n\n async delete(): Promise<void> {\n return TursoClient.request(\n `organizations/${this.config.org}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async members(): Promise<OrganizationMember[]> {\n const response = await TursoClient.request<{\n members: OrganizationMember[];\n }>(`organizations/${this.config.org}/members`, this.config);\n\n return response.members ?? [];\n }\n\n async addMember(\n username: string,\n role?: \"admin\" | \"member\"\n ): Promise<OrganizationAddedMember> {\n return TursoClient.request(\n `organizations/${this.config.org}/members/${username}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n member: username,\n role: role ? role : \"member\",\n }),\n }\n );\n }\n\n async removeMember(username: string): Promise<OrganizationRemovedMember> {\n return TursoClient.request(\n `organizations/${this.config.org}/members/${username}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async inviteUser(\n email: string,\n role?: OrganizationMemberRole\n ): Promise<OrganizationInvite> {\n const response = await TursoClient.request<{ invited: OrganizationInvite }>(\n `organizations/${this.config.org}/invites`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({ email, role: role ? role : \"member\" }),\n }\n );\n\n return response.invited;\n }\n\n async deleteInvite(email: string): Promise<OrganizationInvite> {\n return TursoClient.request(\n `organizations/${this.config.org}/invites/${email}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async invoices(): Promise<Invoice[]> {\n const response = await TursoClient.request<{\n invoices: Invoice[];\n }>(`organizations/${this.config.org}/invoices`, this.config);\n\n return response.invoices ?? [];\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport type LocationKeys = {\n ams: string;\n arn: string;\n bog: string;\n bos: string;\n cdg: string;\n den: string;\n dfw: string;\n ewr: string;\n fra: string;\n gdl: string;\n gig: string;\n gru: string;\n hkg: string;\n iad: string;\n jnb: string;\n lax: string;\n lhr: string;\n mad: string;\n mia: string;\n nrt: string;\n ord: string;\n otp: string;\n qro: string;\n scl: string;\n sea: string;\n sin: string;\n sjc: string;\n syd: string;\n waw: string;\n yul: string;\n yyz: string;\n [key: string]: string;\n};\n\nexport type Location = {\n [K in keyof LocationKeys]: { code: K; description: LocationKeys[K] };\n}[keyof LocationKeys];\n\nexport interface ClosestLocation {\n server: keyof LocationKeys;\n client: keyof LocationKeys;\n}\n\nexport class LocationClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Location[]> {\n const response = await TursoClient.request<{\n locations: LocationKeys;\n }>(\"locations\", this.config);\n\n if (!response.locations) {\n return [];\n }\n\n return Object.entries(response.locations).map(([code, description]) => ({\n code,\n description,\n }));\n }\n\n async closest(): Promise<ClosestLocation> {\n return fetch(\"https://region.turso.io/\").then((res) => res.json());\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { LocationKeys } from \"./location\";\nimport { TursoClient } from \"./client\";\nimport type { Database } from \"./database\";\n\nexport interface Group {\n locations: Array<keyof LocationKeys>;\n name: string;\n primary: keyof LocationKeys;\n}\n\nexport type ExtensionType =\n | \"vector\"\n | \"vec\"\n | \"crypto\"\n | \"fuzzy\"\n | \"math\"\n | \"stats\"\n | \"text\"\n | \"unicode\"\n | \"uuid\"\n | \"regexp\";\n\nexport interface GroupToken {\n jwt: string;\n}\n\nexport class GroupClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Group[]> {\n const response = await TursoClient.request<{ groups: Group[] }>(\n `organizations/${this.config.org}/groups`,\n this.config\n );\n\n return response.groups ?? [];\n }\n\n async get(name: string): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${name}`,\n this.config\n );\n\n return response.group;\n }\n\n async create(\n name: string,\n location: keyof LocationKeys,\n options?: { extensions?: Array<ExtensionType> | \"all\" }\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups`,\n this.config,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n name,\n location,\n ...options,\n }),\n }\n );\n\n return response.group;\n }\n\n async delete(name: string): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${name}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response.group;\n }\n\n /**\n * @deprecated Turso Cloud deprecated edge replicas\n */\n async addLocation(\n groupName: string,\n location: keyof LocationKeys\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${groupName}/locations/${location}`,\n this.config,\n {\n method: \"POST\",\n }\n );\n\n return response.group;\n }\n\n /**\n * @deprecated Turso Cloud deprecated edge replicas\n */\n async removeLocation(\n groupName: string,\n location: keyof LocationKeys\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${groupName}/locations/${location}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response.group;\n }\n\n /**\n * Creates a token for a group\n * @param groupName The name of the group\n * @param options Token creation options\n * @param options.expiration Token expiration\n * @param options.authorization Token authorization level\n * @param options.permissions - @deprecated This parameter is deprecated and will be removed in a future version\n */\n async createToken(\n groupName: string,\n options?: {\n expiration?: string;\n authorization?: \"read-only\" | \"full-access\";\n permissions?: {\n read_attach: { databases: Database[\"name\"][] };\n };\n }\n ): Promise<GroupToken> {\n const queryParams = new URLSearchParams();\n\n if (options?.expiration) {\n queryParams.set(\"expiration\", options.expiration);\n }\n\n if (options?.authorization) {\n queryParams.set(\"authorization\", options.authorization);\n }\n\n const response = await TursoClient.request<GroupToken>(\n `organizations/${this.config.org}/groups/${groupName}/auth/tokens?${queryParams}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n permissions: {\n read_attach: {\n databases: options?.permissions?.read_attach?.databases ?? [],\n },\n },\n }),\n }\n );\n\n return response;\n }\n\n async rotateTokens(groupName: string): Promise<void> {\n return await TursoClient.request<void>(\n `organizations/${this.config.org}/groups/${groupName}/auth/rotate`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n}\n","import { LocationKeys } from \"./location\";\nimport { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface Database {\n name: string;\n id: string;\n hostname: string;\n regions?: Array<keyof LocationKeys>;\n primaryRegion?: keyof LocationKeys;\n type: string;\n version: string;\n group?: string;\n sleeping: boolean;\n archived: boolean;\n allow_attach: boolean;\n block_reads: boolean;\n block_writes: boolean;\n schema?: string;\n is_schema: boolean;\n}\n\nexport interface ApiDatabaseResponse\n extends Database,\n ApiCreateDatabaseResponse {}\n\nexport interface ApiCreateDatabaseResponse {\n DbId: string;\n Hostname: string;\n Name: string;\n}\n\nexport interface CreatedDatabase {\n name: string;\n id: string;\n hostname: string;\n}\n\ninterface DatabaseInstanceUsageDetail {\n rows_read: number;\n rows_written: number;\n storage_bytes: number;\n}\n\ninterface DatabaseInstanceUsage {\n uuid: string;\n usage: DatabaseInstanceUsageDetail;\n}\n\nexport interface DatabaseUsage {\n uuid: string;\n instances: DatabaseInstanceUsage[];\n usage: DatabaseInstanceUsageDetail;\n}\n\nexport interface InstanceUsages {\n [instanceUuid: string]: DatabaseInstanceUsageDetail;\n}\n\nexport interface TotalUsage {\n rows_read: number;\n rows_written: number;\n storage_bytes: number;\n}\n\nexport interface DatabaseInstance {\n uuid: string;\n name: keyof LocationKeys;\n type: \"primary\" | \"replica\";\n region: keyof LocationKeys;\n hostname: string;\n}\n\nexport interface DeletedDatabase {\n database: string;\n}\n\nexport interface DatabaseToken {\n jwt: string;\n}\n\ntype MultiDBSchemaOptions =\n | { is_schema: boolean; schema?: never }\n | { is_schema?: never; schema: string }\n | {};\n\nfunction hasIsSchemaOption(\n options: any\n): options is { is_schema: boolean; schema?: never } {\n return options !== undefined && options.is_schema !== undefined;\n}\n\nfunction hasSchemaOption(\n options: any\n): options is { is_schema?: never; schema: string } {\n return options !== undefined && options.schema !== undefined;\n}\n\nexport class DatabaseClient {\n constructor(private config: TursoConfig) {}\n\n async list(options?: {\n schema?: string;\n group?: string;\n type?: \"schema\";\n }): Promise<Database[]> {\n const queryParams = new URLSearchParams(\n Object.entries({\n schema: options?.schema,\n group: options?.group,\n type: options?.type,\n }).filter(([_, value]) => value !== undefined) as [string, string][]\n );\n\n const url = `organizations/${this.config.org}/databases${\n queryParams.toString() ? `?${queryParams.toString()}` : \"\"\n }`;\n\n const response = await TursoClient.request<{\n databases: ApiDatabaseResponse[];\n }>(url, this.config);\n\n return (response.databases ?? []).map((db) => this.formatResponse(db));\n }\n\n async get(dbName: string): Promise<Database> {\n const response = await TursoClient.request<{\n database: ApiDatabaseResponse;\n }>(`organizations/${this.config.org}/databases/${dbName}`, this.config);\n\n return this.formatResponse(response.database);\n }\n\n async create(\n dbName: string,\n options?: {\n image?: \"latest\" | \"canary\";\n group?: string;\n seed?: {\n type: \"database\" | \"dump\";\n name?: string;\n url?: string;\n timestamp?: string | Date;\n };\n } & MultiDBSchemaOptions\n ): Promise<CreatedDatabase> {\n if (hasIsSchemaOption(options) && hasSchemaOption(options)) {\n throw new Error(\"'is_schema' and 'schema' cannot both be provided\");\n }\n\n if (options?.seed) {\n if (options.seed.type === \"database\" && !options.seed.name) {\n throw new Error(\"Seed name is required when type is 'database'\");\n }\n if (options.seed.type === \"dump\" && !options.seed.url) {\n throw new Error(\"Seed URL is required when type is 'dump'\");\n }\n }\n\n if (options?.seed?.timestamp) {\n options.seed.timestamp = this.formatDateParameter(options.seed.timestamp);\n }\n\n const response = await TursoClient.request<{\n database: ApiCreateDatabaseResponse;\n }>(`organizations/${this.config.org}/databases`, this.config, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n name: dbName,\n ...options,\n }),\n });\n\n return this.formatCreateResponse(response.database);\n }\n\n async updateVersion(dbName: string): Promise<void> {\n return await TursoClient.request(\n `organizations/${this.config.org}/databases/${dbName}/update`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n\n async delete(dbName: string) {\n const response = await TursoClient.request<DeletedDatabase>(\n `organizations/${this.config.org}/databases/${dbName}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response;\n }\n\n async listInstances(dbName: string): Promise<DatabaseInstance[]> {\n const response = await TursoClient.request<{\n instances: DatabaseInstance[];\n }>(\n `organizations/${this.config.org}/databases/${dbName}/instances`,\n this.config\n );\n\n return response.instances ?? [];\n }\n\n async getInstance(\n dbName: string,\n instanceName: keyof LocationKeys\n ): Promise<DatabaseInstance> {\n const response = await TursoClient.request<{\n instance: DatabaseInstance;\n }>(\n `organizations/${this.config.org}/databases/${dbName}/instances/${instanceName}`,\n this.config\n );\n\n return response.instance ?? null;\n }\n\n async createToken(\n dbName: string,\n options?: {\n expiration?: string;\n authorization?: \"read-only\" | \"full-access\";\n permissions?: {\n read_attach: { databases: Database[\"name\"][] };\n };\n }\n ): Promise<DatabaseToken> {\n const queryParams = new URLSearchParams();\n\n if (options?.expiration) {\n queryParams.set(\"expiration\", options.expiration);\n }\n\n if (options?.authorization) {\n queryParams.set(\"authorization\", options.authorization);\n }\n\n const response = await TursoClient.request<DatabaseToken>(\n `organizations/${this.config.org}/databases/${dbName}/auth/tokens?${queryParams}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n permissions: {\n read_attach: {\n databases: options?.permissions?.read_attach?.databases ?? [],\n },\n },\n }),\n }\n );\n\n return response;\n }\n\n async rotateTokens(dbName: string): Promise<void> {\n return await TursoClient.request<void>(\n `organizations/${this.config.org}/databases/${dbName}/auth/rotate`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n\n async usage(\n dbName: string,\n options?: { from?: Date | string; to?: Date | string }\n ): Promise<DatabaseUsage> {\n const queryParams = new URLSearchParams();\n\n if (options?.from) {\n queryParams.set(\"from\", this.formatDateParameter(options.from));\n }\n\n if (options?.to) {\n queryParams.set(\"to\", this.formatDateParameter(options.to));\n }\n\n const response = await TursoClient.request<{\n database: DatabaseUsage;\n instances: InstanceUsages;\n total: TotalUsage;\n }>(\n `organizations/${this.config.org}/databases/${dbName}/usage?${queryParams}`,\n this.config\n );\n\n return response.database;\n }\n\n private formatDateParameter(date: Date | string): string {\n return date instanceof Date ? date.toISOString() : date;\n }\n\n private formatResponse(db: ApiDatabaseResponse): Database {\n return {\n name: db.Name,\n id: db.DbId,\n hostname: db.Hostname,\n regions: db.regions,\n primaryRegion: db.primaryRegion,\n type: db.type,\n version: db.version,\n group: db.group,\n sleeping: db.sleeping,\n archived: db.archived,\n allow_attach: db.allow_attach,\n block_reads: db.block_reads,\n block_writes: db.block_writes,\n schema: db.schema,\n is_schema: db.is_schema,\n };\n }\n\n private formatCreateResponse(db: ApiCreateDatabaseResponse): CreatedDatabase {\n return {\n id: db.DbId,\n hostname: db.Hostname,\n name: db.Name,\n };\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { ApiTokenClient } from \"./api-token\";\nimport { OrganizationClient } from \"./organization\";\nimport { LocationClient } from \"./location\";\nimport { GroupClient } from \"./group\";\nimport { DatabaseClient } from \"./database\";\n\ninterface ApiErrorResponse {\n error: string;\n}\n\ninterface AdditionalInfo {\n status?: number;\n}\n\nexport class TursoClientError extends Error {\n status?: number;\n constructor(message: string, additionalInfo?: AdditionalInfo) {\n super(message);\n this.name = \"TursoClientError\";\n this.status = additionalInfo?.status;\n }\n}\n\nexport class TursoClient {\n private config: TursoConfig;\n public apiTokens: ApiTokenClient;\n public organizations: OrganizationClient;\n public locations: LocationClient;\n public groups: GroupClient;\n public databases: DatabaseClient;\n\n constructor(config: TursoConfig) {\n if (!config.token) {\n throw new Error(\"You must provide an API token\");\n }\n\n this.config = {\n baseUrl: \"https://api.turso.tech/v1/\",\n ...config,\n };\n\n this.apiTokens = new ApiTokenClient(this.config);\n this.organizations = new OrganizationClient(this.config);\n this.locations = new LocationClient(this.config);\n this.groups = new GroupClient(this.config);\n this.databases = new DatabaseClient(this.config);\n }\n\n static async request<T>(\n url: string,\n config: TursoConfig,\n options: RequestInit = {}\n ) {\n const response = await fetch(new URL(url, config.baseUrl), {\n ...options,\n headers: {\n ...options.headers,\n Authorization: `Bearer ${config.token}`,\n \"User-Agent\": \"@tursodatabase/api\",\n },\n });\n\n if (!response.ok) {\n const errorResponse = (await response.json().catch(() => {\n throw new Error(`Something went wrong! Status ${response.status}`);\n })) as ApiErrorResponse;\n\n throw new TursoClientError(errorResponse.error, {\n status: response.status,\n });\n }\n\n return response.json() as T;\n }\n}\n\nexport function createClient(config: TursoConfig): TursoClient {\n return new TursoClient(config);\n}\n"]} | ||
| {"version":3,"sources":["../src/index.ts","../src/api-token.ts","../src/organization.ts","../src/location.ts","../src/group.ts","../src/database.ts","../src/client.ts"],"names":[],"mappings":"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","sourcesContent":["import \"whatwg-fetch\";\n\nexport { createClient } from \"./client\";\n\nexport type {\n ApiToken,\n ApiTokenWithJWT,\n RevokedApiToken,\n ApiTokenValidation,\n} from \"./api-token\";\nexport type { TursoClientError } from \"./client\";\nexport type { TursoConfig } from \"./config\";\nexport type {\n Database,\n CreatedDatabase,\n DatabaseUsage,\n InstanceUsages,\n TotalUsage,\n DatabaseInstance,\n DeletedDatabase,\n DatabaseToken,\n} from \"./database\";\nexport type { Group, ExtensionType, GroupToken } from \"./group\";\nexport type { LocationKeys, Location, ClosestLocation } from \"./location\";\nexport type {\n Organization,\n OrganizationMember,\n OrganizationInvite,\n OrganizationInviteCreated,\n Invoice,\n OrganizationMemberRole,\n OrganizationAddedMember,\n OrganizationRemovedMember,\n} from \"./organization\";\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface ApiToken {\n id: string;\n name: string;\n}\n\nexport interface ApiTokenWithJWT extends ApiToken {\n token: string;\n}\n\nexport interface RevokedApiToken {\n token: string;\n}\n\nexport interface ApiTokenValidation {\n valid: boolean;\n expiry: number;\n}\n\nexport class ApiTokenClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<ApiToken[]> {\n const response = await TursoClient.request<{ tokens: ApiToken[] }>(\n \"auth/api-tokens\",\n this.config\n );\n\n return response.tokens ?? [];\n }\n\n async create(name: string): Promise<ApiTokenWithJWT> {\n const response = await TursoClient.request<ApiTokenWithJWT>(\n `auth/api-tokens/${name}`,\n this.config,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n );\n\n return response;\n }\n\n async revoke(name: string): Promise<RevokedApiToken> {\n const response = await TursoClient.request<RevokedApiToken>(\n `auth/api-tokens/${name}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response;\n }\n\n async validate(token: string): Promise<ApiTokenValidation> {\n const response = await TursoClient.request<{ exp: number }>(\n \"auth/api-tokens/validate\",\n this.config,\n {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }\n );\n\n const currentTime = Math.floor(Date.now() / 1000);\n\n return {\n valid: response.exp !== -1 && response.exp > currentTime,\n expiry: response.exp,\n };\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface Organization {\n name: string;\n slug: string;\n type: \"personal\" | \"team\";\n overages: boolean;\n blocked_reads: boolean;\n blocked_writes: boolean;\n}\n\nexport interface OrganizationMember {\n role: \"owner\" | \"admin\" | \"member\";\n username: string;\n email: string;\n}\n\nexport interface OrganizationInvite {\n id: number;\n email: string;\n role: \"admin\" | \"member\" | \"viewer\";\n token: string;\n created_at: string;\n}\n\nexport interface OrganizationInviteCreated {\n email: string;\n role: \"admin\" | \"member\" | \"viewer\";\n organization: string;\n token: string;\n}\n\nexport interface Invoice {\n invoice_number: string;\n amount_due: string;\n due_date: string;\n paid_at: string;\n payment_failed_at: string;\n invoice_pdf: string;\n}\n\nexport type OrganizationMemberRole = \"admin\" | \"member\";\n\nexport interface OrganizationAddedMember {\n member: string;\n role: OrganizationMemberRole;\n}\n\nexport interface OrganizationRemovedMember {\n member: string;\n}\n\nexport class OrganizationClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Organization[]> {\n const response = await TursoClient.request<{\n organizations: Organization[];\n }>(\"organizations\", this.config);\n\n return response.organizations ?? [];\n }\n\n async update(options: { overages: boolean }): Promise<Organization> {\n const response = await TursoClient.request<{\n organization: Organization;\n }>(`organizations/${this.config.org}`, this.config, {\n method: \"PATCH\",\n body: JSON.stringify(options),\n });\n\n return response.organization ?? null;\n }\n\n async delete(): Promise<void> {\n return TursoClient.request(\n `organizations/${this.config.org}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async members(): Promise<OrganizationMember[]> {\n const response = await TursoClient.request<{\n members: OrganizationMember[];\n }>(`organizations/${this.config.org}/members`, this.config);\n\n return response.members ?? [];\n }\n\n async addMember(\n username: string,\n role?: \"admin\" | \"member\"\n ): Promise<OrganizationAddedMember> {\n return TursoClient.request(\n `organizations/${this.config.org}/members/${username}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n member: username,\n role: role ? role : \"member\",\n }),\n }\n );\n }\n\n async removeMember(username: string): Promise<OrganizationRemovedMember> {\n return TursoClient.request(\n `organizations/${this.config.org}/members/${username}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async listInvites(): Promise<OrganizationInvite[]> {\n const response = await TursoClient.request<{\n invites: OrganizationInvite[];\n }>(\n `../v2/organizations/${this.config.org}/invites`,\n this.config\n );\n\n return response.invites ?? [];\n }\n\n async inviteUser(\n email: string,\n role?: OrganizationMemberRole\n ): Promise<OrganizationInviteCreated> {\n const response = await TursoClient.request<{\n invited: OrganizationInviteCreated;\n }>(\n `../v2/organizations/${this.config.org}/invites`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({ email, role: role ? role : \"member\" }),\n }\n );\n\n return response.invited;\n }\n\n async deleteInvite(email: string): Promise<void> {\n await TursoClient.request(\n `../v2/organizations/${this.config.org}/invites/${email}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async invoices(): Promise<Invoice[]> {\n const response = await TursoClient.request<{\n invoices: Invoice[];\n }>(`organizations/${this.config.org}/invoices`, this.config);\n\n return response.invoices ?? [];\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport type LocationKeys = {\n ams: string;\n arn: string;\n bog: string;\n bos: string;\n cdg: string;\n den: string;\n dfw: string;\n ewr: string;\n fra: string;\n gdl: string;\n gig: string;\n gru: string;\n hkg: string;\n iad: string;\n jnb: string;\n lax: string;\n lhr: string;\n mad: string;\n mia: string;\n nrt: string;\n ord: string;\n otp: string;\n qro: string;\n scl: string;\n sea: string;\n sin: string;\n sjc: string;\n syd: string;\n waw: string;\n yul: string;\n yyz: string;\n [key: string]: string;\n};\n\nexport type Location = {\n [K in keyof LocationKeys]: { code: K; description: LocationKeys[K] };\n}[keyof LocationKeys];\n\nexport interface ClosestLocation {\n server: keyof LocationKeys;\n client: keyof LocationKeys;\n}\n\nexport class LocationClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Location[]> {\n const response = await TursoClient.request<{\n locations: LocationKeys;\n }>(\"locations\", this.config);\n\n if (!response.locations) {\n return [];\n }\n\n return Object.entries(response.locations).map(([code, description]) => ({\n code,\n description,\n }));\n }\n\n async closest(): Promise<ClosestLocation> {\n return fetch(\"https://region.turso.io/\").then((res) => res.json());\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { LocationKeys } from \"./location\";\nimport { TursoClient } from \"./client\";\nimport type { Database } from \"./database\";\n\nexport interface Group {\n locations: Array<keyof LocationKeys>;\n name: string;\n primary: keyof LocationKeys;\n}\n\nexport type ExtensionType =\n | \"vector\"\n | \"vec\"\n | \"crypto\"\n | \"fuzzy\"\n | \"math\"\n | \"stats\"\n | \"text\"\n | \"unicode\"\n | \"uuid\"\n | \"regexp\";\n\nexport interface GroupToken {\n jwt: string;\n}\n\nexport class GroupClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Group[]> {\n const response = await TursoClient.request<{ groups: Group[] }>(\n `organizations/${this.config.org}/groups`,\n this.config\n );\n\n return response.groups ?? [];\n }\n\n async get(name: string): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${name}`,\n this.config\n );\n\n return response.group;\n }\n\n async create(\n name: string,\n location: keyof LocationKeys,\n options?: { extensions?: Array<ExtensionType> | \"all\" }\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups`,\n this.config,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n name,\n location,\n ...options,\n }),\n }\n );\n\n return response.group;\n }\n\n async delete(name: string): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${name}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response.group;\n }\n\n /**\n * @deprecated Turso Cloud deprecated edge replicas\n */\n async addLocation(\n groupName: string,\n location: keyof LocationKeys\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${groupName}/locations/${location}`,\n this.config,\n {\n method: \"POST\",\n }\n );\n\n return response.group;\n }\n\n /**\n * @deprecated Turso Cloud deprecated edge replicas\n */\n async removeLocation(\n groupName: string,\n location: keyof LocationKeys\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${groupName}/locations/${location}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response.group;\n }\n\n /**\n * Creates a token for a group\n * @param groupName The name of the group\n * @param options Token creation options\n * @param options.expiration Token expiration\n * @param options.authorization Token authorization level\n * @param options.permissions - @deprecated This parameter is deprecated and will be removed in a future version\n */\n async createToken(\n groupName: string,\n options?: {\n expiration?: string;\n authorization?: \"read-only\" | \"full-access\";\n permissions?: {\n read_attach: { databases: Database[\"name\"][] };\n };\n }\n ): Promise<GroupToken> {\n const queryParams = new URLSearchParams();\n\n if (options?.expiration) {\n queryParams.set(\"expiration\", options.expiration);\n }\n\n if (options?.authorization) {\n queryParams.set(\"authorization\", options.authorization);\n }\n\n const response = await TursoClient.request<GroupToken>(\n `organizations/${this.config.org}/groups/${groupName}/auth/tokens?${queryParams}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n permissions: {\n read_attach: {\n databases: options?.permissions?.read_attach?.databases ?? [],\n },\n },\n }),\n }\n );\n\n return response;\n }\n\n async rotateTokens(groupName: string): Promise<void> {\n return await TursoClient.request<void>(\n `organizations/${this.config.org}/groups/${groupName}/auth/rotate`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n}\n","import { LocationKeys } from \"./location\";\nimport { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface Database {\n name: string;\n id: string;\n hostname: string;\n regions?: Array<keyof LocationKeys>;\n primaryRegion?: keyof LocationKeys;\n type: string;\n version: string;\n group?: string;\n sleeping: boolean;\n archived: boolean;\n allow_attach: boolean;\n block_reads: boolean;\n block_writes: boolean;\n schema?: string;\n is_schema: boolean;\n}\n\nexport interface ApiDatabaseResponse\n extends Database,\n ApiCreateDatabaseResponse {}\n\nexport interface ApiCreateDatabaseResponse {\n DbId: string;\n Hostname: string;\n Name: string;\n}\n\nexport interface CreatedDatabase {\n name: string;\n id: string;\n hostname: string;\n}\n\ninterface DatabaseInstanceUsageDetail {\n rows_read: number;\n rows_written: number;\n storage_bytes: number;\n}\n\ninterface DatabaseInstanceUsage {\n uuid: string;\n usage: DatabaseInstanceUsageDetail;\n}\n\nexport interface DatabaseUsage {\n uuid: string;\n instances: DatabaseInstanceUsage[];\n usage: DatabaseInstanceUsageDetail;\n}\n\nexport interface InstanceUsages {\n [instanceUuid: string]: DatabaseInstanceUsageDetail;\n}\n\nexport interface TotalUsage {\n rows_read: number;\n rows_written: number;\n storage_bytes: number;\n}\n\nexport interface DatabaseInstance {\n uuid: string;\n name: keyof LocationKeys;\n type: \"primary\" | \"replica\";\n region: keyof LocationKeys;\n hostname: string;\n}\n\nexport interface DeletedDatabase {\n database: string;\n}\n\nexport interface DatabaseToken {\n jwt: string;\n}\n\ntype MultiDBSchemaOptions =\n | { is_schema: boolean; schema?: never }\n | { is_schema?: never; schema: string }\n | {};\n\nfunction hasIsSchemaOption(\n options: any\n): options is { is_schema: boolean; schema?: never } {\n return options !== undefined && options.is_schema !== undefined;\n}\n\nfunction hasSchemaOption(\n options: any\n): options is { is_schema?: never; schema: string } {\n return options !== undefined && options.schema !== undefined;\n}\n\nexport class DatabaseClient {\n constructor(private config: TursoConfig) {}\n\n async list(options?: {\n schema?: string;\n group?: string;\n type?: \"schema\";\n }): Promise<Database[]> {\n const queryParams = new URLSearchParams(\n Object.entries({\n schema: options?.schema,\n group: options?.group,\n type: options?.type,\n }).filter(([_, value]) => value !== undefined) as [string, string][]\n );\n\n const url = `organizations/${this.config.org}/databases${\n queryParams.toString() ? `?${queryParams.toString()}` : \"\"\n }`;\n\n const response = await TursoClient.request<{\n databases: ApiDatabaseResponse[];\n }>(url, this.config);\n\n return (response.databases ?? []).map((db) => this.formatResponse(db));\n }\n\n async get(dbName: string): Promise<Database> {\n const response = await TursoClient.request<{\n database: ApiDatabaseResponse;\n }>(`organizations/${this.config.org}/databases/${dbName}`, this.config);\n\n return this.formatResponse(response.database);\n }\n\n async create(\n dbName: string,\n options?: {\n image?: \"latest\" | \"canary\";\n group?: string;\n seed?: {\n type: \"database\" | \"dump\";\n name?: string;\n url?: string;\n timestamp?: string | Date;\n };\n } & MultiDBSchemaOptions\n ): Promise<CreatedDatabase> {\n if (hasIsSchemaOption(options) && hasSchemaOption(options)) {\n throw new Error(\"'is_schema' and 'schema' cannot both be provided\");\n }\n\n if (options?.seed) {\n if (options.seed.type === \"database\" && !options.seed.name) {\n throw new Error(\"Seed name is required when type is 'database'\");\n }\n if (options.seed.type === \"dump\" && !options.seed.url) {\n throw new Error(\"Seed URL is required when type is 'dump'\");\n }\n }\n\n if (options?.seed?.timestamp) {\n options.seed.timestamp = this.formatDateParameter(options.seed.timestamp);\n }\n\n const response = await TursoClient.request<{\n database: ApiCreateDatabaseResponse;\n }>(`organizations/${this.config.org}/databases`, this.config, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n name: dbName,\n ...options,\n }),\n });\n\n return this.formatCreateResponse(response.database);\n }\n\n async updateVersion(dbName: string): Promise<void> {\n return await TursoClient.request(\n `organizations/${this.config.org}/databases/${dbName}/update`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n\n async delete(dbName: string) {\n const response = await TursoClient.request<DeletedDatabase>(\n `organizations/${this.config.org}/databases/${dbName}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response;\n }\n\n async listInstances(dbName: string): Promise<DatabaseInstance[]> {\n const response = await TursoClient.request<{\n instances: DatabaseInstance[];\n }>(\n `organizations/${this.config.org}/databases/${dbName}/instances`,\n this.config\n );\n\n return response.instances ?? [];\n }\n\n async getInstance(\n dbName: string,\n instanceName: keyof LocationKeys\n ): Promise<DatabaseInstance> {\n const response = await TursoClient.request<{\n instance: DatabaseInstance;\n }>(\n `organizations/${this.config.org}/databases/${dbName}/instances/${instanceName}`,\n this.config\n );\n\n return response.instance ?? null;\n }\n\n async createToken(\n dbName: string,\n options?: {\n expiration?: string;\n authorization?: \"read-only\" | \"full-access\";\n permissions?: {\n read_attach: { databases: Database[\"name\"][] };\n };\n }\n ): Promise<DatabaseToken> {\n const queryParams = new URLSearchParams();\n\n if (options?.expiration) {\n queryParams.set(\"expiration\", options.expiration);\n }\n\n if (options?.authorization) {\n queryParams.set(\"authorization\", options.authorization);\n }\n\n const response = await TursoClient.request<DatabaseToken>(\n `organizations/${this.config.org}/databases/${dbName}/auth/tokens?${queryParams}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n permissions: {\n read_attach: {\n databases: options?.permissions?.read_attach?.databases ?? [],\n },\n },\n }),\n }\n );\n\n return response;\n }\n\n async rotateTokens(dbName: string): Promise<void> {\n return await TursoClient.request<void>(\n `organizations/${this.config.org}/databases/${dbName}/auth/rotate`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n\n async usage(\n dbName: string,\n options?: { from?: Date | string; to?: Date | string }\n ): Promise<DatabaseUsage> {\n const queryParams = new URLSearchParams();\n\n if (options?.from) {\n queryParams.set(\"from\", this.formatDateParameter(options.from));\n }\n\n if (options?.to) {\n queryParams.set(\"to\", this.formatDateParameter(options.to));\n }\n\n const response = await TursoClient.request<{\n database: DatabaseUsage;\n instances: InstanceUsages;\n total: TotalUsage;\n }>(\n `organizations/${this.config.org}/databases/${dbName}/usage?${queryParams}`,\n this.config\n );\n\n return response.database;\n }\n\n private formatDateParameter(date: Date | string): string {\n return date instanceof Date ? date.toISOString() : date;\n }\n\n private formatResponse(db: ApiDatabaseResponse): Database {\n return {\n name: db.Name,\n id: db.DbId,\n hostname: db.Hostname,\n regions: db.regions,\n primaryRegion: db.primaryRegion,\n type: db.type,\n version: db.version,\n group: db.group,\n sleeping: db.sleeping,\n archived: db.archived,\n allow_attach: db.allow_attach,\n block_reads: db.block_reads,\n block_writes: db.block_writes,\n schema: db.schema,\n is_schema: db.is_schema,\n };\n }\n\n private formatCreateResponse(db: ApiCreateDatabaseResponse): CreatedDatabase {\n return {\n id: db.DbId,\n hostname: db.Hostname,\n name: db.Name,\n };\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { ApiTokenClient } from \"./api-token\";\nimport { OrganizationClient } from \"./organization\";\nimport { LocationClient } from \"./location\";\nimport { GroupClient } from \"./group\";\nimport { DatabaseClient } from \"./database\";\n\ninterface ApiErrorResponse {\n error: string;\n}\n\ninterface AdditionalInfo {\n status?: number;\n}\n\nexport class TursoClientError extends Error {\n status?: number;\n constructor(message: string, additionalInfo?: AdditionalInfo) {\n super(message);\n this.name = \"TursoClientError\";\n this.status = additionalInfo?.status;\n }\n}\n\nexport class TursoClient {\n private config: TursoConfig;\n public apiTokens: ApiTokenClient;\n public organizations: OrganizationClient;\n public locations: LocationClient;\n public groups: GroupClient;\n public databases: DatabaseClient;\n\n constructor(config: TursoConfig) {\n if (!config.token) {\n throw new Error(\"You must provide an API token\");\n }\n\n this.config = {\n baseUrl: \"https://api.turso.tech/v1/\",\n ...config,\n };\n\n this.apiTokens = new ApiTokenClient(this.config);\n this.organizations = new OrganizationClient(this.config);\n this.locations = new LocationClient(this.config);\n this.groups = new GroupClient(this.config);\n this.databases = new DatabaseClient(this.config);\n }\n\n static async request<T>(\n url: string,\n config: TursoConfig,\n options: RequestInit = {}\n ) {\n const response = await fetch(new URL(url, config.baseUrl), {\n ...options,\n headers: {\n ...options.headers,\n Authorization: `Bearer ${config.token}`,\n \"User-Agent\": \"@tursodatabase/api\",\n },\n });\n\n if (!response.ok) {\n const errorResponse = (await response.json().catch(() => {\n throw new Error(`Something went wrong! Status ${response.status}`);\n })) as ApiErrorResponse;\n\n throw new TursoClientError(errorResponse.error, {\n status: response.status,\n });\n }\n\n return response.json() as T;\n }\n}\n\nexport function createClient(config: TursoConfig): TursoClient {\n return new TursoClient(config);\n}\n"]} |
+15
-12
@@ -44,12 +44,14 @@ interface TursoConfig { | ||
| interface OrganizationInvite { | ||
| ID: number; | ||
| CreatedAt: string; | ||
| UpdatedAt: string; | ||
| DeletedAt: string; | ||
| Role: "admin" | "member"; | ||
| Email: string; | ||
| OrganizationID: number; | ||
| Organization: Organization; | ||
| Accepted: boolean; | ||
| id: number; | ||
| email: string; | ||
| role: "admin" | "member" | "viewer"; | ||
| token: string; | ||
| created_at: string; | ||
| } | ||
| interface OrganizationInviteCreated { | ||
| email: string; | ||
| role: "admin" | "member" | "viewer"; | ||
| organization: string; | ||
| token: string; | ||
| } | ||
| interface Invoice { | ||
@@ -82,4 +84,5 @@ invoice_number: string; | ||
| removeMember(username: string): Promise<OrganizationRemovedMember>; | ||
| inviteUser(email: string, role?: OrganizationMemberRole): Promise<OrganizationInvite>; | ||
| deleteInvite(email: string): Promise<OrganizationInvite>; | ||
| listInvites(): Promise<OrganizationInvite[]>; | ||
| inviteUser(email: string, role?: OrganizationMemberRole): Promise<OrganizationInviteCreated>; | ||
| deleteInvite(email: string): Promise<void>; | ||
| invoices(): Promise<Invoice[]>; | ||
@@ -310,2 +313,2 @@ } | ||
| export { type ApiToken, type ApiTokenValidation, type ApiTokenWithJWT, type ClosestLocation, type CreatedDatabase, type Database, type DatabaseInstance, type DatabaseToken, type DatabaseUsage, type DeletedDatabase, type ExtensionType, type Group, type GroupToken, type InstanceUsages, type Invoice, type Location, type LocationKeys, type Organization, type OrganizationAddedMember, type OrganizationInvite, type OrganizationMember, type OrganizationMemberRole, type OrganizationRemovedMember, type RevokedApiToken, type TotalUsage, TursoClientError, type TursoConfig, createClient }; | ||
| export { type ApiToken, type ApiTokenValidation, type ApiTokenWithJWT, type ClosestLocation, type CreatedDatabase, type Database, type DatabaseInstance, type DatabaseToken, type DatabaseUsage, type DeletedDatabase, type ExtensionType, type Group, type GroupToken, type InstanceUsages, type Invoice, type Location, type LocationKeys, type Organization, type OrganizationAddedMember, type OrganizationInvite, type OrganizationInviteCreated, type OrganizationMember, type OrganizationMemberRole, type OrganizationRemovedMember, type RevokedApiToken, type TotalUsage, TursoClientError, type TursoConfig, createClient }; |
+15
-12
@@ -44,12 +44,14 @@ interface TursoConfig { | ||
| interface OrganizationInvite { | ||
| ID: number; | ||
| CreatedAt: string; | ||
| UpdatedAt: string; | ||
| DeletedAt: string; | ||
| Role: "admin" | "member"; | ||
| Email: string; | ||
| OrganizationID: number; | ||
| Organization: Organization; | ||
| Accepted: boolean; | ||
| id: number; | ||
| email: string; | ||
| role: "admin" | "member" | "viewer"; | ||
| token: string; | ||
| created_at: string; | ||
| } | ||
| interface OrganizationInviteCreated { | ||
| email: string; | ||
| role: "admin" | "member" | "viewer"; | ||
| organization: string; | ||
| token: string; | ||
| } | ||
| interface Invoice { | ||
@@ -82,4 +84,5 @@ invoice_number: string; | ||
| removeMember(username: string): Promise<OrganizationRemovedMember>; | ||
| inviteUser(email: string, role?: OrganizationMemberRole): Promise<OrganizationInvite>; | ||
| deleteInvite(email: string): Promise<OrganizationInvite>; | ||
| listInvites(): Promise<OrganizationInvite[]>; | ||
| inviteUser(email: string, role?: OrganizationMemberRole): Promise<OrganizationInviteCreated>; | ||
| deleteInvite(email: string): Promise<void>; | ||
| invoices(): Promise<Invoice[]>; | ||
@@ -310,2 +313,2 @@ } | ||
| export { type ApiToken, type ApiTokenValidation, type ApiTokenWithJWT, type ClosestLocation, type CreatedDatabase, type Database, type DatabaseInstance, type DatabaseToken, type DatabaseUsage, type DeletedDatabase, type ExtensionType, type Group, type GroupToken, type InstanceUsages, type Invoice, type Location, type LocationKeys, type Organization, type OrganizationAddedMember, type OrganizationInvite, type OrganizationMember, type OrganizationMemberRole, type OrganizationRemovedMember, type RevokedApiToken, type TotalUsage, TursoClientError, type TursoConfig, createClient }; | ||
| export { type ApiToken, type ApiTokenValidation, type ApiTokenWithJWT, type ClosestLocation, type CreatedDatabase, type Database, type DatabaseInstance, type DatabaseToken, type DatabaseUsage, type DeletedDatabase, type ExtensionType, type Group, type GroupToken, type InstanceUsages, type Invoice, type Location, type LocationKeys, type Organization, type OrganizationAddedMember, type OrganizationInvite, type OrganizationInviteCreated, type OrganizationMember, type OrganizationMemberRole, type OrganizationRemovedMember, type RevokedApiToken, type TotalUsage, TursoClientError, type TursoConfig, createClient }; |
+10
-3
@@ -108,5 +108,12 @@ // src/index.ts | ||
| } | ||
| async listInvites() { | ||
| const response = await TursoClient.request( | ||
| `../v2/organizations/${this.config.org}/invites`, | ||
| this.config | ||
| ); | ||
| return response.invites ?? []; | ||
| } | ||
| async inviteUser(email, role) { | ||
| const response = await TursoClient.request( | ||
| `organizations/${this.config.org}/invites`, | ||
| `../v2/organizations/${this.config.org}/invites`, | ||
| this.config, | ||
@@ -121,4 +128,4 @@ { | ||
| async deleteInvite(email) { | ||
| return TursoClient.request( | ||
| `organizations/${this.config.org}/invites/${email}`, | ||
| await TursoClient.request( | ||
| `../v2/organizations/${this.config.org}/invites/${email}`, | ||
| this.config, | ||
@@ -125,0 +132,0 @@ { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts","../src/api-token.ts","../src/organization.ts","../src/location.ts","../src/group.ts","../src/database.ts","../src/client.ts"],"sourcesContent":["import \"whatwg-fetch\";\n\nexport { createClient } from \"./client\";\n\nexport type {\n ApiToken,\n ApiTokenWithJWT,\n RevokedApiToken,\n ApiTokenValidation,\n} from \"./api-token\";\nexport type { TursoClientError } from \"./client\";\nexport type { TursoConfig } from \"./config\";\nexport type {\n Database,\n CreatedDatabase,\n DatabaseUsage,\n InstanceUsages,\n TotalUsage,\n DatabaseInstance,\n DeletedDatabase,\n DatabaseToken,\n} from \"./database\";\nexport type { Group, ExtensionType, GroupToken } from \"./group\";\nexport type { LocationKeys, Location, ClosestLocation } from \"./location\";\nexport type {\n Organization,\n OrganizationMember,\n OrganizationInvite,\n Invoice,\n OrganizationMemberRole,\n OrganizationAddedMember,\n OrganizationRemovedMember,\n} from \"./organization\";\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface ApiToken {\n id: string;\n name: string;\n}\n\nexport interface ApiTokenWithJWT extends ApiToken {\n token: string;\n}\n\nexport interface RevokedApiToken {\n token: string;\n}\n\nexport interface ApiTokenValidation {\n valid: boolean;\n expiry: number;\n}\n\nexport class ApiTokenClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<ApiToken[]> {\n const response = await TursoClient.request<{ tokens: ApiToken[] }>(\n \"auth/api-tokens\",\n this.config\n );\n\n return response.tokens ?? [];\n }\n\n async create(name: string): Promise<ApiTokenWithJWT> {\n const response = await TursoClient.request<ApiTokenWithJWT>(\n `auth/api-tokens/${name}`,\n this.config,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n );\n\n return response;\n }\n\n async revoke(name: string): Promise<RevokedApiToken> {\n const response = await TursoClient.request<RevokedApiToken>(\n `auth/api-tokens/${name}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response;\n }\n\n async validate(token: string): Promise<ApiTokenValidation> {\n const response = await TursoClient.request<{ exp: number }>(\n \"auth/api-tokens/validate\",\n this.config,\n {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }\n );\n\n const currentTime = Math.floor(Date.now() / 1000);\n\n return {\n valid: response.exp !== -1 && response.exp > currentTime,\n expiry: response.exp,\n };\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface Organization {\n name: string;\n slug: string;\n type: \"personal\" | \"team\";\n overages: boolean;\n blocked_reads: boolean;\n blocked_writes: boolean;\n}\n\nexport interface OrganizationMember {\n role: \"owner\" | \"admin\" | \"member\";\n username: string;\n email: string;\n}\n\nexport interface OrganizationInvite {\n ID: number;\n CreatedAt: string;\n UpdatedAt: string;\n DeletedAt: string;\n Role: \"admin\" | \"member\";\n Email: string;\n OrganizationID: number;\n Organization: Organization;\n Accepted: boolean;\n}\n\nexport interface Invoice {\n invoice_number: string;\n amount_due: string;\n due_date: string;\n paid_at: string;\n payment_failed_at: string;\n invoice_pdf: string;\n}\n\nexport type OrganizationMemberRole = \"admin\" | \"member\";\n\nexport interface OrganizationAddedMember {\n member: string;\n role: OrganizationMemberRole;\n}\n\nexport interface OrganizationRemovedMember {\n member: string;\n}\n\nexport class OrganizationClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Organization[]> {\n const response = await TursoClient.request<{\n organizations: Organization[];\n }>(\"organizations\", this.config);\n\n return response.organizations ?? [];\n }\n\n async update(options: { overages: boolean }): Promise<Organization> {\n const response = await TursoClient.request<{\n organization: Organization;\n }>(`organizations/${this.config.org}`, this.config, {\n method: \"PATCH\",\n body: JSON.stringify(options),\n });\n\n return response.organization ?? null;\n }\n\n async delete(): Promise<void> {\n return TursoClient.request(\n `organizations/${this.config.org}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async members(): Promise<OrganizationMember[]> {\n const response = await TursoClient.request<{\n members: OrganizationMember[];\n }>(`organizations/${this.config.org}/members`, this.config);\n\n return response.members ?? [];\n }\n\n async addMember(\n username: string,\n role?: \"admin\" | \"member\"\n ): Promise<OrganizationAddedMember> {\n return TursoClient.request(\n `organizations/${this.config.org}/members/${username}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n member: username,\n role: role ? role : \"member\",\n }),\n }\n );\n }\n\n async removeMember(username: string): Promise<OrganizationRemovedMember> {\n return TursoClient.request(\n `organizations/${this.config.org}/members/${username}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async inviteUser(\n email: string,\n role?: OrganizationMemberRole\n ): Promise<OrganizationInvite> {\n const response = await TursoClient.request<{ invited: OrganizationInvite }>(\n `organizations/${this.config.org}/invites`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({ email, role: role ? role : \"member\" }),\n }\n );\n\n return response.invited;\n }\n\n async deleteInvite(email: string): Promise<OrganizationInvite> {\n return TursoClient.request(\n `organizations/${this.config.org}/invites/${email}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async invoices(): Promise<Invoice[]> {\n const response = await TursoClient.request<{\n invoices: Invoice[];\n }>(`organizations/${this.config.org}/invoices`, this.config);\n\n return response.invoices ?? [];\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport type LocationKeys = {\n ams: string;\n arn: string;\n bog: string;\n bos: string;\n cdg: string;\n den: string;\n dfw: string;\n ewr: string;\n fra: string;\n gdl: string;\n gig: string;\n gru: string;\n hkg: string;\n iad: string;\n jnb: string;\n lax: string;\n lhr: string;\n mad: string;\n mia: string;\n nrt: string;\n ord: string;\n otp: string;\n qro: string;\n scl: string;\n sea: string;\n sin: string;\n sjc: string;\n syd: string;\n waw: string;\n yul: string;\n yyz: string;\n [key: string]: string;\n};\n\nexport type Location = {\n [K in keyof LocationKeys]: { code: K; description: LocationKeys[K] };\n}[keyof LocationKeys];\n\nexport interface ClosestLocation {\n server: keyof LocationKeys;\n client: keyof LocationKeys;\n}\n\nexport class LocationClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Location[]> {\n const response = await TursoClient.request<{\n locations: LocationKeys;\n }>(\"locations\", this.config);\n\n if (!response.locations) {\n return [];\n }\n\n return Object.entries(response.locations).map(([code, description]) => ({\n code,\n description,\n }));\n }\n\n async closest(): Promise<ClosestLocation> {\n return fetch(\"https://region.turso.io/\").then((res) => res.json());\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { LocationKeys } from \"./location\";\nimport { TursoClient } from \"./client\";\nimport type { Database } from \"./database\";\n\nexport interface Group {\n locations: Array<keyof LocationKeys>;\n name: string;\n primary: keyof LocationKeys;\n}\n\nexport type ExtensionType =\n | \"vector\"\n | \"vec\"\n | \"crypto\"\n | \"fuzzy\"\n | \"math\"\n | \"stats\"\n | \"text\"\n | \"unicode\"\n | \"uuid\"\n | \"regexp\";\n\nexport interface GroupToken {\n jwt: string;\n}\n\nexport class GroupClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Group[]> {\n const response = await TursoClient.request<{ groups: Group[] }>(\n `organizations/${this.config.org}/groups`,\n this.config\n );\n\n return response.groups ?? [];\n }\n\n async get(name: string): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${name}`,\n this.config\n );\n\n return response.group;\n }\n\n async create(\n name: string,\n location: keyof LocationKeys,\n options?: { extensions?: Array<ExtensionType> | \"all\" }\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups`,\n this.config,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n name,\n location,\n ...options,\n }),\n }\n );\n\n return response.group;\n }\n\n async delete(name: string): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${name}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response.group;\n }\n\n /**\n * @deprecated Turso Cloud deprecated edge replicas\n */\n async addLocation(\n groupName: string,\n location: keyof LocationKeys\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${groupName}/locations/${location}`,\n this.config,\n {\n method: \"POST\",\n }\n );\n\n return response.group;\n }\n\n /**\n * @deprecated Turso Cloud deprecated edge replicas\n */\n async removeLocation(\n groupName: string,\n location: keyof LocationKeys\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${groupName}/locations/${location}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response.group;\n }\n\n /**\n * Creates a token for a group\n * @param groupName The name of the group\n * @param options Token creation options\n * @param options.expiration Token expiration\n * @param options.authorization Token authorization level\n * @param options.permissions - @deprecated This parameter is deprecated and will be removed in a future version\n */\n async createToken(\n groupName: string,\n options?: {\n expiration?: string;\n authorization?: \"read-only\" | \"full-access\";\n permissions?: {\n read_attach: { databases: Database[\"name\"][] };\n };\n }\n ): Promise<GroupToken> {\n const queryParams = new URLSearchParams();\n\n if (options?.expiration) {\n queryParams.set(\"expiration\", options.expiration);\n }\n\n if (options?.authorization) {\n queryParams.set(\"authorization\", options.authorization);\n }\n\n const response = await TursoClient.request<GroupToken>(\n `organizations/${this.config.org}/groups/${groupName}/auth/tokens?${queryParams}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n permissions: {\n read_attach: {\n databases: options?.permissions?.read_attach?.databases ?? [],\n },\n },\n }),\n }\n );\n\n return response;\n }\n\n async rotateTokens(groupName: string): Promise<void> {\n return await TursoClient.request<void>(\n `organizations/${this.config.org}/groups/${groupName}/auth/rotate`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n}\n","import { LocationKeys } from \"./location\";\nimport { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface Database {\n name: string;\n id: string;\n hostname: string;\n regions?: Array<keyof LocationKeys>;\n primaryRegion?: keyof LocationKeys;\n type: string;\n version: string;\n group?: string;\n sleeping: boolean;\n archived: boolean;\n allow_attach: boolean;\n block_reads: boolean;\n block_writes: boolean;\n schema?: string;\n is_schema: boolean;\n}\n\nexport interface ApiDatabaseResponse\n extends Database,\n ApiCreateDatabaseResponse {}\n\nexport interface ApiCreateDatabaseResponse {\n DbId: string;\n Hostname: string;\n Name: string;\n}\n\nexport interface CreatedDatabase {\n name: string;\n id: string;\n hostname: string;\n}\n\ninterface DatabaseInstanceUsageDetail {\n rows_read: number;\n rows_written: number;\n storage_bytes: number;\n}\n\ninterface DatabaseInstanceUsage {\n uuid: string;\n usage: DatabaseInstanceUsageDetail;\n}\n\nexport interface DatabaseUsage {\n uuid: string;\n instances: DatabaseInstanceUsage[];\n usage: DatabaseInstanceUsageDetail;\n}\n\nexport interface InstanceUsages {\n [instanceUuid: string]: DatabaseInstanceUsageDetail;\n}\n\nexport interface TotalUsage {\n rows_read: number;\n rows_written: number;\n storage_bytes: number;\n}\n\nexport interface DatabaseInstance {\n uuid: string;\n name: keyof LocationKeys;\n type: \"primary\" | \"replica\";\n region: keyof LocationKeys;\n hostname: string;\n}\n\nexport interface DeletedDatabase {\n database: string;\n}\n\nexport interface DatabaseToken {\n jwt: string;\n}\n\ntype MultiDBSchemaOptions =\n | { is_schema: boolean; schema?: never }\n | { is_schema?: never; schema: string }\n | {};\n\nfunction hasIsSchemaOption(\n options: any\n): options is { is_schema: boolean; schema?: never } {\n return options !== undefined && options.is_schema !== undefined;\n}\n\nfunction hasSchemaOption(\n options: any\n): options is { is_schema?: never; schema: string } {\n return options !== undefined && options.schema !== undefined;\n}\n\nexport class DatabaseClient {\n constructor(private config: TursoConfig) {}\n\n async list(options?: {\n schema?: string;\n group?: string;\n type?: \"schema\";\n }): Promise<Database[]> {\n const queryParams = new URLSearchParams(\n Object.entries({\n schema: options?.schema,\n group: options?.group,\n type: options?.type,\n }).filter(([_, value]) => value !== undefined) as [string, string][]\n );\n\n const url = `organizations/${this.config.org}/databases${\n queryParams.toString() ? `?${queryParams.toString()}` : \"\"\n }`;\n\n const response = await TursoClient.request<{\n databases: ApiDatabaseResponse[];\n }>(url, this.config);\n\n return (response.databases ?? []).map((db) => this.formatResponse(db));\n }\n\n async get(dbName: string): Promise<Database> {\n const response = await TursoClient.request<{\n database: ApiDatabaseResponse;\n }>(`organizations/${this.config.org}/databases/${dbName}`, this.config);\n\n return this.formatResponse(response.database);\n }\n\n async create(\n dbName: string,\n options?: {\n image?: \"latest\" | \"canary\";\n group?: string;\n seed?: {\n type: \"database\" | \"dump\";\n name?: string;\n url?: string;\n timestamp?: string | Date;\n };\n } & MultiDBSchemaOptions\n ): Promise<CreatedDatabase> {\n if (hasIsSchemaOption(options) && hasSchemaOption(options)) {\n throw new Error(\"'is_schema' and 'schema' cannot both be provided\");\n }\n\n if (options?.seed) {\n if (options.seed.type === \"database\" && !options.seed.name) {\n throw new Error(\"Seed name is required when type is 'database'\");\n }\n if (options.seed.type === \"dump\" && !options.seed.url) {\n throw new Error(\"Seed URL is required when type is 'dump'\");\n }\n }\n\n if (options?.seed?.timestamp) {\n options.seed.timestamp = this.formatDateParameter(options.seed.timestamp);\n }\n\n const response = await TursoClient.request<{\n database: ApiCreateDatabaseResponse;\n }>(`organizations/${this.config.org}/databases`, this.config, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n name: dbName,\n ...options,\n }),\n });\n\n return this.formatCreateResponse(response.database);\n }\n\n async updateVersion(dbName: string): Promise<void> {\n return await TursoClient.request(\n `organizations/${this.config.org}/databases/${dbName}/update`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n\n async delete(dbName: string) {\n const response = await TursoClient.request<DeletedDatabase>(\n `organizations/${this.config.org}/databases/${dbName}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response;\n }\n\n async listInstances(dbName: string): Promise<DatabaseInstance[]> {\n const response = await TursoClient.request<{\n instances: DatabaseInstance[];\n }>(\n `organizations/${this.config.org}/databases/${dbName}/instances`,\n this.config\n );\n\n return response.instances ?? [];\n }\n\n async getInstance(\n dbName: string,\n instanceName: keyof LocationKeys\n ): Promise<DatabaseInstance> {\n const response = await TursoClient.request<{\n instance: DatabaseInstance;\n }>(\n `organizations/${this.config.org}/databases/${dbName}/instances/${instanceName}`,\n this.config\n );\n\n return response.instance ?? null;\n }\n\n async createToken(\n dbName: string,\n options?: {\n expiration?: string;\n authorization?: \"read-only\" | \"full-access\";\n permissions?: {\n read_attach: { databases: Database[\"name\"][] };\n };\n }\n ): Promise<DatabaseToken> {\n const queryParams = new URLSearchParams();\n\n if (options?.expiration) {\n queryParams.set(\"expiration\", options.expiration);\n }\n\n if (options?.authorization) {\n queryParams.set(\"authorization\", options.authorization);\n }\n\n const response = await TursoClient.request<DatabaseToken>(\n `organizations/${this.config.org}/databases/${dbName}/auth/tokens?${queryParams}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n permissions: {\n read_attach: {\n databases: options?.permissions?.read_attach?.databases ?? [],\n },\n },\n }),\n }\n );\n\n return response;\n }\n\n async rotateTokens(dbName: string): Promise<void> {\n return await TursoClient.request<void>(\n `organizations/${this.config.org}/databases/${dbName}/auth/rotate`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n\n async usage(\n dbName: string,\n options?: { from?: Date | string; to?: Date | string }\n ): Promise<DatabaseUsage> {\n const queryParams = new URLSearchParams();\n\n if (options?.from) {\n queryParams.set(\"from\", this.formatDateParameter(options.from));\n }\n\n if (options?.to) {\n queryParams.set(\"to\", this.formatDateParameter(options.to));\n }\n\n const response = await TursoClient.request<{\n database: DatabaseUsage;\n instances: InstanceUsages;\n total: TotalUsage;\n }>(\n `organizations/${this.config.org}/databases/${dbName}/usage?${queryParams}`,\n this.config\n );\n\n return response.database;\n }\n\n private formatDateParameter(date: Date | string): string {\n return date instanceof Date ? date.toISOString() : date;\n }\n\n private formatResponse(db: ApiDatabaseResponse): Database {\n return {\n name: db.Name,\n id: db.DbId,\n hostname: db.Hostname,\n regions: db.regions,\n primaryRegion: db.primaryRegion,\n type: db.type,\n version: db.version,\n group: db.group,\n sleeping: db.sleeping,\n archived: db.archived,\n allow_attach: db.allow_attach,\n block_reads: db.block_reads,\n block_writes: db.block_writes,\n schema: db.schema,\n is_schema: db.is_schema,\n };\n }\n\n private formatCreateResponse(db: ApiCreateDatabaseResponse): CreatedDatabase {\n return {\n id: db.DbId,\n hostname: db.Hostname,\n name: db.Name,\n };\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { ApiTokenClient } from \"./api-token\";\nimport { OrganizationClient } from \"./organization\";\nimport { LocationClient } from \"./location\";\nimport { GroupClient } from \"./group\";\nimport { DatabaseClient } from \"./database\";\n\ninterface ApiErrorResponse {\n error: string;\n}\n\ninterface AdditionalInfo {\n status?: number;\n}\n\nexport class TursoClientError extends Error {\n status?: number;\n constructor(message: string, additionalInfo?: AdditionalInfo) {\n super(message);\n this.name = \"TursoClientError\";\n this.status = additionalInfo?.status;\n }\n}\n\nexport class TursoClient {\n private config: TursoConfig;\n public apiTokens: ApiTokenClient;\n public organizations: OrganizationClient;\n public locations: LocationClient;\n public groups: GroupClient;\n public databases: DatabaseClient;\n\n constructor(config: TursoConfig) {\n if (!config.token) {\n throw new Error(\"You must provide an API token\");\n }\n\n this.config = {\n baseUrl: \"https://api.turso.tech/v1/\",\n ...config,\n };\n\n this.apiTokens = new ApiTokenClient(this.config);\n this.organizations = new OrganizationClient(this.config);\n this.locations = new LocationClient(this.config);\n this.groups = new GroupClient(this.config);\n this.databases = new DatabaseClient(this.config);\n }\n\n static async request<T>(\n url: string,\n config: TursoConfig,\n options: RequestInit = {}\n ) {\n const response = await fetch(new URL(url, config.baseUrl), {\n ...options,\n headers: {\n ...options.headers,\n Authorization: `Bearer ${config.token}`,\n \"User-Agent\": \"@tursodatabase/api\",\n },\n });\n\n if (!response.ok) {\n const errorResponse = (await response.json().catch(() => {\n throw new Error(`Something went wrong! Status ${response.status}`);\n })) as ApiErrorResponse;\n\n throw new TursoClientError(errorResponse.error, {\n status: response.status,\n });\n }\n\n return response.json() as T;\n }\n}\n\nexport function createClient(config: TursoConfig): TursoClient {\n return new TursoClient(config);\n}\n"],"mappings":"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","names":[]} | ||
| {"version":3,"sources":["../src/index.ts","../src/api-token.ts","../src/organization.ts","../src/location.ts","../src/group.ts","../src/database.ts","../src/client.ts"],"sourcesContent":["import \"whatwg-fetch\";\n\nexport { createClient } from \"./client\";\n\nexport type {\n ApiToken,\n ApiTokenWithJWT,\n RevokedApiToken,\n ApiTokenValidation,\n} from \"./api-token\";\nexport type { TursoClientError } from \"./client\";\nexport type { TursoConfig } from \"./config\";\nexport type {\n Database,\n CreatedDatabase,\n DatabaseUsage,\n InstanceUsages,\n TotalUsage,\n DatabaseInstance,\n DeletedDatabase,\n DatabaseToken,\n} from \"./database\";\nexport type { Group, ExtensionType, GroupToken } from \"./group\";\nexport type { LocationKeys, Location, ClosestLocation } from \"./location\";\nexport type {\n Organization,\n OrganizationMember,\n OrganizationInvite,\n OrganizationInviteCreated,\n Invoice,\n OrganizationMemberRole,\n OrganizationAddedMember,\n OrganizationRemovedMember,\n} from \"./organization\";\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface ApiToken {\n id: string;\n name: string;\n}\n\nexport interface ApiTokenWithJWT extends ApiToken {\n token: string;\n}\n\nexport interface RevokedApiToken {\n token: string;\n}\n\nexport interface ApiTokenValidation {\n valid: boolean;\n expiry: number;\n}\n\nexport class ApiTokenClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<ApiToken[]> {\n const response = await TursoClient.request<{ tokens: ApiToken[] }>(\n \"auth/api-tokens\",\n this.config\n );\n\n return response.tokens ?? [];\n }\n\n async create(name: string): Promise<ApiTokenWithJWT> {\n const response = await TursoClient.request<ApiTokenWithJWT>(\n `auth/api-tokens/${name}`,\n this.config,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n }\n );\n\n return response;\n }\n\n async revoke(name: string): Promise<RevokedApiToken> {\n const response = await TursoClient.request<RevokedApiToken>(\n `auth/api-tokens/${name}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response;\n }\n\n async validate(token: string): Promise<ApiTokenValidation> {\n const response = await TursoClient.request<{ exp: number }>(\n \"auth/api-tokens/validate\",\n this.config,\n {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }\n );\n\n const currentTime = Math.floor(Date.now() / 1000);\n\n return {\n valid: response.exp !== -1 && response.exp > currentTime,\n expiry: response.exp,\n };\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface Organization {\n name: string;\n slug: string;\n type: \"personal\" | \"team\";\n overages: boolean;\n blocked_reads: boolean;\n blocked_writes: boolean;\n}\n\nexport interface OrganizationMember {\n role: \"owner\" | \"admin\" | \"member\";\n username: string;\n email: string;\n}\n\nexport interface OrganizationInvite {\n id: number;\n email: string;\n role: \"admin\" | \"member\" | \"viewer\";\n token: string;\n created_at: string;\n}\n\nexport interface OrganizationInviteCreated {\n email: string;\n role: \"admin\" | \"member\" | \"viewer\";\n organization: string;\n token: string;\n}\n\nexport interface Invoice {\n invoice_number: string;\n amount_due: string;\n due_date: string;\n paid_at: string;\n payment_failed_at: string;\n invoice_pdf: string;\n}\n\nexport type OrganizationMemberRole = \"admin\" | \"member\";\n\nexport interface OrganizationAddedMember {\n member: string;\n role: OrganizationMemberRole;\n}\n\nexport interface OrganizationRemovedMember {\n member: string;\n}\n\nexport class OrganizationClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Organization[]> {\n const response = await TursoClient.request<{\n organizations: Organization[];\n }>(\"organizations\", this.config);\n\n return response.organizations ?? [];\n }\n\n async update(options: { overages: boolean }): Promise<Organization> {\n const response = await TursoClient.request<{\n organization: Organization;\n }>(`organizations/${this.config.org}`, this.config, {\n method: \"PATCH\",\n body: JSON.stringify(options),\n });\n\n return response.organization ?? null;\n }\n\n async delete(): Promise<void> {\n return TursoClient.request(\n `organizations/${this.config.org}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async members(): Promise<OrganizationMember[]> {\n const response = await TursoClient.request<{\n members: OrganizationMember[];\n }>(`organizations/${this.config.org}/members`, this.config);\n\n return response.members ?? [];\n }\n\n async addMember(\n username: string,\n role?: \"admin\" | \"member\"\n ): Promise<OrganizationAddedMember> {\n return TursoClient.request(\n `organizations/${this.config.org}/members/${username}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n member: username,\n role: role ? role : \"member\",\n }),\n }\n );\n }\n\n async removeMember(username: string): Promise<OrganizationRemovedMember> {\n return TursoClient.request(\n `organizations/${this.config.org}/members/${username}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async listInvites(): Promise<OrganizationInvite[]> {\n const response = await TursoClient.request<{\n invites: OrganizationInvite[];\n }>(\n `../v2/organizations/${this.config.org}/invites`,\n this.config\n );\n\n return response.invites ?? [];\n }\n\n async inviteUser(\n email: string,\n role?: OrganizationMemberRole\n ): Promise<OrganizationInviteCreated> {\n const response = await TursoClient.request<{\n invited: OrganizationInviteCreated;\n }>(\n `../v2/organizations/${this.config.org}/invites`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({ email, role: role ? role : \"member\" }),\n }\n );\n\n return response.invited;\n }\n\n async deleteInvite(email: string): Promise<void> {\n await TursoClient.request(\n `../v2/organizations/${this.config.org}/invites/${email}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n }\n\n async invoices(): Promise<Invoice[]> {\n const response = await TursoClient.request<{\n invoices: Invoice[];\n }>(`organizations/${this.config.org}/invoices`, this.config);\n\n return response.invoices ?? [];\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport type LocationKeys = {\n ams: string;\n arn: string;\n bog: string;\n bos: string;\n cdg: string;\n den: string;\n dfw: string;\n ewr: string;\n fra: string;\n gdl: string;\n gig: string;\n gru: string;\n hkg: string;\n iad: string;\n jnb: string;\n lax: string;\n lhr: string;\n mad: string;\n mia: string;\n nrt: string;\n ord: string;\n otp: string;\n qro: string;\n scl: string;\n sea: string;\n sin: string;\n sjc: string;\n syd: string;\n waw: string;\n yul: string;\n yyz: string;\n [key: string]: string;\n};\n\nexport type Location = {\n [K in keyof LocationKeys]: { code: K; description: LocationKeys[K] };\n}[keyof LocationKeys];\n\nexport interface ClosestLocation {\n server: keyof LocationKeys;\n client: keyof LocationKeys;\n}\n\nexport class LocationClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Location[]> {\n const response = await TursoClient.request<{\n locations: LocationKeys;\n }>(\"locations\", this.config);\n\n if (!response.locations) {\n return [];\n }\n\n return Object.entries(response.locations).map(([code, description]) => ({\n code,\n description,\n }));\n }\n\n async closest(): Promise<ClosestLocation> {\n return fetch(\"https://region.turso.io/\").then((res) => res.json());\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { LocationKeys } from \"./location\";\nimport { TursoClient } from \"./client\";\nimport type { Database } from \"./database\";\n\nexport interface Group {\n locations: Array<keyof LocationKeys>;\n name: string;\n primary: keyof LocationKeys;\n}\n\nexport type ExtensionType =\n | \"vector\"\n | \"vec\"\n | \"crypto\"\n | \"fuzzy\"\n | \"math\"\n | \"stats\"\n | \"text\"\n | \"unicode\"\n | \"uuid\"\n | \"regexp\";\n\nexport interface GroupToken {\n jwt: string;\n}\n\nexport class GroupClient {\n constructor(private config: TursoConfig) {}\n\n async list(): Promise<Group[]> {\n const response = await TursoClient.request<{ groups: Group[] }>(\n `organizations/${this.config.org}/groups`,\n this.config\n );\n\n return response.groups ?? [];\n }\n\n async get(name: string): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${name}`,\n this.config\n );\n\n return response.group;\n }\n\n async create(\n name: string,\n location: keyof LocationKeys,\n options?: { extensions?: Array<ExtensionType> | \"all\" }\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups`,\n this.config,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n name,\n location,\n ...options,\n }),\n }\n );\n\n return response.group;\n }\n\n async delete(name: string): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${name}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response.group;\n }\n\n /**\n * @deprecated Turso Cloud deprecated edge replicas\n */\n async addLocation(\n groupName: string,\n location: keyof LocationKeys\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${groupName}/locations/${location}`,\n this.config,\n {\n method: \"POST\",\n }\n );\n\n return response.group;\n }\n\n /**\n * @deprecated Turso Cloud deprecated edge replicas\n */\n async removeLocation(\n groupName: string,\n location: keyof LocationKeys\n ): Promise<Group> {\n const response = await TursoClient.request<{ group: Group }>(\n `organizations/${this.config.org}/groups/${groupName}/locations/${location}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response.group;\n }\n\n /**\n * Creates a token for a group\n * @param groupName The name of the group\n * @param options Token creation options\n * @param options.expiration Token expiration\n * @param options.authorization Token authorization level\n * @param options.permissions - @deprecated This parameter is deprecated and will be removed in a future version\n */\n async createToken(\n groupName: string,\n options?: {\n expiration?: string;\n authorization?: \"read-only\" | \"full-access\";\n permissions?: {\n read_attach: { databases: Database[\"name\"][] };\n };\n }\n ): Promise<GroupToken> {\n const queryParams = new URLSearchParams();\n\n if (options?.expiration) {\n queryParams.set(\"expiration\", options.expiration);\n }\n\n if (options?.authorization) {\n queryParams.set(\"authorization\", options.authorization);\n }\n\n const response = await TursoClient.request<GroupToken>(\n `organizations/${this.config.org}/groups/${groupName}/auth/tokens?${queryParams}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n permissions: {\n read_attach: {\n databases: options?.permissions?.read_attach?.databases ?? [],\n },\n },\n }),\n }\n );\n\n return response;\n }\n\n async rotateTokens(groupName: string): Promise<void> {\n return await TursoClient.request<void>(\n `organizations/${this.config.org}/groups/${groupName}/auth/rotate`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n}\n","import { LocationKeys } from \"./location\";\nimport { TursoConfig } from \"./config\";\nimport { TursoClient } from \"./client\";\n\nexport interface Database {\n name: string;\n id: string;\n hostname: string;\n regions?: Array<keyof LocationKeys>;\n primaryRegion?: keyof LocationKeys;\n type: string;\n version: string;\n group?: string;\n sleeping: boolean;\n archived: boolean;\n allow_attach: boolean;\n block_reads: boolean;\n block_writes: boolean;\n schema?: string;\n is_schema: boolean;\n}\n\nexport interface ApiDatabaseResponse\n extends Database,\n ApiCreateDatabaseResponse {}\n\nexport interface ApiCreateDatabaseResponse {\n DbId: string;\n Hostname: string;\n Name: string;\n}\n\nexport interface CreatedDatabase {\n name: string;\n id: string;\n hostname: string;\n}\n\ninterface DatabaseInstanceUsageDetail {\n rows_read: number;\n rows_written: number;\n storage_bytes: number;\n}\n\ninterface DatabaseInstanceUsage {\n uuid: string;\n usage: DatabaseInstanceUsageDetail;\n}\n\nexport interface DatabaseUsage {\n uuid: string;\n instances: DatabaseInstanceUsage[];\n usage: DatabaseInstanceUsageDetail;\n}\n\nexport interface InstanceUsages {\n [instanceUuid: string]: DatabaseInstanceUsageDetail;\n}\n\nexport interface TotalUsage {\n rows_read: number;\n rows_written: number;\n storage_bytes: number;\n}\n\nexport interface DatabaseInstance {\n uuid: string;\n name: keyof LocationKeys;\n type: \"primary\" | \"replica\";\n region: keyof LocationKeys;\n hostname: string;\n}\n\nexport interface DeletedDatabase {\n database: string;\n}\n\nexport interface DatabaseToken {\n jwt: string;\n}\n\ntype MultiDBSchemaOptions =\n | { is_schema: boolean; schema?: never }\n | { is_schema?: never; schema: string }\n | {};\n\nfunction hasIsSchemaOption(\n options: any\n): options is { is_schema: boolean; schema?: never } {\n return options !== undefined && options.is_schema !== undefined;\n}\n\nfunction hasSchemaOption(\n options: any\n): options is { is_schema?: never; schema: string } {\n return options !== undefined && options.schema !== undefined;\n}\n\nexport class DatabaseClient {\n constructor(private config: TursoConfig) {}\n\n async list(options?: {\n schema?: string;\n group?: string;\n type?: \"schema\";\n }): Promise<Database[]> {\n const queryParams = new URLSearchParams(\n Object.entries({\n schema: options?.schema,\n group: options?.group,\n type: options?.type,\n }).filter(([_, value]) => value !== undefined) as [string, string][]\n );\n\n const url = `organizations/${this.config.org}/databases${\n queryParams.toString() ? `?${queryParams.toString()}` : \"\"\n }`;\n\n const response = await TursoClient.request<{\n databases: ApiDatabaseResponse[];\n }>(url, this.config);\n\n return (response.databases ?? []).map((db) => this.formatResponse(db));\n }\n\n async get(dbName: string): Promise<Database> {\n const response = await TursoClient.request<{\n database: ApiDatabaseResponse;\n }>(`organizations/${this.config.org}/databases/${dbName}`, this.config);\n\n return this.formatResponse(response.database);\n }\n\n async create(\n dbName: string,\n options?: {\n image?: \"latest\" | \"canary\";\n group?: string;\n seed?: {\n type: \"database\" | \"dump\";\n name?: string;\n url?: string;\n timestamp?: string | Date;\n };\n } & MultiDBSchemaOptions\n ): Promise<CreatedDatabase> {\n if (hasIsSchemaOption(options) && hasSchemaOption(options)) {\n throw new Error(\"'is_schema' and 'schema' cannot both be provided\");\n }\n\n if (options?.seed) {\n if (options.seed.type === \"database\" && !options.seed.name) {\n throw new Error(\"Seed name is required when type is 'database'\");\n }\n if (options.seed.type === \"dump\" && !options.seed.url) {\n throw new Error(\"Seed URL is required when type is 'dump'\");\n }\n }\n\n if (options?.seed?.timestamp) {\n options.seed.timestamp = this.formatDateParameter(options.seed.timestamp);\n }\n\n const response = await TursoClient.request<{\n database: ApiCreateDatabaseResponse;\n }>(`organizations/${this.config.org}/databases`, this.config, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n name: dbName,\n ...options,\n }),\n });\n\n return this.formatCreateResponse(response.database);\n }\n\n async updateVersion(dbName: string): Promise<void> {\n return await TursoClient.request(\n `organizations/${this.config.org}/databases/${dbName}/update`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n\n async delete(dbName: string) {\n const response = await TursoClient.request<DeletedDatabase>(\n `organizations/${this.config.org}/databases/${dbName}`,\n this.config,\n {\n method: \"DELETE\",\n }\n );\n\n return response;\n }\n\n async listInstances(dbName: string): Promise<DatabaseInstance[]> {\n const response = await TursoClient.request<{\n instances: DatabaseInstance[];\n }>(\n `organizations/${this.config.org}/databases/${dbName}/instances`,\n this.config\n );\n\n return response.instances ?? [];\n }\n\n async getInstance(\n dbName: string,\n instanceName: keyof LocationKeys\n ): Promise<DatabaseInstance> {\n const response = await TursoClient.request<{\n instance: DatabaseInstance;\n }>(\n `organizations/${this.config.org}/databases/${dbName}/instances/${instanceName}`,\n this.config\n );\n\n return response.instance ?? null;\n }\n\n async createToken(\n dbName: string,\n options?: {\n expiration?: string;\n authorization?: \"read-only\" | \"full-access\";\n permissions?: {\n read_attach: { databases: Database[\"name\"][] };\n };\n }\n ): Promise<DatabaseToken> {\n const queryParams = new URLSearchParams();\n\n if (options?.expiration) {\n queryParams.set(\"expiration\", options.expiration);\n }\n\n if (options?.authorization) {\n queryParams.set(\"authorization\", options.authorization);\n }\n\n const response = await TursoClient.request<DatabaseToken>(\n `organizations/${this.config.org}/databases/${dbName}/auth/tokens?${queryParams}`,\n this.config,\n {\n method: \"POST\",\n body: JSON.stringify({\n permissions: {\n read_attach: {\n databases: options?.permissions?.read_attach?.databases ?? [],\n },\n },\n }),\n }\n );\n\n return response;\n }\n\n async rotateTokens(dbName: string): Promise<void> {\n return await TursoClient.request<void>(\n `organizations/${this.config.org}/databases/${dbName}/auth/rotate`,\n this.config,\n {\n method: \"POST\",\n }\n );\n }\n\n async usage(\n dbName: string,\n options?: { from?: Date | string; to?: Date | string }\n ): Promise<DatabaseUsage> {\n const queryParams = new URLSearchParams();\n\n if (options?.from) {\n queryParams.set(\"from\", this.formatDateParameter(options.from));\n }\n\n if (options?.to) {\n queryParams.set(\"to\", this.formatDateParameter(options.to));\n }\n\n const response = await TursoClient.request<{\n database: DatabaseUsage;\n instances: InstanceUsages;\n total: TotalUsage;\n }>(\n `organizations/${this.config.org}/databases/${dbName}/usage?${queryParams}`,\n this.config\n );\n\n return response.database;\n }\n\n private formatDateParameter(date: Date | string): string {\n return date instanceof Date ? date.toISOString() : date;\n }\n\n private formatResponse(db: ApiDatabaseResponse): Database {\n return {\n name: db.Name,\n id: db.DbId,\n hostname: db.Hostname,\n regions: db.regions,\n primaryRegion: db.primaryRegion,\n type: db.type,\n version: db.version,\n group: db.group,\n sleeping: db.sleeping,\n archived: db.archived,\n allow_attach: db.allow_attach,\n block_reads: db.block_reads,\n block_writes: db.block_writes,\n schema: db.schema,\n is_schema: db.is_schema,\n };\n }\n\n private formatCreateResponse(db: ApiCreateDatabaseResponse): CreatedDatabase {\n return {\n id: db.DbId,\n hostname: db.Hostname,\n name: db.Name,\n };\n }\n}\n","import { TursoConfig } from \"./config\";\nimport { ApiTokenClient } from \"./api-token\";\nimport { OrganizationClient } from \"./organization\";\nimport { LocationClient } from \"./location\";\nimport { GroupClient } from \"./group\";\nimport { DatabaseClient } from \"./database\";\n\ninterface ApiErrorResponse {\n error: string;\n}\n\ninterface AdditionalInfo {\n status?: number;\n}\n\nexport class TursoClientError extends Error {\n status?: number;\n constructor(message: string, additionalInfo?: AdditionalInfo) {\n super(message);\n this.name = \"TursoClientError\";\n this.status = additionalInfo?.status;\n }\n}\n\nexport class TursoClient {\n private config: TursoConfig;\n public apiTokens: ApiTokenClient;\n public organizations: OrganizationClient;\n public locations: LocationClient;\n public groups: GroupClient;\n public databases: DatabaseClient;\n\n constructor(config: TursoConfig) {\n if (!config.token) {\n throw new Error(\"You must provide an API token\");\n }\n\n this.config = {\n baseUrl: \"https://api.turso.tech/v1/\",\n ...config,\n };\n\n this.apiTokens = new ApiTokenClient(this.config);\n this.organizations = new OrganizationClient(this.config);\n this.locations = new LocationClient(this.config);\n this.groups = new GroupClient(this.config);\n this.databases = new DatabaseClient(this.config);\n }\n\n static async request<T>(\n url: string,\n config: TursoConfig,\n options: RequestInit = {}\n ) {\n const response = await fetch(new URL(url, config.baseUrl), {\n ...options,\n headers: {\n ...options.headers,\n Authorization: `Bearer ${config.token}`,\n \"User-Agent\": \"@tursodatabase/api\",\n },\n });\n\n if (!response.ok) {\n const errorResponse = (await response.json().catch(() => {\n throw new Error(`Something went wrong! Status ${response.status}`);\n })) as ApiErrorResponse;\n\n throw new TursoClientError(errorResponse.error, {\n status: response.status,\n });\n }\n\n return response.json() as T;\n }\n}\n\nexport function createClient(config: TursoConfig): TursoClient {\n return new TursoClient(config);\n}\n"],"mappings":"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","names":[]} |
+5
-2
| { | ||
| "name": "@tursodatabase/api", | ||
| "description": "The Turso API gives you everything needed to manage your organization and it's members, groups, databases, and API tokens.", | ||
| "version": "1.9.2", | ||
| "version": "2.0.0-pre.2", | ||
| "license": "MIT", | ||
| "repository": "tursodatabase/turso-api-client-ts", | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "git+https://github.com/tursodatabase/turso-api-client-ts.git" | ||
| }, | ||
| "keywords": [ | ||
@@ -8,0 +11,0 @@ "turso", |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
119079
1.56%1274
1.35%1
-50%2
100%