@boltstore/client 0.5.2 → 0.6.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.
package/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # @boltstore/client
2
2
 
3
- TypeScript SDK for Boltstore. Works in Bun, Node 18+, browsers, and React Native.
4
-
5
- **Zero external dependencies** (only `@boltstore/utils` for types).
3
+ JavaScript/TypeScript SDK for Boltstore. Works in the browser, Node.js, and React Native.
6
4
 
7
5
  ## Installation
8
6
 
@@ -10,106 +8,110 @@ TypeScript SDK for Boltstore. Works in Bun, Node 18+, browsers, and React Native
10
8
  npm install @boltstore/client
11
9
  ```
12
10
 
13
- ## Quick Start
11
+ ## Quick start
14
12
 
15
- ```ts
16
- import { BoltstoreClient, login, listRecords } from "@boltstore/client";
13
+ ```typescript
14
+ import { BoltStoreClient } from "@boltstore/client";
17
15
 
18
- const client = new BoltstoreClient({
19
- url: "http://localhost:8090",
16
+ const client = new BoltStoreClient({
17
+ url: "http://localhost:8080",
20
18
  });
21
19
 
22
- // Authenticate
23
- await login(client, {
24
- email: "alice@example.com",
25
- password: "secret123",
20
+ // Collections
21
+ const collections = await client.collections.list();
22
+
23
+ // Records
24
+ const records = await client.records.list("posts", {
25
+ filter: "status:eq:published",
26
+ sort: ["created_at:desc"],
27
+ pagination: { page: 1, perPage: 20 },
26
28
  });
27
29
 
28
- // Query records
29
- const todos = await listRecords(client, "todos", {
30
- filter: "status = 'active'",
31
- sort: "-created",
32
- perPage: 50,
30
+ const record = await client.records.create("posts", {
31
+ title: "Hello World",
32
+ content: "My first post",
33
33
  });
34
34
 
35
- console.log(todos.items);
36
- ```
35
+ const updated = await client.records.update("posts", record.id, {
36
+ title: "Updated title",
37
+ });
37
38
 
38
- ## Features
39
+ await client.records.delete("posts", record.id);
39
40
 
40
- | Module | Description |
41
- |--------|-------------|
42
- | `client.ts` | Main client — auth state, request helpers, auto-refresh |
43
- | `auth.ts` | Login, register, refresh, logout, OAuth2 |
44
- | `records.ts` | CRUD operations, filtering, sorting, pagination |
45
- | `collections.ts` | Read/write collection schemas |
46
- | `realtime.ts` | WebSocket subscriptions, auto-reconnect |
47
- | `sync.ts` | Offline-first sync engine with conflict resolution |
48
- | `storage.ts` | File upload, download, presigned URLs |
49
- | `adapters/` | Platform adapters: Node/Bun, Web, React Native |
50
- | `typegen/` | CLI to generate TypeScript types from your schema |
41
+ // Auth (Phase 2)
42
+ const { token, user } = await client.auth.login({
43
+ email: "user@example.com",
44
+ password: "secret",
45
+ });
51
46
 
52
- ## Platform Adapters
47
+ // Realtime (Phase 3)
48
+ const unsubscribe = client.realtime.subscribe("posts", (event) => {
49
+ console.log("Change:", event);
50
+ });
53
51
 
54
- ```ts
55
- // Node / Bun (auto-detected)
56
- import { createNodeAdapter } from "@boltstore/client/adapters/node";
52
+ // Sync (Phase 4)
53
+ client.sync.start({ collections: ["posts"] });
54
+ ```
57
55
 
58
- // Browser
59
- import { createWebAdapter } from "@boltstore/client/adapters/web";
56
+ ## API
60
57
 
61
- // React Native
62
- import { createReactNativeAdapter } from "@boltstore/client/adapters/react-native";
58
+ ### Client
63
59
 
64
- // Or auto-detect
65
- import { autoDetectAdapter } from "@boltstore/client/adapters/web";
60
+ ```typescript
61
+ const client = new BoltStoreClient({ url: string, token?: string });
62
+ client.setToken(token: string);
63
+ client.onTokenExpired(callback: () => Promise<string>);
66
64
  ```
67
65
 
68
- ## Realtime Subscriptions
69
-
70
- ```ts
71
- import { connectRealtime } from "@boltstore/client";
66
+ ### Collections
72
67
 
73
- const rt = connectRealtime(client);
68
+ ```typescript
69
+ client.collections.list(): Promise<Collection[]>
70
+ client.collections.get(name: string): Promise<Collection>
71
+ ```
74
72
 
75
- const unsub = rt.subscribe("table:app_123:todos", (event) => {
76
- console.log(`${event.type}:`, event.record);
77
- });
73
+ ### Records
78
74
 
79
- // Later: unsub(); to stop receiving events
75
+ ```typescript
76
+ client.records.list(collection: string, options?: QueryOptions): Promise<PaginatedResponse>
77
+ client.records.get(collection: string, id: string): Promise<Record>
78
+ client.records.create(collection: string, data: object): Promise<Record>
79
+ client.records.update(collection: string, id: string, data: object): Promise<Record>
80
+ client.records.delete(collection: string, id: string): Promise<void>
81
+ client.records.count(collection: string, filter?: string): Promise<number>
80
82
  ```
81
83
 
82
- ## Offline Sync
83
-
84
- ```ts
85
- import { enableSync } from "@boltstore/client";
84
+ ### Query Options
85
+
86
+ ```typescript
87
+ interface QueryOptions {
88
+ filter?: string;
89
+ sort?: string[];
90
+ page?: number;
91
+ perPage?: number;
92
+ cursor?: string;
93
+ limit?: number;
94
+ fields?: string[];
95
+ expand?: string[];
96
+ search?: string;
97
+ }
98
+ ```
86
99
 
87
- const sync = enableSync(client, {
88
- collections: ["todos", "notes"],
89
- onConflict: (local, server, strategy) => {
90
- // Custom conflict resolution
91
- return server; // server-wins default
92
- },
93
- });
100
+ ## Development
94
101
 
95
- // Track local changes
96
- sync.trackLocalChange({
97
- rowId: "rec_123",
98
- collection: "todos",
99
- operation: "update",
100
- field: "title",
101
- newValue: "Updated offline",
102
- });
102
+ ```bash
103
+ bun install
104
+ bun run build # compile TypeScript
105
+ bun test # run tests
106
+ bun run dev # watch mode
103
107
  ```
104
108
 
105
- ## Type Generation
106
-
107
- Generate TypeScript types from your Boltstore schema:
109
+ ## Publishing
108
110
 
109
111
  ```bash
110
- boltstore typegen --url http://localhost:8090 --output types.ts
112
+ npm publish
111
113
  ```
112
114
 
113
115
  ## License
114
116
 
115
- MIT
117
+ MIT
@@ -0,0 +1,62 @@
1
+ import type { ApiResponse, CollectionInfo, BoltstoreRecord, ListOptions, BatchOperation, BatchResult, QueryOptions } from "@boltstore/utils";
2
+ import { BoltstoreError } from "./errors";
3
+ import type { TypedCollection } from "./types";
4
+ import type { HttpMethod, TokenPair, UserProfile, OAuthProvider, ClientConfig, HealthCheck, PaginatedResult, TypedRecord, TypedBatchOperation, PaginateOptions } from "./types";
5
+ export { BoltstoreError };
6
+ export { TypedCollectionImpl } from "./typed-collection";
7
+ export type { TypedCollection } from "./typed-collection";
8
+ export type { TokenPair, UserProfile, OAuthProvider, ClientConfig, HealthCheck, PaginatedResult, PaginateOptions, TypedRecord, TypedBatchOperation, };
9
+ export declare class BoltstoreClient {
10
+ private baseUrl;
11
+ private database;
12
+ private token;
13
+ private refreshToken;
14
+ constructor(config: ClientConfig);
15
+ collection<Fields = Record<string, unknown>>(name: string): TypedCollection<Fields>;
16
+ setToken(token: string | undefined): void;
17
+ getToken(): string | undefined;
18
+ setRefreshToken(token: string | undefined): void;
19
+ getRefreshToken(): string | undefined;
20
+ auth: {
21
+ register: (email: string, password: string) => Promise<UserProfile>;
22
+ login: (email: string, password: string) => Promise<TokenPair>;
23
+ refresh: (refreshToken?: string) => Promise<TokenPair>;
24
+ autoRefresh: (thresholdSeconds?: number) => Promise<TokenPair | null>;
25
+ logout: () => Promise<void>;
26
+ me: () => Promise<UserProfile>;
27
+ updateProfile: (data: {
28
+ email?: string;
29
+ password?: string;
30
+ }) => Promise<UserProfile>;
31
+ oauthUrl: (provider: OAuthProvider, redirectUri: string) => Promise<string>;
32
+ oauthExchange: (provider: OAuthProvider, code: string, redirectUri: string) => Promise<TokenPair>;
33
+ };
34
+ health: {
35
+ check: () => Promise<HealthCheck>;
36
+ };
37
+ collections: {
38
+ list: () => Promise<CollectionInfo[]>;
39
+ get: (name: string) => Promise<CollectionInfo>;
40
+ };
41
+ records: {
42
+ create: (collection: string, data: Record<string, unknown>) => Promise<BoltstoreRecord>;
43
+ list: (collection: string, options?: ListOptions) => Promise<BoltstoreRecord[]>;
44
+ get: (collection: string, id: string) => Promise<BoltstoreRecord>;
45
+ update: (collection: string, id: string, data: Record<string, unknown>) => Promise<BoltstoreRecord>;
46
+ delete: (collection: string, id: string) => Promise<void>;
47
+ count: (collection: string, filter?: Record<string, unknown>) => Promise<number>;
48
+ distinct: (collection: string, field: string) => Promise<unknown[]>;
49
+ batch: (collection: string, operations: BatchOperation[]) => Promise<BatchResult>;
50
+ paginate: (collection: string, options: PaginateOptions) => Promise<PaginatedResult<BoltstoreRecord>>;
51
+ listAll: (collection: string, options?: Omit<PaginateOptions, "page">) => Promise<BoltstoreRecord[]>;
52
+ };
53
+ query(options: QueryOptions): Promise<{
54
+ data: BoltstoreRecord[];
55
+ meta: Record<string, unknown>;
56
+ }>;
57
+ request<T = unknown>(method: HttpMethod, path: string, body?: unknown, retries?: number): Promise<ApiResponse<T>>;
58
+ dbPath(path: string): string;
59
+ buildListPath(collection: string, options?: ListOptions): string;
60
+ }
61
+ export default BoltstoreClient;
62
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js ADDED
@@ -0,0 +1,290 @@
1
+ import { BoltstoreError } from "./errors";
2
+ import { decodeJwtPayload } from "./jwt";
3
+ import { TypedCollectionImpl } from "./typed-collection";
4
+ export { BoltstoreError };
5
+ export { TypedCollectionImpl } from "./typed-collection";
6
+ export class BoltstoreClient {
7
+ constructor(config) {
8
+ this.auth = {
9
+ register: async (email, password) => {
10
+ const res = await this.request("POST", this.dbPath("/auth/register"), { email, password });
11
+ return res.data;
12
+ },
13
+ login: async (email, password) => {
14
+ const res = await this.request("POST", this.dbPath("/auth/login"), { email, password });
15
+ this.token = res.data.accessToken;
16
+ this.refreshToken = res.data.refreshToken;
17
+ return res.data;
18
+ },
19
+ refresh: async (refreshToken) => {
20
+ const token = refreshToken || this.refreshToken;
21
+ if (!token)
22
+ throw new BoltstoreError(400, "MISSING_REFRESH_TOKEN", "No refresh token available.");
23
+ const res = await this.request("POST", this.dbPath("/auth/refresh"), { refreshToken: token });
24
+ this.token = res.data.accessToken;
25
+ this.refreshToken = res.data.refreshToken;
26
+ return res.data;
27
+ },
28
+ autoRefresh: async (thresholdSeconds = 60) => {
29
+ if (!this.token || !this.refreshToken)
30
+ return null;
31
+ const payload = decodeJwtPayload(this.token);
32
+ if (!payload || !payload.exp)
33
+ return null;
34
+ const nowSec = Math.floor(Date.now() / 1000);
35
+ if (payload.exp - nowSec > thresholdSeconds)
36
+ return null;
37
+ return this.auth.refresh();
38
+ },
39
+ logout: async () => {
40
+ await this.request("POST", this.dbPath("/auth/logout"));
41
+ this.token = undefined;
42
+ this.refreshToken = undefined;
43
+ },
44
+ me: async () => {
45
+ const res = await this.request("GET", this.dbPath("/auth/me"));
46
+ return res.data;
47
+ },
48
+ updateProfile: async (data) => {
49
+ const res = await this.request("PATCH", this.dbPath("/auth/me"), data);
50
+ return res.data;
51
+ },
52
+ oauthUrl: async (provider, redirectUri) => {
53
+ const res = await this.request("GET", this.dbPath(`/auth/oauth/${provider}/url?redirect_uri=${encodeURIComponent(redirectUri)}`));
54
+ return res.data.url;
55
+ },
56
+ oauthExchange: async (provider, code, redirectUri) => {
57
+ const res = await this.request("POST", this.dbPath(`/auth/oauth/${provider}`), {
58
+ code,
59
+ redirect_uri: redirectUri,
60
+ });
61
+ this.token = res.data.accessToken;
62
+ this.refreshToken = res.data.refreshToken;
63
+ return res.data;
64
+ },
65
+ };
66
+ this.health = {
67
+ check: async () => {
68
+ const res = await this.request("GET", "/api/health");
69
+ return res.data ?? { status: "unknown", version: "", uptime: 0, timestamp: "" };
70
+ },
71
+ };
72
+ this.collections = {
73
+ list: async () => {
74
+ const res = await this.request("GET", this.dbPath("/collections"));
75
+ return res.data ?? [];
76
+ },
77
+ get: async (name) => {
78
+ const res = await this.request("GET", this.dbPath(`/collections/${name}`));
79
+ return res.data;
80
+ },
81
+ };
82
+ this.records = {
83
+ create: async (collection, data) => {
84
+ const res = await this.request("POST", this.dbPath(`/collections/${collection}/records`), data);
85
+ return res.data;
86
+ },
87
+ list: async (collection, options) => {
88
+ const path = this.buildListPath(collection, options);
89
+ const res = await this.request("GET", path);
90
+ return res.data ?? [];
91
+ },
92
+ get: async (collection, id) => {
93
+ const res = await this.request("GET", this.dbPath(`/collections/${collection}/records/${id}`));
94
+ return res.data;
95
+ },
96
+ update: async (collection, id, data) => {
97
+ const res = await this.request("PATCH", this.dbPath(`/collections/${collection}/records/${id}`), data);
98
+ return res.data;
99
+ },
100
+ delete: async (collection, id) => {
101
+ await this.request("DELETE", this.dbPath(`/collections/${collection}/records/${id}`));
102
+ },
103
+ count: async (collection, filter) => {
104
+ const params = new URLSearchParams();
105
+ if (filter) {
106
+ for (const [k, v] of Object.entries(filter)) {
107
+ if (v === null || v === undefined)
108
+ continue;
109
+ if (typeof v === "object" && !Array.isArray(v)) {
110
+ throw new BoltstoreError(400, "INVALID_FILTER", `Filter value for "${k}" must be a scalar or array.`);
111
+ }
112
+ params.set(k, Array.isArray(v) ? v.join(",") : String(v));
113
+ }
114
+ }
115
+ const qs = params.toString();
116
+ const path = this.dbPath(`/collections/${collection}/records/count`) + (qs ? `?${qs}` : "");
117
+ const res = await this.request("GET", path);
118
+ return res.data?.count ?? 0;
119
+ },
120
+ distinct: async (collection, field) => {
121
+ const res = await this.request("GET", this.dbPath(`/collections/${collection}/records/distinct?field=${encodeURIComponent(field)}`));
122
+ return res.data?.values ?? [];
123
+ },
124
+ batch: async (collection, operations) => {
125
+ const res = await this.request("POST", this.dbPath(`/collections/${collection}/records/batch`), operations);
126
+ return res.data;
127
+ },
128
+ paginate: async (collection, options) => {
129
+ const perPage = options.perPage ?? 50;
130
+ const params = new URLSearchParams();
131
+ params.set("page", String(options.page));
132
+ params.set("per_page", String(perPage));
133
+ if (options.sort)
134
+ params.set("sort", options.sort);
135
+ if (options.direction)
136
+ params.set("direction", options.direction);
137
+ if (options.filter) {
138
+ for (const [k, v] of Object.entries(options.filter)) {
139
+ if (v === null || v === undefined)
140
+ continue;
141
+ if (typeof v === "object" && !Array.isArray(v)) {
142
+ throw new BoltstoreError(400, "INVALID_FILTER", `Filter value for "${k}" must be a scalar or array.`);
143
+ }
144
+ params.set(k, Array.isArray(v) ? v.join(",") : String(v));
145
+ }
146
+ }
147
+ const qs = params.toString();
148
+ const path = this.dbPath(`/collections/${collection}/records`) + (qs ? `?${qs}` : "");
149
+ const res = await this.request("GET", path);
150
+ const meta = res.meta ?? {};
151
+ return {
152
+ data: res.data ?? [],
153
+ meta: {
154
+ page: meta.page ?? options.page,
155
+ per_page: meta.per_page ?? perPage,
156
+ total: meta.total ?? (res.data?.length ?? 0),
157
+ total_pages: meta.total_pages ?? 1,
158
+ },
159
+ };
160
+ },
161
+ listAll: async (collection, options) => {
162
+ const perPage = options?.perPage ?? 100;
163
+ const maxPages = 1000;
164
+ const all = [];
165
+ let page = 1;
166
+ while (true) {
167
+ const result = await this.records.paginate(collection, { ...options, page, perPage });
168
+ all.push(...result.data);
169
+ if (page >= result.meta.total_pages)
170
+ break;
171
+ if (page >= maxPages)
172
+ throw new BoltstoreError(400, "TOO_MANY_PAGES", `listAll stopped after ${maxPages} pages.`);
173
+ page++;
174
+ }
175
+ return all;
176
+ },
177
+ };
178
+ this.baseUrl = config.baseUrl.replace(/\/$/, "");
179
+ this.database = config.database;
180
+ this.token = config.token;
181
+ this.refreshToken = config.refreshToken;
182
+ }
183
+ collection(name) {
184
+ return new TypedCollectionImpl(this, name, (path) => this.dbPath(path));
185
+ }
186
+ setToken(token) {
187
+ this.token = token;
188
+ }
189
+ getToken() {
190
+ return this.token;
191
+ }
192
+ setRefreshToken(token) {
193
+ this.refreshToken = token;
194
+ }
195
+ getRefreshToken() {
196
+ return this.refreshToken;
197
+ }
198
+ async query(options) {
199
+ const res = await this.request("POST", this.dbPath("/query"), options);
200
+ return { data: res.data ?? [], meta: res.meta ?? {} };
201
+ }
202
+ async request(method, path, body, retries = 1) {
203
+ if (this.refreshToken && this.token) {
204
+ try {
205
+ await this.auth.autoRefresh();
206
+ }
207
+ catch { /* ignore auto-refresh failures */ }
208
+ }
209
+ const headers = {
210
+ "Content-Type": "application/json",
211
+ "Accept": "application/json",
212
+ };
213
+ if (this.token)
214
+ headers["Authorization"] = `Bearer ${this.token}`;
215
+ const init = { method, headers };
216
+ if (body !== undefined)
217
+ init.body = JSON.stringify(body);
218
+ let lastError;
219
+ for (let attempt = 0; attempt <= retries; attempt++) {
220
+ try {
221
+ const response = await globalThis.fetch(`${this.baseUrl}${path}`, init);
222
+ let json;
223
+ const contentType = response.headers.get("Content-Type") || "";
224
+ if (!contentType.includes("application/json")) {
225
+ const text = await response.text();
226
+ throw new BoltstoreError(response.status, "INVALID_RESPONSE", `Expected JSON response, got ${contentType} (status ${response.status}): ${text.slice(0, 200)}`);
227
+ }
228
+ try {
229
+ json = (await response.json());
230
+ }
231
+ catch {
232
+ throw new BoltstoreError(response.status, "PARSE_ERROR", `Failed to parse response from Boltstore server (status ${response.status}).`);
233
+ }
234
+ if (json.error) {
235
+ throw new BoltstoreError(response.status, json.error.code, json.error.message, json.error.details);
236
+ }
237
+ return json;
238
+ }
239
+ catch (err) {
240
+ lastError = err instanceof Error ? err : new Error(String(err));
241
+ const isNetworkError = lastError.message.includes("fetch") || lastError.message.includes("network");
242
+ if (attempt < retries && isNetworkError) {
243
+ await new Promise((r) => setTimeout(r, 500 * (attempt + 1)));
244
+ continue;
245
+ }
246
+ break;
247
+ }
248
+ }
249
+ if (lastError instanceof BoltstoreError)
250
+ throw lastError;
251
+ throw new BoltstoreError(0, "NETWORK_ERROR", lastError?.message || "Network request failed");
252
+ }
253
+ dbPath(path) {
254
+ if (this.database)
255
+ return `/api/${this.database}${path}`;
256
+ return `/api${path}`;
257
+ }
258
+ buildListPath(collection, options) {
259
+ const params = new URLSearchParams();
260
+ if (options?.sort)
261
+ params.set("sort", options.sort);
262
+ if (options?.direction)
263
+ params.set("direction", options.direction);
264
+ if (options?.limit !== undefined)
265
+ params.set("limit", String(options.limit));
266
+ if (options?.offset !== undefined)
267
+ params.set("offset", String(options.offset));
268
+ if (options?.page !== undefined)
269
+ params.set("page", String(options.page));
270
+ if (options?.perPage !== undefined)
271
+ params.set("per_page", String(options.perPage));
272
+ if (options?.fields)
273
+ params.set("fields", options.fields.join(","));
274
+ if (options?.expand)
275
+ params.set("expand", options.expand.join(","));
276
+ if (options?.filter) {
277
+ for (const [k, v] of Object.entries(options.filter)) {
278
+ if (v === null || v === undefined)
279
+ continue;
280
+ if (typeof v === "object" && !Array.isArray(v))
281
+ continue;
282
+ params.set(k, Array.isArray(v) ? v.join(",") : String(v));
283
+ }
284
+ }
285
+ const qs = params.toString();
286
+ return this.dbPath(`/collections/${collection}/records`) + (qs ? `?${qs}` : "");
287
+ }
288
+ }
289
+ export default BoltstoreClient;
290
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare class BoltstoreError extends Error {
2
+ status: number;
3
+ code: string;
4
+ details?: unknown;
5
+ constructor(status: number, code: string, message: string, details?: unknown);
6
+ }
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEN,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAO7E"}
package/dist/errors.js ADDED
@@ -0,0 +1,10 @@
1
+ export class BoltstoreError extends Error {
2
+ constructor(status, code, message, details) {
3
+ super(message);
4
+ this.name = "BoltstoreError";
5
+ this.status = status;
6
+ this.code = code;
7
+ this.details = details;
8
+ }
9
+ }
10
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAKvC,YAAY,MAAc,EAAE,IAAY,EAAE,OAAe,EAAE,OAAiB;QAC1E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @boltstore/client — JavaScript/TypeScript SDK for Boltstore.
3
+ *
4
+ * Zero-dependency client for browser, Node.js, React Native, and Deno.
5
+ * Provides type-safe access to Boltstore's non-admin REST API.
6
+ *
7
+ * @module @boltstore/client
8
+ */
9
+ export { BoltstoreClient, BoltstoreError, TypedCollectionImpl, type ClientConfig, type PaginatedResult, type TypedRecord, type TypedCollection, type PaginateOptions, type TokenPair, type UserProfile, type OAuthProvider, type HealthCheck, } from "./client";
10
+ export type { TypedBatchOperation } from "./types";
11
+ export type { ApiResponse, CollectionInfo, DatabaseInfo, BoltstoreRecord, ColumnDefinition, ColumnType, ListOptions, BatchOperation, BatchResult, QueryOptions, Filter, FilterCondition, FilterGroup, FilterOperator, SortSpec, PaginationMeta, } from "@boltstore/utils";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,YAAY,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,MAAM,EACN,eAAe,EACf,WAAW,EACX,cAAc,EACd,QAAQ,EACR,cAAc,GACf,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @boltstore/client — JavaScript/TypeScript SDK for Boltstore.
3
+ *
4
+ * Zero-dependency client for browser, Node.js, React Native, and Deno.
5
+ * Provides type-safe access to Boltstore's non-admin REST API.
6
+ *
7
+ * @module @boltstore/client
8
+ */
9
+ export { BoltstoreClient, BoltstoreError, TypedCollectionImpl, } from "./client";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,eAAe,EACf,cAAc,EACd,mBAAmB,GAUpB,MAAM,UAAU,CAAC"}
package/dist/jwt.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export declare function decodeJwtPayload(token: string): {
2
+ exp?: number;
3
+ [key: string]: unknown;
4
+ } | null;
5
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,IAAI,CAS/F"}