@nivo-lat/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ import { NivoAuthClient } from './auth';
2
+ export declare class NivoClient {
3
+ readonly auth: NivoAuthClient;
4
+ constructor(authUrl: string, anonKey: string);
5
+ }
6
+ export declare function createClient(authUrl: string, anonKey: string): NivoClient;
7
+ export { NivoAPI } from './NivoAPI';
8
+ export { NivoError } from './client';
9
+ export type { NivoAPIOptions } from './NivoAPI';
10
+ export type { Session, AuthUser, AuthError, AuthChangeEvent } from './auth';
11
+ export type { Database, DatabaseWithConnection, QueryResult, TableInfo, TableColumn, TableRowsResult, CreateDatabaseOptions, TableRowsOptions, UpdateRowOptions, DeleteRowsOptions, } from './resources/databases';
12
+ export type { App, Deployment, AppLogs, DeploymentLogs, BuildSystem, CreateAppOptions, WaitForDeploymentOptions, AppFile, } from './resources/apps';
13
+ export type { StorageBucket, StorageFile, StorageStats, CreateBucketOptions, UpdateBucketOptions, UploadToBucketOptions, ListFilesOptions, CdnFile, CdnStats, CdnUploadOptions, } from './resources/storage';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAEvC,qBAAa,UAAU;IACrB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;gBAEjB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAG7C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAEzE;AAGD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAG/C,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAG3E,YAAY,EACV,QAAQ,EACR,sBAAsB,EACtB,WAAW,EACX,SAAS,EACT,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAG9B,YAAY,EACV,GAAG,EACH,UAAU,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,OAAO,GACR,MAAM,kBAAkB,CAAA;AAGzB,YAAY,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,gBAAgB,GACjB,MAAM,qBAAqB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NivoError = exports.NivoAPI = exports.NivoClient = void 0;
4
+ exports.createClient = createClient;
5
+ // ── Browser client (auth + future: db queries) ────────────────────────────────
6
+ const auth_1 = require("./auth");
7
+ class NivoClient {
8
+ constructor(authUrl, anonKey) {
9
+ this.auth = new auth_1.NivoAuthClient(authUrl.replace(/\/$/, ''), anonKey);
10
+ }
11
+ }
12
+ exports.NivoClient = NivoClient;
13
+ function createClient(authUrl, anonKey) {
14
+ return new NivoClient(authUrl, anonKey);
15
+ }
16
+ // ── Admin / CLI SDK ───────────────────────────────────────────────────────────
17
+ var NivoAPI_1 = require("./NivoAPI");
18
+ Object.defineProperty(exports, "NivoAPI", { enumerable: true, get: function () { return NivoAPI_1.NivoAPI; } });
19
+ var client_1 = require("./client");
20
+ Object.defineProperty(exports, "NivoError", { enumerable: true, get: function () { return client_1.NivoError; } });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAWA,oCAEC;AAbD,iFAAiF;AACjF,iCAAuC;AAEvC,MAAa,UAAU;IAGrB,YAAY,OAAe,EAAE,OAAe;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAc,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IACrE,CAAC;CACF;AAND,gCAMC;AAED,SAAgB,YAAY,CAAC,OAAe,EAAE,OAAe;IAC3D,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzC,CAAC;AAED,iFAAiF;AACjF,qCAAmC;AAA1B,kGAAA,OAAO,OAAA;AAChB,mCAAoC;AAA3B,mGAAA,SAAS,OAAA"}
@@ -0,0 +1,113 @@
1
+ import { NivoClient } from '../client';
2
+ import { Readable } from 'stream';
3
+ export interface App {
4
+ id: string;
5
+ name: string;
6
+ projectId: string;
7
+ status: string;
8
+ subdomain: string | null;
9
+ customDomain: string | null;
10
+ domainStatus: string | null;
11
+ runtime: string;
12
+ buildSystem: BuildSystem;
13
+ type: string;
14
+ ramMb: number;
15
+ repoBranch: string | null;
16
+ repoFullName: string | null;
17
+ sourceType: string;
18
+ autoDeploy: boolean;
19
+ port: number | null;
20
+ createdAt: string;
21
+ updatedAt: string;
22
+ }
23
+ export interface Deployment {
24
+ id: string;
25
+ status: string;
26
+ trigger: string;
27
+ createdAt: string;
28
+ finishedAt: string | null;
29
+ }
30
+ export type BuildSystem = 'nivopack' | 'nixpacks' | 'dockerfile';
31
+ export interface AppLogs {
32
+ log: string;
33
+ status: string;
34
+ port: number | null;
35
+ subdomain: string | null;
36
+ }
37
+ export interface DeploymentLogs {
38
+ log: string;
39
+ status: string;
40
+ trigger: string;
41
+ createdAt: string;
42
+ finishedAt: string | null;
43
+ }
44
+ export interface CreateAppOptions {
45
+ name: string;
46
+ runtime?: string;
47
+ startCmd?: string;
48
+ buildSystem?: BuildSystem;
49
+ installCmd?: string;
50
+ buildCmd?: string;
51
+ ramMb?: number;
52
+ envVars?: Record<string, string>;
53
+ type?: 'site' | 'worker';
54
+ sourceType?: 'zip' | 'github';
55
+ repoFullName?: string;
56
+ repoBranch?: string;
57
+ }
58
+ export interface WaitForDeploymentOptions {
59
+ intervalMs?: number;
60
+ timeoutMs?: number;
61
+ onLog?: (chunk: string, logs: DeploymentLogs) => void;
62
+ onStatus?: (status: string, logs: DeploymentLogs) => void;
63
+ }
64
+ export interface AppFile {
65
+ name: string;
66
+ size: number;
67
+ type: 'file' | 'dir' | 'symlink';
68
+ }
69
+ export declare class AppsResource {
70
+ private readonly client;
71
+ constructor(client: NivoClient);
72
+ list(): Promise<App[]>;
73
+ get(id: string): Promise<App>;
74
+ create(opts: CreateAppOptions): Promise<App>;
75
+ commit(id: string, file: Buffer | string | Readable, filename?: string): Promise<{
76
+ ok: boolean;
77
+ deploymentId: string;
78
+ }>;
79
+ commitAndWait(id: string, file: Buffer | string | Readable, filename?: string, opts?: WaitForDeploymentOptions): Promise<DeploymentLogs>;
80
+ deploy(id: string): Promise<{
81
+ ok: boolean;
82
+ deploymentId: string;
83
+ }>;
84
+ deployAndWait(id: string, opts?: WaitForDeploymentOptions): Promise<DeploymentLogs>;
85
+ start(id: string): Promise<{
86
+ ok: boolean;
87
+ }>;
88
+ stop(id: string): Promise<{
89
+ ok: boolean;
90
+ }>;
91
+ logs(id: string): Promise<AppLogs>;
92
+ deployments(id: string): Promise<Deployment[]>;
93
+ deploymentLogs(id: string, deploymentId: string): Promise<DeploymentLogs>;
94
+ waitForDeployment(id: string, deploymentId: string, opts?: WaitForDeploymentOptions): Promise<DeploymentLogs>;
95
+ setEnv(id: string, envVars: Record<string, string>): Promise<App>;
96
+ listFiles(id: string, path?: string): Promise<{
97
+ files: AppFile[];
98
+ path: string;
99
+ }>;
100
+ readFile(id: string, path: string): Promise<{
101
+ content: string;
102
+ path: string;
103
+ }>;
104
+ writeFile(id: string, path: string, content: string): Promise<{
105
+ ok: boolean;
106
+ path: string;
107
+ }>;
108
+ deleteFile(id: string, path: string): Promise<{
109
+ ok: boolean;
110
+ path: string;
111
+ }>;
112
+ }
113
+ //# sourceMappingURL=apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/resources/apps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AppsResource = void 0;
4
+ const client_1 = require("../client");
5
+ class AppsResource {
6
+ constructor(client) {
7
+ this.client = client;
8
+ }
9
+ async list() {
10
+ const data = await this.client.get('/sdk/apps');
11
+ return data.apps;
12
+ }
13
+ async get(id) {
14
+ const data = await this.client.get(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}`);
15
+ return data.app;
16
+ }
17
+ async create(opts) {
18
+ const data = await this.client.post('/sdk/apps', opts);
19
+ return data.app;
20
+ }
21
+ async commit(id, file, filename = 'app.zip') {
22
+ return this.client.upload(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/upload`, file, filename);
23
+ }
24
+ async commitAndWait(id, file, filename = 'app.zip', opts = {}) {
25
+ const { deploymentId } = await this.commit(id, file, filename);
26
+ return this.waitForDeployment(id, deploymentId, opts);
27
+ }
28
+ async deploy(id) {
29
+ return this.client.post(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/deploy`);
30
+ }
31
+ async deployAndWait(id, opts = {}) {
32
+ const { deploymentId } = await this.deploy(id);
33
+ return this.waitForDeployment(id, deploymentId, opts);
34
+ }
35
+ async start(id) {
36
+ return this.client.post(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/start`);
37
+ }
38
+ async stop(id) {
39
+ return this.client.post(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/stop`);
40
+ }
41
+ async logs(id) {
42
+ return this.client.get(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/logs`);
43
+ }
44
+ async deployments(id) {
45
+ const data = await this.client.get(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/deployments`);
46
+ return data.deployments;
47
+ }
48
+ async deploymentLogs(id, deploymentId) {
49
+ return this.client.get(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/deployments/${(0, client_1.encodePathSegment)(deploymentId)}/logs`);
50
+ }
51
+ async waitForDeployment(id, deploymentId, opts = {}) {
52
+ const intervalMs = Math.max(500, opts.intervalMs ?? 3000);
53
+ const timeoutMs = opts.timeoutMs ?? 30 * 60 * 1000;
54
+ const deadline = Date.now() + timeoutMs;
55
+ const terminal = new Set(['success', 'error', 'cancelled']);
56
+ let printed = 0;
57
+ let lastStatus = '';
58
+ while (Date.now() < deadline) {
59
+ const logs = await this.deploymentLogs(id, deploymentId);
60
+ if (opts.onLog && logs.log.length > printed) {
61
+ opts.onLog(logs.log.slice(printed), logs);
62
+ printed = logs.log.length;
63
+ }
64
+ if (opts.onStatus && logs.status !== lastStatus) {
65
+ opts.onStatus(logs.status, logs);
66
+ lastStatus = logs.status;
67
+ }
68
+ if (terminal.has(logs.status))
69
+ return logs;
70
+ await new Promise((resolve) => setTimeout(resolve, intervalMs));
71
+ }
72
+ throw new Error(`Deployment ${deploymentId} did not finish within ${timeoutMs}ms`);
73
+ }
74
+ async setEnv(id, envVars) {
75
+ const data = await this.client.patch(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/env`, { envVars });
76
+ return data.app;
77
+ }
78
+ async listFiles(id, path = '/app') {
79
+ return this.client.get(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/files`, { path });
80
+ }
81
+ async readFile(id, path) {
82
+ return this.client.get(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/files/read`, { path });
83
+ }
84
+ async writeFile(id, path, content) {
85
+ return this.client.post(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/files`, { path, content });
86
+ }
87
+ async deleteFile(id, path) {
88
+ return this.client.delete(`/sdk/apps/${(0, client_1.encodePathSegment)(id)}/files`, { path });
89
+ }
90
+ }
91
+ exports.AppsResource = AppsResource;
92
+ //# sourceMappingURL=apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/resources/apps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { NivoClient } from '../client';
2
+ export interface Database {
3
+ id: string;
4
+ name: string;
5
+ projectId: string;
6
+ host: string;
7
+ port: number;
8
+ dbName: string;
9
+ engine: string;
10
+ ramMb: number;
11
+ status: string;
12
+ visualizerPort: number | null;
13
+ createdAt: string;
14
+ }
15
+ export interface DatabaseWithConnection extends Database {
16
+ connectionString: string;
17
+ }
18
+ export interface QueryResult {
19
+ rows: Record<string, unknown>[];
20
+ fields: {
21
+ name: string;
22
+ dataTypeID: number;
23
+ }[];
24
+ rowCount: number;
25
+ command: string;
26
+ duration: number;
27
+ }
28
+ export interface TableInfo {
29
+ name: string;
30
+ row_count: number;
31
+ }
32
+ export interface TableColumn {
33
+ name: string;
34
+ type: string;
35
+ nullable: boolean;
36
+ default_value: string | null;
37
+ is_primary: boolean;
38
+ }
39
+ export interface TableRowsResult {
40
+ columns: TableColumn[];
41
+ rows: Record<string, unknown>[];
42
+ total: number;
43
+ page: number;
44
+ limit: number;
45
+ }
46
+ export interface CreateDatabaseOptions {
47
+ name: string;
48
+ password: string;
49
+ engine?: 'postgresql' | 'mysql' | 'mongodb' | 'redis';
50
+ ramMb?: number;
51
+ }
52
+ export interface TableRowsOptions {
53
+ page?: number;
54
+ limit?: number;
55
+ sortCol?: string;
56
+ sortDir?: 'asc' | 'desc';
57
+ }
58
+ export interface UpdateRowOptions {
59
+ pkColumn: string;
60
+ column: string;
61
+ value: unknown;
62
+ }
63
+ export interface DeleteRowsOptions {
64
+ pkColumn: string;
65
+ pkValues: unknown[];
66
+ }
67
+ export declare class DatabasesResource {
68
+ private readonly client;
69
+ constructor(client: NivoClient);
70
+ list(): Promise<Database[]>;
71
+ get(id: string): Promise<Database>;
72
+ create(opts: CreateDatabaseOptions): Promise<DatabaseWithConnection>;
73
+ query(id: string, sql: string): Promise<QueryResult>;
74
+ tables(id: string): Promise<TableInfo[]>;
75
+ tableRows(id: string, table: string, opts?: TableRowsOptions): Promise<TableRowsResult>;
76
+ insertRow(id: string, table: string, row: Record<string, unknown>): Promise<Record<string, unknown>>;
77
+ updateRow(id: string, table: string, pkValue: string | number, opts: UpdateRowOptions): Promise<Record<string, unknown>>;
78
+ deleteRows(id: string, table: string, opts: DeleteRowsOptions): Promise<{
79
+ deleted: number;
80
+ }>;
81
+ }
82
+ //# sourceMappingURL=databases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"databases.d.ts","sourceRoot":"","sources":["../../src/resources/databases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatabasesResource = void 0;
4
+ const client_1 = require("../client");
5
+ class DatabasesResource {
6
+ constructor(client) {
7
+ this.client = client;
8
+ }
9
+ async list() {
10
+ const data = await this.client.get('/sdk/databases');
11
+ return data.databases;
12
+ }
13
+ async get(id) {
14
+ const data = await this.client.get(`/sdk/databases/${(0, client_1.encodePathSegment)(id)}`);
15
+ return data.database;
16
+ }
17
+ async create(opts) {
18
+ const data = await this.client.post('/sdk/databases', opts);
19
+ return data.database;
20
+ }
21
+ async query(id, sql) {
22
+ return this.client.post(`/sdk/databases/${(0, client_1.encodePathSegment)(id)}/query`, { sql });
23
+ }
24
+ async tables(id) {
25
+ const data = await this.client.get(`/sdk/databases/${(0, client_1.encodePathSegment)(id)}/tables`);
26
+ return data.tables;
27
+ }
28
+ async tableRows(id, table, opts = {}) {
29
+ return this.client.get(`/sdk/databases/${(0, client_1.encodePathSegment)(id)}/tables/${(0, client_1.encodePathSegment)(table)}`, {
30
+ page: opts.page?.toString(),
31
+ limit: opts.limit?.toString(),
32
+ sortCol: opts.sortCol,
33
+ sortDir: opts.sortDir,
34
+ });
35
+ }
36
+ async insertRow(id, table, row) {
37
+ return this.client.post(`/sdk/databases/${(0, client_1.encodePathSegment)(id)}/tables/${(0, client_1.encodePathSegment)(table)}/rows`, { row });
38
+ }
39
+ async updateRow(id, table, pkValue, opts) {
40
+ return this.client.patch(`/sdk/databases/${(0, client_1.encodePathSegment)(id)}/tables/${(0, client_1.encodePathSegment)(table)}/rows/${(0, client_1.encodePathSegment)(pkValue)}`, opts);
41
+ }
42
+ async deleteRows(id, table, opts) {
43
+ return this.client.deleteWithBody(`/sdk/databases/${(0, client_1.encodePathSegment)(id)}/tables/${(0, client_1.encodePathSegment)(table)}/rows`, opts);
44
+ }
45
+ }
46
+ exports.DatabasesResource = DatabasesResource;
47
+ //# sourceMappingURL=databases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"databases.js","sourceRoot":"","sources":["../../src/resources/databases.ts"],"names":[],"mappings":";;;AAAA,sCAAgE;AA0EhE,MAAa,iBAAiB;IAC5B,YAA6B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAEnD,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAA4B,gBAAgB,CAAC,CAAA;QAC/E,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAyB,kBAAkB,IAAA,0BAAG,EAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACvF,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAA2B;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAuC,gBAAgB,EAAE,IAAI,CAAC,CAAA;QACjG,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EAAU,EAAE,GAAW;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAc,kBAAkB,IAAA,0BAAG,EAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAA0B,kBAAkB,IAAA,0BAAG,EAAC,EAAE,CAAC,SAAS,CAAC,CAAA;QAC/F,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,KAAa,EAAE,OAAyB,EAAE;QACpE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAkB,kBAAkB,IAAA,0BAAG,EAAC,EAAE,CAAC,WAAW,IAAA,0BAAG,EAAC,KAAK,CAAC,EAAE,EAAE;YACxF,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,KAAa,EAAE,GAA4B;QACrE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAA0B,kBAAkB,IAAA,0BAAG,EAAC,EAAE,CAAC,WAAW,IAAA,0BAAG,EAAC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;IAClH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,KAAa,EAAE,OAAwB,EAAE,IAAsB;QACzF,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAA0B,kBAAkB,IAAA,0BAAG,EAAC,EAAE,CAAC,WAAW,IAAA,0BAAG,EAAC,KAAK,CAAC,SAAS,IAAA,0BAAG,EAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAChI,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,KAAa,EAAE,IAAuB;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAsB,kBAAkB,IAAA,0BAAG,EAAC,EAAE,CAAC,WAAW,IAAA,0BAAG,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACrH,CAAC;CACF;AA/CD,8CA+CC"}
@@ -0,0 +1,133 @@
1
+ import { NivoClient } from '../client';
2
+ import { Readable } from 'stream';
3
+ export interface StorageBucket {
4
+ id: string;
5
+ projectId: string;
6
+ name: string;
7
+ public: boolean;
8
+ fileSizeLimit: number | null;
9
+ allowedMimeTypes: string[];
10
+ corsOrigins: string[];
11
+ corsMethods: string[];
12
+ cacheControl: string;
13
+ customDomain: string | null;
14
+ customDomainStatus: string | null;
15
+ createdAt: string;
16
+ updatedAt: string;
17
+ }
18
+ export interface StorageFile {
19
+ id: string;
20
+ projectId: string;
21
+ bucketId: string | null;
22
+ key: string;
23
+ filename: string;
24
+ sizeBytes: number;
25
+ mimeType: string;
26
+ expiresAt: string | null;
27
+ createdAt: string;
28
+ url?: string;
29
+ }
30
+ export interface StorageStats {
31
+ usedBytes: number;
32
+ totalFiles: number;
33
+ limitBytes: number;
34
+ bucketCount?: number;
35
+ }
36
+ export interface CreateBucketOptions {
37
+ name: string;
38
+ public?: boolean;
39
+ fileSizeLimit?: number;
40
+ allowedMimeTypes?: string[];
41
+ corsOrigins?: string[];
42
+ corsMethods?: string[];
43
+ cacheControl?: string;
44
+ }
45
+ export interface UpdateBucketOptions {
46
+ public?: boolean;
47
+ fileSizeLimit?: number | null;
48
+ allowedMimeTypes?: string[];
49
+ corsOrigins?: string[];
50
+ corsMethods?: string[];
51
+ cacheControl?: string;
52
+ customDomain?: string | null;
53
+ }
54
+ export interface UploadToBucketOptions {
55
+ filename?: string;
56
+ mimeType?: string;
57
+ folder?: string;
58
+ }
59
+ export interface ListFilesOptions {
60
+ search?: string;
61
+ page?: number;
62
+ limit?: number;
63
+ }
64
+ export interface CdnFile {
65
+ id: string;
66
+ projectId: string;
67
+ key: string;
68
+ filename: string;
69
+ sizeBytes: number;
70
+ mimeType: string;
71
+ expiresAt: string | null;
72
+ createdAt: string;
73
+ url: string;
74
+ }
75
+ export interface CdnStats {
76
+ usedBytes: number;
77
+ totalFiles: number;
78
+ limitBytes: number;
79
+ computeTier: string;
80
+ }
81
+ export interface CdnUploadOptions {
82
+ filename?: string;
83
+ folder?: string;
84
+ }
85
+ declare class BucketsResource {
86
+ private readonly client;
87
+ constructor(client: NivoClient);
88
+ list(): Promise<StorageBucket[]>;
89
+ create(opts: CreateBucketOptions): Promise<StorageBucket>;
90
+ get(id: string): Promise<StorageBucket>;
91
+ update(id: string, opts: UpdateBucketOptions): Promise<StorageBucket>;
92
+ delete(id: string): Promise<{
93
+ ok: boolean;
94
+ }>;
95
+ files(id: string, opts?: ListFilesOptions): Promise<StorageFile[]>;
96
+ upload(id: string, file: Buffer | string | Readable, opts?: UploadToBucketOptions): Promise<{
97
+ file: StorageFile;
98
+ }>;
99
+ }
100
+ declare class FilesResource {
101
+ private readonly client;
102
+ constructor(client: NivoClient);
103
+ delete(id: string): Promise<{
104
+ ok: boolean;
105
+ }>;
106
+ signedUrl(id: string, ttlSeconds?: number): Promise<{
107
+ url: string;
108
+ expiresAt: number;
109
+ }>;
110
+ }
111
+ declare class CdnResource {
112
+ private readonly client;
113
+ constructor(client: NivoClient);
114
+ stats(): Promise<CdnStats>;
115
+ files(): Promise<CdnFile[]>;
116
+ get(id: string): Promise<CdnFile>;
117
+ upload(file: Buffer | string | Readable, opts?: CdnUploadOptions): Promise<{
118
+ file: CdnFile;
119
+ }>;
120
+ delete(id: string): Promise<{
121
+ ok: boolean;
122
+ }>;
123
+ }
124
+ export declare class StorageResource {
125
+ private readonly client;
126
+ readonly buckets: BucketsResource;
127
+ readonly files: FilesResource;
128
+ readonly cdn: CdnResource;
129
+ constructor(client: NivoClient);
130
+ stats(): Promise<StorageStats>;
131
+ }
132
+ export {};
133
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/resources/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageResource = void 0;
4
+ const client_1 = require("../client");
5
+ class BucketsResource {
6
+ constructor(client) {
7
+ this.client = client;
8
+ }
9
+ async list() {
10
+ const data = await this.client.get('/storage/buckets');
11
+ return data.buckets;
12
+ }
13
+ async create(opts) {
14
+ const data = await this.client.post('/storage/buckets', opts);
15
+ return data.bucket;
16
+ }
17
+ async get(id) {
18
+ const data = await this.client.get(`/storage/buckets/${(0, client_1.encodePathSegment)(id)}`);
19
+ return data.bucket;
20
+ }
21
+ async update(id, opts) {
22
+ const data = await this.client.patch(`/storage/buckets/${(0, client_1.encodePathSegment)(id)}`, opts);
23
+ return data.bucket;
24
+ }
25
+ async delete(id) {
26
+ return this.client.delete(`/storage/buckets/${(0, client_1.encodePathSegment)(id)}`);
27
+ }
28
+ async files(id, opts = {}) {
29
+ const data = await this.client.get(`/storage/buckets/${(0, client_1.encodePathSegment)(id)}/files`, {
30
+ search: opts.search,
31
+ page: opts.page?.toString(),
32
+ limit: opts.limit?.toString(),
33
+ });
34
+ return data.files;
35
+ }
36
+ async upload(id, file, opts = {}) {
37
+ const filename = opts.filename ?? 'upload';
38
+ return this.client.upload(`/storage/buckets/${(0, client_1.encodePathSegment)(id)}/upload`, file, filename, 'file', opts.folder ? { folder: opts.folder } : undefined);
39
+ }
40
+ }
41
+ class FilesResource {
42
+ constructor(client) {
43
+ this.client = client;
44
+ }
45
+ async delete(id) {
46
+ return this.client.delete(`/storage/files/${(0, client_1.encodePathSegment)(id)}`);
47
+ }
48
+ async signedUrl(id, ttlSeconds = 3600) {
49
+ return this.client.post(`/storage/files/${(0, client_1.encodePathSegment)(id)}/signed-url`, { ttlSeconds });
50
+ }
51
+ }
52
+ class CdnResource {
53
+ constructor(client) {
54
+ this.client = client;
55
+ }
56
+ async stats() {
57
+ return this.client.get('/cdn/stats');
58
+ }
59
+ async files() {
60
+ const data = await this.client.get('/cdn/files');
61
+ return data.files;
62
+ }
63
+ async get(id) {
64
+ return this.client.get(`/cdn/files/${(0, client_1.encodePathSegment)(id)}`);
65
+ }
66
+ async upload(file, opts = {}) {
67
+ const filename = opts.filename ?? 'upload';
68
+ return this.client.upload('/cdn/upload', file, filename, 'file', opts.folder ? { folder: opts.folder } : undefined);
69
+ }
70
+ async delete(id) {
71
+ return this.client.delete(`/cdn/files/${(0, client_1.encodePathSegment)(id)}`);
72
+ }
73
+ }
74
+ class StorageResource {
75
+ constructor(client) {
76
+ this.client = client;
77
+ this.buckets = new BucketsResource(client);
78
+ this.files = new FilesResource(client);
79
+ this.cdn = new CdnResource(client);
80
+ }
81
+ async stats() {
82
+ return this.client.get('/storage/stats');
83
+ }
84
+ }
85
+ exports.StorageResource = StorageResource;
86
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/resources/storage.ts"],"names":[],"mappings":"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"}