@xylex-group/athena 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +41 -1
- package/dist/index.d.mts +33 -6
- package/dist/index.d.ts +33 -6
- package/dist/index.js +196 -41
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +196 -41
- package/dist/index.mjs.map +1 -1
- package/dist/react.d.mts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js.map +1 -1
- package/dist/react.mjs.map +1 -1
- package/dist/{types-DFvltfTX.d.mts → types-DzCf3v76.d.mts} +22 -5
- package/dist/{types-DFvltfTX.d.ts → types-DzCf3v76.d.ts} +22 -5
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -117,6 +117,7 @@ function createAthenaGatewayClient(config = {}) {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
// src/supabase.ts
|
|
120
|
+
var DEFAULT_COLUMNS = "*";
|
|
120
121
|
function formatResult(response) {
|
|
121
122
|
return {
|
|
122
123
|
data: response.data ?? null,
|
|
@@ -125,25 +126,83 @@ function formatResult(response) {
|
|
|
125
126
|
raw: response.raw
|
|
126
127
|
};
|
|
127
128
|
}
|
|
128
|
-
function
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
function buildCondition(column, value) {
|
|
129
|
+
function toSingleResult(response) {
|
|
130
|
+
const payload = response.data;
|
|
131
|
+
const singleData = Array.isArray(payload) ? payload.length ? payload[0] : null : payload ?? null;
|
|
132
132
|
return {
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
...response,
|
|
134
|
+
data: singleData
|
|
135
135
|
};
|
|
136
136
|
}
|
|
137
|
+
function mergeOptions(...options) {
|
|
138
|
+
return options.reduce((acc, next) => {
|
|
139
|
+
if (!next) return acc;
|
|
140
|
+
return { ...acc, ...next };
|
|
141
|
+
}, void 0);
|
|
142
|
+
}
|
|
143
|
+
function createMutationQuery(executor, defaultColumns = DEFAULT_COLUMNS) {
|
|
144
|
+
let selectedColumns = defaultColumns;
|
|
145
|
+
let selectedOptions;
|
|
146
|
+
let promise = null;
|
|
147
|
+
const run = (columns, options) => {
|
|
148
|
+
const payloadColumns = columns ?? selectedColumns;
|
|
149
|
+
const payloadOptions = options ?? selectedOptions;
|
|
150
|
+
if (!promise) {
|
|
151
|
+
promise = executor(payloadColumns, payloadOptions);
|
|
152
|
+
}
|
|
153
|
+
return promise;
|
|
154
|
+
};
|
|
155
|
+
const mutationQuery = {
|
|
156
|
+
select(columns = selectedColumns, options) {
|
|
157
|
+
selectedColumns = columns;
|
|
158
|
+
selectedOptions = options ?? selectedOptions;
|
|
159
|
+
return run(columns, options);
|
|
160
|
+
},
|
|
161
|
+
returning(columns = selectedColumns, options) {
|
|
162
|
+
return mutationQuery.select(columns, options);
|
|
163
|
+
},
|
|
164
|
+
single(columns = selectedColumns, options) {
|
|
165
|
+
selectedColumns = columns;
|
|
166
|
+
selectedOptions = options ?? selectedOptions;
|
|
167
|
+
return run(columns, options).then(toSingleResult);
|
|
168
|
+
},
|
|
169
|
+
maybeSingle(columns = selectedColumns, options) {
|
|
170
|
+
return mutationQuery.single(columns, options);
|
|
171
|
+
},
|
|
172
|
+
then(onfulfilled, onrejected) {
|
|
173
|
+
return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected);
|
|
174
|
+
},
|
|
175
|
+
catch(onrejected) {
|
|
176
|
+
return run(selectedColumns, selectedOptions).catch(onrejected);
|
|
177
|
+
},
|
|
178
|
+
finally(onfinally) {
|
|
179
|
+
return run(selectedColumns, selectedOptions).finally(onfinally);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
return mutationQuery;
|
|
183
|
+
}
|
|
137
184
|
function getResourceId(state) {
|
|
138
185
|
const candidate = state.conditions.find(
|
|
139
|
-
(condition) => condition.
|
|
186
|
+
(condition) => condition.operator === "eq" && (condition.column === "resource_id" || condition.column === "id")
|
|
140
187
|
);
|
|
141
|
-
return candidate?.
|
|
188
|
+
return candidate?.value?.toString();
|
|
189
|
+
}
|
|
190
|
+
function stringifyFilterValue(value) {
|
|
191
|
+
if (Array.isArray(value)) {
|
|
192
|
+
return value.join(",");
|
|
193
|
+
}
|
|
194
|
+
return String(value);
|
|
142
195
|
}
|
|
143
196
|
function createTableBuilder(tableName, client) {
|
|
144
197
|
const state = {
|
|
145
198
|
conditions: []
|
|
146
199
|
};
|
|
200
|
+
const addCondition = (operator, column, value) => {
|
|
201
|
+
const condition = { operator };
|
|
202
|
+
if (column) condition.column = column;
|
|
203
|
+
if (value !== void 0) condition.value = value;
|
|
204
|
+
state.conditions.push(condition);
|
|
205
|
+
};
|
|
147
206
|
const builder = {
|
|
148
207
|
reset() {
|
|
149
208
|
state.conditions = [];
|
|
@@ -151,6 +210,11 @@ function createTableBuilder(tableName, client) {
|
|
|
151
210
|
state.offset = void 0;
|
|
152
211
|
return builder;
|
|
153
212
|
},
|
|
213
|
+
range(from, to) {
|
|
214
|
+
state.offset = from;
|
|
215
|
+
state.limit = to - from + 1;
|
|
216
|
+
return builder;
|
|
217
|
+
},
|
|
154
218
|
limit(count) {
|
|
155
219
|
state.limit = count;
|
|
156
220
|
return builder;
|
|
@@ -161,15 +225,71 @@ function createTableBuilder(tableName, client) {
|
|
|
161
225
|
},
|
|
162
226
|
match(filters) {
|
|
163
227
|
Object.entries(filters).forEach(([column, value]) => {
|
|
164
|
-
|
|
228
|
+
addCondition("eq", column, value);
|
|
165
229
|
});
|
|
166
230
|
return builder;
|
|
167
231
|
},
|
|
168
232
|
eq(column, value) {
|
|
169
|
-
|
|
233
|
+
addCondition("eq", column, value);
|
|
234
|
+
return builder;
|
|
235
|
+
},
|
|
236
|
+
gt(column, value) {
|
|
237
|
+
addCondition("gt", column, value);
|
|
238
|
+
return builder;
|
|
239
|
+
},
|
|
240
|
+
gte(column, value) {
|
|
241
|
+
addCondition("gte", column, value);
|
|
242
|
+
return builder;
|
|
243
|
+
},
|
|
244
|
+
lt(column, value) {
|
|
245
|
+
addCondition("lt", column, value);
|
|
246
|
+
return builder;
|
|
247
|
+
},
|
|
248
|
+
lte(column, value) {
|
|
249
|
+
addCondition("lte", column, value);
|
|
250
|
+
return builder;
|
|
251
|
+
},
|
|
252
|
+
neq(column, value) {
|
|
253
|
+
addCondition("neq", column, value);
|
|
254
|
+
return builder;
|
|
255
|
+
},
|
|
256
|
+
like(column, value) {
|
|
257
|
+
addCondition("like", column, value);
|
|
170
258
|
return builder;
|
|
171
259
|
},
|
|
172
|
-
|
|
260
|
+
ilike(column, value) {
|
|
261
|
+
addCondition("ilike", column, value);
|
|
262
|
+
return builder;
|
|
263
|
+
},
|
|
264
|
+
is(column, value) {
|
|
265
|
+
addCondition("is", column, value);
|
|
266
|
+
return builder;
|
|
267
|
+
},
|
|
268
|
+
in(column, values) {
|
|
269
|
+
addCondition("in", column, values);
|
|
270
|
+
return builder;
|
|
271
|
+
},
|
|
272
|
+
contains(column, values) {
|
|
273
|
+
addCondition("contains", column, values);
|
|
274
|
+
return builder;
|
|
275
|
+
},
|
|
276
|
+
containedBy(column, values) {
|
|
277
|
+
addCondition("containedBy", column, values);
|
|
278
|
+
return builder;
|
|
279
|
+
},
|
|
280
|
+
not(columnOrExpression, operator, value) {
|
|
281
|
+
if (operator && value !== void 0) {
|
|
282
|
+
addCondition("not", void 0, `${columnOrExpression}.${operator}.${stringifyFilterValue(value)}`);
|
|
283
|
+
} else {
|
|
284
|
+
addCondition("not", void 0, columnOrExpression);
|
|
285
|
+
}
|
|
286
|
+
return builder;
|
|
287
|
+
},
|
|
288
|
+
or(expression) {
|
|
289
|
+
addCondition("or", void 0, expression);
|
|
290
|
+
return builder;
|
|
291
|
+
},
|
|
292
|
+
async select(columns = DEFAULT_COLUMNS, options) {
|
|
173
293
|
const payload = {
|
|
174
294
|
table_name: tableName,
|
|
175
295
|
columns,
|
|
@@ -181,50 +301,85 @@ function createTableBuilder(tableName, client) {
|
|
|
181
301
|
const response = await client.fetchGateway(payload, options);
|
|
182
302
|
return formatResult(response);
|
|
183
303
|
},
|
|
184
|
-
|
|
185
|
-
const
|
|
186
|
-
|
|
304
|
+
insert(values, options) {
|
|
305
|
+
const executeInsert = async (columns, selectOptions) => {
|
|
306
|
+
const mergedOptions = mergeOptions(options, selectOptions);
|
|
307
|
+
const payload = {
|
|
187
308
|
table_name: tableName,
|
|
188
309
|
insert_body: values
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
310
|
+
};
|
|
311
|
+
if (columns) payload.columns = columns;
|
|
312
|
+
if (mergedOptions?.count) payload.count = mergedOptions.count;
|
|
313
|
+
if (mergedOptions?.head) payload.head = mergedOptions.head;
|
|
314
|
+
if (mergedOptions?.defaultToNull !== void 0) {
|
|
315
|
+
payload.default_to_null = mergedOptions.defaultToNull;
|
|
316
|
+
}
|
|
317
|
+
const response = await client.insertGateway(payload, mergedOptions);
|
|
318
|
+
return formatResult(response);
|
|
319
|
+
};
|
|
320
|
+
return createMutationQuery(executeInsert);
|
|
193
321
|
},
|
|
194
|
-
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
322
|
+
upsert(values, options) {
|
|
323
|
+
const executeUpsert = async (columns, selectOptions) => {
|
|
324
|
+
const mergedOptions = mergeOptions(options, selectOptions);
|
|
325
|
+
const payload = {
|
|
326
|
+
table_name: tableName,
|
|
327
|
+
insert_body: values,
|
|
328
|
+
update_body: options?.updateBody ? options.updateBody : void 0
|
|
329
|
+
};
|
|
330
|
+
if (columns) payload.columns = columns;
|
|
331
|
+
if (options?.onConflict) payload.on_conflict = options.onConflict;
|
|
332
|
+
if (mergedOptions?.count) payload.count = mergedOptions.count;
|
|
333
|
+
if (mergedOptions?.head) payload.head = mergedOptions.head;
|
|
334
|
+
if (mergedOptions?.defaultToNull !== void 0) {
|
|
335
|
+
payload.default_to_null = mergedOptions.defaultToNull;
|
|
336
|
+
}
|
|
337
|
+
const response = await client.insertGateway(payload, mergedOptions);
|
|
338
|
+
return formatResult(response);
|
|
200
339
|
};
|
|
201
|
-
|
|
202
|
-
|
|
340
|
+
return createMutationQuery(executeUpsert);
|
|
341
|
+
},
|
|
342
|
+
update(values, options) {
|
|
343
|
+
const filters = state.conditions.length ? [...state.conditions] : void 0;
|
|
344
|
+
const executeUpdate = async (columns, selectOptions) => {
|
|
345
|
+
const mergedOptions = mergeOptions(options, selectOptions);
|
|
346
|
+
const payload = {
|
|
347
|
+
table_name: tableName,
|
|
348
|
+
update_body: values,
|
|
349
|
+
conditions: filters,
|
|
350
|
+
columns,
|
|
351
|
+
strip_nulls: mergedOptions?.stripNulls ?? true
|
|
352
|
+
};
|
|
353
|
+
const response = await client.updateGateway(payload, mergedOptions);
|
|
354
|
+
return formatResult(response);
|
|
355
|
+
};
|
|
356
|
+
return createMutationQuery(executeUpdate);
|
|
203
357
|
},
|
|
204
|
-
|
|
358
|
+
delete(options) {
|
|
359
|
+
const filters = state.conditions.length ? [...state.conditions] : void 0;
|
|
205
360
|
const resourceId = options?.resourceId ?? getResourceId(state);
|
|
206
|
-
if (!resourceId) {
|
|
361
|
+
if (!resourceId && !filters?.length) {
|
|
207
362
|
throw new Error('delete requires a resource_id either via eq("resource_id", ...) or options.resourceId');
|
|
208
363
|
}
|
|
209
|
-
const
|
|
210
|
-
|
|
364
|
+
const executeDelete = async (columns, selectOptions) => {
|
|
365
|
+
const mergedOptions = mergeOptions(options, selectOptions);
|
|
366
|
+
const payload = {
|
|
211
367
|
table_name: tableName,
|
|
212
|
-
resource_id: resourceId
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
368
|
+
resource_id: resourceId,
|
|
369
|
+
conditions: filters,
|
|
370
|
+
columns
|
|
371
|
+
};
|
|
372
|
+
const response = await client.deleteGateway(payload, mergedOptions);
|
|
373
|
+
return formatResult(response);
|
|
374
|
+
};
|
|
375
|
+
return createMutationQuery(executeDelete);
|
|
217
376
|
},
|
|
218
377
|
async single(columns, options) {
|
|
219
378
|
const response = await builder.select(columns, options);
|
|
220
|
-
|
|
221
|
-
return {
|
|
222
|
-
...response,
|
|
223
|
-
data: rows[0] ?? null
|
|
224
|
-
};
|
|
379
|
+
return toSingleResult(response);
|
|
225
380
|
},
|
|
226
381
|
async maybeSingle(columns, options) {
|
|
227
|
-
return builder.single(columns
|
|
382
|
+
return builder.single(columns, options);
|
|
228
383
|
}
|
|
229
384
|
};
|
|
230
385
|
return builder;
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gateway/client.ts","../src/supabase.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type {\r\n AthenaGatewayBaseOptions,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayMethod,\r\n AthenaGatewayResponse,\r\n} from './types.js'\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaInsertPayload,\r\n AthenaUpdatePayload,\r\n} from './types.js'\r\n\r\nconst DEFAULT_BASE_URL = 'https://athena-db.com'\r\nconst DEFAULT_CLIENT = 'railway_direct'\r\n\r\nfunction parseResponseText(text: string) {\r\n if (!text) return null\r\n try {\r\n return JSON.parse(text)\r\n } catch {\r\n return text\r\n }\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null) {\r\n return value ? value : undefined\r\n}\r\n\r\nfunction buildHeaders(\r\n config: AthenaGatewayBaseOptions,\r\n options?: AthenaGatewayCallOptions,\r\n): Record<string, string> {\r\n const mergedStripNulls = options?.stripNulls ?? config.stripNulls ?? true\r\n const finalClient = options?.client ?? config.client ?? DEFAULT_CLIENT\r\n const finalApiKey = options?.apiKey ?? config.apiKey\r\n const finalSupabaseUrl = options?.supabaseUrl ?? config.supabaseUrl\r\n const finalSupabaseKey = options?.supabaseKey ?? config.supabaseKey\r\n const finalPublishEvent = options?.publishEvent ?? config.publishEvent\r\n const extraHeaders = {\r\n ...(config.headers ?? {}),\r\n ...(options?.headers ?? {}),\r\n }\r\n\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n }\r\n\r\n if (options?.userId ?? config.userId) {\r\n headers['X-User-Id'] = options?.userId ?? config.userId ?? ''\r\n }\r\n\r\n if (options?.companyId ?? config.companyId) {\r\n headers['X-Company-Id'] = options?.companyId ?? config.companyId ?? ''\r\n }\r\n\r\n if (options?.organizationId ?? config.organizationId) {\r\n headers['X-Organization-Id'] = options?.organizationId ?? config.organizationId ?? ''\r\n }\r\n\r\n if (finalClient) {\r\n headers['X-Athena-Client'] = finalClient\r\n }\r\n\r\n if (typeof mergedStripNulls === 'boolean') {\r\n headers['X-Strip-Nulls'] = mergedStripNulls ? 'true' : 'false'\r\n }\r\n\r\n if (finalPublishEvent) {\r\n headers['X-Publish-Event'] = finalPublishEvent\r\n }\r\n\r\n if (finalApiKey) {\r\n headers['apikey'] = finalApiKey\r\n headers['x-api-key'] = headers['x-api-key'] ?? finalApiKey\r\n }\r\n\r\n if (finalSupabaseUrl) {\r\n headers['x-supabase-url'] = finalSupabaseUrl\r\n }\r\n\r\n if (finalSupabaseKey) {\r\n headers['x-supabase-key'] = finalSupabaseKey\r\n }\r\n\r\n Object.entries(extraHeaders).forEach(([key, value]) => {\r\n const normalized = normalizeHeaderValue(value)\r\n if (normalized) {\r\n headers[key] = normalized\r\n }\r\n })\r\n\r\n return headers\r\n}\r\n\r\nasync function callAthena<T>(\r\n config: AthenaGatewayBaseOptions,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n payload: unknown,\r\n options?: AthenaGatewayCallOptions,\r\n): Promise<AthenaGatewayResponse<T>> {\r\n const baseUrl = (options?.baseUrl ?? config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '')\r\n const url = `${baseUrl}${endpoint}`\r\n const headers = buildHeaders(config, options)\r\n\r\n try {\r\n const response = await fetch(url, {\r\n method,\r\n headers,\r\n body: JSON.stringify(payload),\r\n })\r\n\r\n const rawText = await response.text()\r\n const parsed = parseResponseText(rawText ?? '')\r\n const parsedPayload = parsed as Record<string, unknown> | null\r\n const parsedError =\r\n parsedPayload && typeof parsedPayload === 'object'\r\n ? ((parsedPayload.error as string | undefined) ?? (parsedPayload.message as string | undefined))\r\n : undefined\r\n const hasError = typeof parsedError === 'string' && parsedError.length > 0 ? parsedError : undefined\r\n\r\n return {\r\n ok: response.ok,\r\n status: response.status,\r\n data: (parsed as T) ?? null,\r\n error: hasError,\r\n raw: parsed,\r\n }\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError)\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: message,\r\n raw: null,\r\n }\r\n }\r\n}\r\n\r\nexport interface AthenaGatewayClient {\r\n baseUrl: string\r\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>\r\n fetchGateway<T>(payload: AthenaFetchPayload, options?: AthenaGatewayCallOptions): Promise<AthenaGatewayResponse<T>>\r\n insertGateway<T>(payload: AthenaInsertPayload, options?: AthenaGatewayCallOptions): Promise<AthenaGatewayResponse<T>>\r\n updateGateway<T>(payload: AthenaUpdatePayload, options?: AthenaGatewayCallOptions): Promise<AthenaGatewayResponse<T>>\r\n deleteGateway<T>(payload: AthenaDeletePayload, options?: AthenaGatewayCallOptions): Promise<AthenaGatewayResponse<T>>\r\n}\r\n\r\nexport function createAthenaGatewayClient(config: AthenaGatewayBaseOptions = {}): AthenaGatewayClient {\r\n return {\r\n baseUrl: (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, ''),\r\n buildHeaders(options) {\r\n return buildHeaders(config, options)\r\n },\r\n fetchGateway(payload, options) {\r\n return callAthena(config, '/gateway/fetch', 'POST', payload, options)\r\n },\r\n insertGateway(payload, options) {\r\n return callAthena(config, '/gateway/insert', 'PUT', payload, options)\r\n },\r\n updateGateway(payload, options) {\r\n return callAthena(config, '/gateway/update', 'POST', payload, options)\r\n },\r\n deleteGateway(payload, options) {\r\n return callAthena(config, '/gateway/delete', 'DELETE', payload, options)\r\n },\r\n }\r\n}\r\n","import type {\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayCondition,\r\n AthenaGatewayResponse,\r\n} from './gateway/types.js'\r\nimport { createAthenaGatewayClient } from './gateway/client.js'\r\n\r\ntype AthenaConditionValue = string | number | boolean | null\r\n\r\nexport interface SupabaseResult<T> {\r\n data: T | null\r\n error: string | null\r\n status: number\r\n raw: unknown\r\n}\r\n\r\ntype TableBuilderState = {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n}\r\n\r\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): SupabaseResult<T> {\r\n return {\r\n data: response.data ?? null,\r\n error: response.error ?? null,\r\n status: response.status,\r\n raw: response.raw,\r\n }\r\n}\r\n\r\nfunction ensureConditionValue(value: AthenaConditionValue): AthenaConditionValue {\r\n return value\r\n}\r\n\r\nfunction buildCondition(column: string, value: AthenaConditionValue): AthenaGatewayCondition {\r\n return {\r\n eq_column: column,\r\n eq_value: ensureConditionValue(value),\r\n }\r\n}\r\n\r\nexport interface TableQueryBuilder<Row> {\r\n select<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<SupabaseResult<T>>\r\n insert(values: Row | Row[], options?: AthenaGatewayCallOptions): Promise<SupabaseResult<Row | Row[]>>\r\n update(values: Partial<Row>, options?: AthenaGatewayCallOptions): Promise<SupabaseResult<Row[]>>\r\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }): Promise<SupabaseResult<null>>\r\n eq(column: string, value: AthenaConditionValue): TableQueryBuilder<Row>\r\n match(filters: Record<string, AthenaConditionValue>): TableQueryBuilder<Row>\r\n limit(count: number): TableQueryBuilder<Row>\r\n offset(count: number): TableQueryBuilder<Row>\r\n single<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<SupabaseResult<T | null>>\r\n maybeSingle<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<SupabaseResult<T | null>>\r\n reset(): TableQueryBuilder<Row>\r\n}\r\n\r\nfunction getResourceId(state: TableBuilderState): string | undefined {\r\n const candidate = state.conditions.find(\r\n condition => condition.eq_column === 'resource_id' || condition.eq_column === 'id',\r\n )\r\n return candidate?.eq_value?.toString()\r\n}\r\n\r\nfunction createTableBuilder<Row>(\r\n tableName: string,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n): TableQueryBuilder<Row> {\r\n const state: TableBuilderState = {\r\n conditions: [],\r\n }\r\n\r\n const builder: TableQueryBuilder<Row> = {\r\n reset() {\r\n state.conditions = []\r\n state.limit = undefined\r\n state.offset = undefined\r\n return builder\r\n },\r\n limit(count: number) {\r\n state.limit = count\r\n return builder\r\n },\r\n offset(count: number) {\r\n state.offset = count\r\n return builder\r\n },\r\n match(filters: Record<string, AthenaConditionValue>) {\r\n Object.entries(filters).forEach(([column, value]) => {\r\n state.conditions.push(buildCondition(column, value))\r\n })\r\n return builder\r\n },\r\n eq(column: string, value: AthenaConditionValue) {\r\n state.conditions.push(buildCondition(column, value))\r\n return builder\r\n },\r\n async select<T = Row>(columns: string | string[] = '*', options?: AthenaGatewayCallOptions) {\r\n const payload = {\r\n table_name: tableName,\r\n columns,\r\n conditions: state.conditions.length ? [...state.conditions] : undefined,\r\n limit: state.limit,\r\n offset: state.offset,\r\n strip_nulls: options?.stripNulls ?? true,\r\n }\r\n const response = await client.fetchGateway<T>(payload, options)\r\n return formatResult(response)\r\n },\r\n async insert(values: Row | Row[], options?: AthenaGatewayCallOptions) {\r\n const response = await client.insertGateway<Row | Row[]>(\r\n {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown>,\r\n },\r\n options,\r\n )\r\n return formatResult(response)\r\n },\r\n async update(values: Partial<Row>, options?: AthenaGatewayCallOptions) {\r\n const payload = {\r\n table_name: tableName,\r\n update_body: values,\r\n conditions: state.conditions.length ? [...state.conditions] : undefined,\r\n strip_nulls: options?.stripNulls ?? true,\r\n }\r\n const response = await client.updateGateway<Row[]>(payload, options)\r\n return formatResult(response)\r\n },\r\n async delete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\r\n const resourceId = options?.resourceId ?? getResourceId(state)\r\n if (!resourceId) {\r\n throw new Error('delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId')\r\n }\r\n const response = await client.deleteGateway<null>(\r\n {\r\n table_name: tableName,\r\n resource_id: resourceId,\r\n },\r\n options,\r\n )\r\n return formatResult(response)\r\n },\r\n async single<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions) {\r\n const response = await builder.select<T[]>(columns, options)\r\n const rows = Array.isArray(response.data) ? response.data : response.data ? [response.data] : []\r\n return {\r\n ...response,\r\n data: (rows[0] ?? null) as unknown as T | null,\r\n }\r\n },\r\n async maybeSingle<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions) {\r\n return builder.single<T | null>(columns ?? '*', options)\r\n },\r\n }\r\n\r\n return builder\r\n}\r\n\r\nexport interface SupabaseClient {\r\n from<Row = unknown>(table: string): TableQueryBuilder<Row>\r\n}\r\n\r\nexport function createClient(\r\n url: string,\r\n apiKey: string,\r\n options?: AthenaGatewayCallOptions,\r\n): SupabaseClient {\r\n const { baseUrl: optBaseUrl, apiKey: optApiKey, ...restOptions } = options ?? {}\r\n const client = createAthenaGatewayClient({\r\n baseUrl: optBaseUrl ?? url,\r\n apiKey: optApiKey ?? apiKey,\r\n ...restOptions,\r\n })\r\n\r\n return {\r\n from<Row = unknown>(table: string) {\r\n return createTableBuilder<Row>(table, client)\r\n },\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/gateway/client.ts","../src/supabase.ts"],"names":[],"mappings":";AAcA,IAAM,gBAAA,GAAmB,uBAAA;AACzB,IAAM,cAAA,GAAiB,gBAAA;AAEvB,SAAS,kBAAkB,IAAA,EAAc;AACvC,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,qBAAqB,KAAA,EAAuB;AACnD,EAAA,OAAO,QAAQ,KAAA,GAAQ,MAAA;AACzB;AAEA,SAAS,YAAA,CACP,QACA,OAAA,EACwB;AACxB,EAAA,MAAM,gBAAA,GAAmB,OAAA,EAAS,UAAA,IAAc,MAAA,CAAO,UAAA,IAAc,IAAA;AACrE,EAAA,MAAM,WAAA,GAAc,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA,IAAU,cAAA;AACxD,EAAA,MAAM,WAAA,GAAc,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA;AAC9C,EAAA,MAAM,gBAAA,GAAmB,OAAA,EAAS,WAAA,IAAe,MAAA,CAAO,WAAA;AACxD,EAAA,MAAM,gBAAA,GAAmB,OAAA,EAAS,WAAA,IAAe,MAAA,CAAO,WAAA;AACxD,EAAA,MAAM,iBAAA,GAAoB,OAAA,EAAS,YAAA,IAAgB,MAAA,CAAO,YAAA;AAC1D,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,IACvB,GAAI,OAAA,EAAS,OAAA,IAAW;AAAC,GAC3B;AAEA,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,IAAI,OAAA,EAAS,MAAA,IAAU,MAAA,CAAO,MAAA,EAAQ;AACpC,IAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,OAAA,EAAS,MAAA,IAAU,OAAO,MAAA,IAAU,EAAA;AAAA,EAC7D;AAEA,EAAA,IAAI,OAAA,EAAS,SAAA,IAAa,MAAA,CAAO,SAAA,EAAW;AAC1C,IAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,OAAA,EAAS,SAAA,IAAa,OAAO,SAAA,IAAa,EAAA;AAAA,EACtE;AAEA,EAAA,IAAI,OAAA,EAAS,cAAA,IAAkB,MAAA,CAAO,cAAA,EAAgB;AACpD,IAAA,OAAA,CAAQ,mBAAmB,CAAA,GACzB,OAAA,EAAS,cAAA,IAAkB,OAAO,cAAA,IAAkB,EAAA;AAAA,EACxD;AAEA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAA,CAAQ,iBAAiB,CAAA,GAAI,WAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,OAAO,qBAAqB,SAAA,EAAW;AACzC,IAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,gBAAA,GAAmB,MAAA,GAAS,OAAA;AAAA,EACzD;AAEA,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,OAAA,CAAQ,iBAAiB,CAAA,GAAI,iBAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAA,CAAQ,QAAQ,CAAA,GAAI,WAAA;AACpB,IAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,OAAA,CAAQ,WAAW,CAAA,IAAK,WAAA;AAAA,EACjD;AAEA,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,OAAA,CAAQ,gBAAgB,CAAA,GAAI,gBAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,OAAA,CAAQ,gBAAgB,CAAA,GAAI,gBAAA;AAAA,EAC9B;AAEA,EAAA,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACrD,IAAA,MAAM,UAAA,GAAa,qBAAqB,KAAK,CAAA;AAC7C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,UAAA;AAAA,IACjB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEA,eAAe,UAAA,CACb,MAAA,EACA,QAAA,EACA,MAAA,EACA,SACA,OAAA,EACmC;AACnC,EAAA,MAAM,OAAA,GAAA,CACJ,SAAS,OAAA,IACT,MAAA,CAAO,WACP,gBAAA,EACA,OAAA,CAAQ,OAAO,EAAE,CAAA;AACnB,EAAA,MAAM,GAAA,GAAM,CAAA,EAAG,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA;AACjC,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,MAAA,EAAQ,OAAO,CAAA;AAE5C,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAChC,MAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,OAAA,IAAW,EAAE,CAAA;AAC9C,IAAA,MAAM,aAAA,GAAgB,MAAA;AACtB,IAAA,MAAM,WAAA,GACJ,iBAAiB,OAAO,aAAA,KAAkB,WACpC,aAAA,CAAc,KAAA,IACf,cAAc,OAAA,GACf,KAAA,CAAA;AACN,IAAA,MAAM,WACJ,OAAO,WAAA,KAAgB,YAAY,WAAA,CAAY,MAAA,GAAS,IACpD,WAAA,GACA,KAAA,CAAA;AAEN,IAAA,OAAO;AAAA,MACL,IAAI,QAAA,CAAS,EAAA;AAAA,MACb,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,MAAO,MAAA,IAAgB,IAAA;AAAA,MACvB,KAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAK;AAAA,KACP;AAAA,EACF,SAAS,SAAA,EAAW;AAClB,IAAA,MAAM,UACJ,SAAA,YAAqB,KAAA,GAAQ,SAAA,CAAU,OAAA,GAAU,OAAO,SAAS,CAAA;AACnE,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,CAAA;AAAA,MACR,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACF;AAuBO,SAAS,yBAAA,CACd,MAAA,GAAmC,EAAC,EACf;AACrB,EAAA,OAAO;AAAA,IACL,UAAU,MAAA,CAAO,OAAA,IAAW,gBAAA,EAAkB,OAAA,CAAQ,OAAO,EAAE,CAAA;AAAA,IAC/D,aAAa,OAAA,EAAS;AACpB,MAAA,OAAO,YAAA,CAAa,QAAQ,OAAO,CAAA;AAAA,IACrC,CAAA;AAAA,IACA,YAAA,CAAa,SAAS,OAAA,EAAS;AAC7B,MAAA,OAAO,UAAA,CAAW,MAAA,EAAQ,gBAAA,EAAkB,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IACtE,CAAA;AAAA,IACA,aAAA,CAAc,SAAS,OAAA,EAAS;AAC9B,MAAA,OAAO,UAAA,CAAW,MAAA,EAAQ,iBAAA,EAAmB,KAAA,EAAO,SAAS,OAAO,CAAA;AAAA,IACtE,CAAA;AAAA,IACA,aAAA,CAAc,SAAS,OAAA,EAAS;AAC9B,MAAA,OAAO,UAAA,CAAW,MAAA,EAAQ,iBAAA,EAAmB,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,IACvE,CAAA;AAAA,IACA,aAAA,CAAc,SAAS,OAAA,EAAS;AAC9B,MAAA,OAAO,UAAA,CAAW,MAAA,EAAQ,iBAAA,EAAmB,QAAA,EAAU,SAAS,OAAO,CAAA;AAAA,IACzE;AAAA,GACF;AACF;;;ACvKA,IAAM,eAAA,GAAkB,GAAA;AAuBxB,SAAS,aAAgB,QAAA,EAAuD;AAC9E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAS,IAAA,IAAQ,IAAA;AAAA,IACvB,KAAA,EAAO,SAAS,KAAA,IAAS,IAAA;AAAA,IACzB,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,KAAK,QAAA,CAAS;AAAA,GAChB;AACF;AAEA,SAAS,eAAuB,QAAA,EAAgF;AAC9G,EAAA,MAAM,UAAU,QAAA,CAAS,IAAA;AACzB,EAAA,MAAM,UAAA,GACJ,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAK,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,CAAC,CAAA,GAAI,IAAA,GAAQ,OAAA,IAAW,IAAA;AAC7E,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,IAAA,EAAM;AAAA,GACR;AACF;AAEA,SAAS,gBAAgB,OAAA,EAA4F;AACnH,EAAA,OAAO,OAAA,CAAQ,MAAA,CAA6C,CAAC,GAAA,EAAK,IAAA,KAAS;AACzE,IAAA,IAAI,CAAC,MAAM,OAAO,GAAA;AAClB,IAAA,OAAO,EAAE,GAAG,GAAA,EAAK,GAAG,IAAA,EAAK;AAAA,EAC3B,GAAG,MAAS,CAAA;AACd;AAEA,SAAS,mBAAA,CACP,QAAA,EAIA,cAAA,GAAoC,eAAA,EACb;AACvB,EAAA,IAAI,eAAA,GAAqC,cAAA;AACzC,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,OAAA,GAAkD,IAAA;AAEtD,EAAA,MAAM,GAAA,GAAM,CAAC,OAAA,EAA6B,OAAA,KAAuC;AAC/E,IAAA,MAAM,iBAAiB,OAAA,IAAW,eAAA;AAClC,IAAA,MAAM,iBAAiB,OAAA,IAAW,eAAA;AAClC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,GAAU,QAAA,CAAS,gBAAgB,cAAc,CAAA;AAAA,IACnD;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,aAAA,GAAuC;AAAA,IAC3C,MAAA,CAAO,OAAA,GAAU,eAAA,EAAiB,OAAA,EAAS;AACzC,MAAA,eAAA,GAAkB,OAAA;AAClB,MAAA,eAAA,GAAkB,OAAA,IAAW,eAAA;AAC7B,MAAA,OAAO,GAAA,CAAI,SAAS,OAAO,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,SAAA,CAAU,OAAA,GAAU,eAAA,EAAiB,OAAA,EAAS;AAC5C,MAAA,OAAO,aAAA,CAAc,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,MAAA,CAAO,OAAA,GAAU,eAAA,EAAiB,OAAA,EAAS;AACzC,MAAA,eAAA,GAAkB,OAAA;AAClB,MAAA,eAAA,GAAkB,OAAA,IAAW,eAAA;AAC7B,MAAA,OAAO,GAAA,CAAI,OAAA,EAAS,OAAO,CAAA,CAAE,KAAK,cAAc,CAAA;AAAA,IAClD,CAAA;AAAA,IACA,WAAA,CAAY,OAAA,GAAU,eAAA,EAAiB,OAAA,EAAS;AAC9C,MAAA,OAAO,aAAA,CAAc,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,IAAA,CAAK,aAAa,UAAA,EAAY;AAC5B,MAAA,OAAO,IAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,IAAA,CAAK,aAAa,UAAU,CAAA;AAAA,IAC3E,CAAA;AAAA,IACA,MAAM,UAAA,EAAY;AAChB,MAAA,OAAO,GAAA,CAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,MAAM,UAAU,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,QAAQ,SAAA,EAAW;AACjB,MAAA,OAAO,GAAA,CAAI,eAAA,EAAiB,eAAe,CAAA,CAAE,QAAQ,SAAS,CAAA;AAAA,IAChE;AAAA,GACF;AAEA,EAAA,OAAO,aAAA;AACT;AAqCA,SAAS,cAAc,KAAA,EAA8C;AACnE,EAAA,MAAM,SAAA,GAAY,MAAM,UAAA,CAAW,IAAA;AAAA,IACjC,CAAA,SAAA,KACE,UAAU,QAAA,KAAa,IAAA,KACtB,UAAU,MAAA,KAAW,aAAA,IAAiB,UAAU,MAAA,KAAW,IAAA;AAAA,GAChE;AACA,EAAA,OAAO,SAAA,EAAW,OAAO,QAAA,EAAS;AACpC;AAEA,SAAS,qBAAqB,KAAA,EAA0E;AACtG,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,kBAAA,CACP,WACA,MAAA,EACwB;AACxB,EAAA,MAAM,KAAA,GAA2B;AAAA,IAC/B,YAAY;AAAC,GACf;AAEA,EAAA,MAAM,YAAA,GAAe,CACnB,QAAA,EACA,MAAA,EACA,KAAA,KACG;AACH,IAAA,MAAM,SAAA,GAAoC,EAAE,QAAA,EAAS;AACrD,IAAA,IAAI,MAAA,YAAkB,MAAA,GAAS,MAAA;AAC/B,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,SAAA,CAAU,KAAA,GAAQ,KAAA;AAC3C,IAAA,KAAA,CAAM,UAAA,CAAW,KAAK,SAAS,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,KAAA,GAAQ;AACN,MAAA,KAAA,CAAM,aAAa,EAAC;AACpB,MAAA,KAAA,CAAM,KAAA,GAAQ,MAAA;AACd,MAAA,KAAA,CAAM,MAAA,GAAS,MAAA;AACf,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,MAAM,EAAA,EAAI;AACd,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAK,IAAA,GAAO,CAAA;AAC1B,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,KAAA,EAAO;AACX,MAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,OAAO,KAAA,EAAO;AACZ,MAAA,KAAA,CAAM,MAAA,GAAS,KAAA;AACf,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,OAAA,EAAS;AACb,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,MAAA,EAAQ,KAAK,CAAA,KAAM;AACnD,QAAA,YAAA,CAAa,IAAA,EAAM,QAAQ,KAAK,CAAA;AAAA,MAClC,CAAC,CAAA;AACD,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAQ,KAAA,EAAO;AAChB,MAAA,YAAA,CAAa,IAAA,EAAM,QAAQ,KAAK,CAAA;AAChC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAQ,KAAA,EAAO;AAChB,MAAA,YAAA,CAAa,IAAA,EAAM,QAAQ,KAAK,CAAA;AAChC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,YAAA,CAAa,KAAA,EAAO,QAAQ,KAAK,CAAA;AACjC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAQ,KAAA,EAAO;AAChB,MAAA,YAAA,CAAa,IAAA,EAAM,QAAQ,KAAK,CAAA;AAChC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,YAAA,CAAa,KAAA,EAAO,QAAQ,KAAK,CAAA;AACjC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,YAAA,CAAa,KAAA,EAAO,QAAQ,KAAK,CAAA;AACjC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAA,CAAK,QAAQ,KAAA,EAAO;AAClB,MAAA,YAAA,CAAa,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAClC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,CAAM,QAAQ,KAAA,EAAO;AACnB,MAAA,YAAA,CAAa,OAAA,EAAS,QAAQ,KAAK,CAAA;AACnC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAQ,KAAA,EAAO;AAChB,MAAA,YAAA,CAAa,IAAA,EAAM,QAAQ,KAAK,CAAA;AAChC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAA,CAAG,QAAQ,MAAA,EAAQ;AACjB,MAAA,YAAA,CAAa,IAAA,EAAM,QAAQ,MAAM,CAAA;AACjC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,QAAA,CAAS,QAAQ,MAAA,EAAQ;AACvB,MAAA,YAAA,CAAa,UAAA,EAAY,QAAQ,MAAM,CAAA;AACvC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,WAAA,CAAY,QAAQ,MAAA,EAAQ;AAC1B,MAAA,YAAA,CAAa,aAAA,EAAe,QAAQ,MAAM,CAAA;AAC1C,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAA,CAAI,kBAAA,EAAoB,QAAA,EAAU,KAAA,EAAO;AACvC,MAAA,IAAI,QAAA,IAAY,UAAU,MAAA,EAAW;AACnC,QAAA,YAAA,CAAa,KAAA,EAAO,MAAA,EAAW,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,oBAAA,CAAqB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,MACnG,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,KAAA,EAAO,QAAW,kBAAkB,CAAA;AAAA,MACnD;AACA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,GAAG,UAAA,EAAY;AACb,MAAA,YAAA,CAAa,IAAA,EAAM,QAAW,UAAU,CAAA;AACxC,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,MAAA,CAAgB,OAAA,GAA6B,eAAA,EAAiB,OAAA,EAAoC;AACtG,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,UAAA,EAAY,SAAA;AAAA,QACZ,OAAA;AAAA,QACA,UAAA,EAAY,MAAM,UAAA,CAAW,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,UAAU,CAAA,GAAI,MAAA;AAAA,QAC9D,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,WAAA,EAAa,SAAS,UAAA,IAAc;AAAA,OACtC;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,YAAA,CAAgB,SAAS,OAAO,CAAA;AAC9D,MAAA,OAAO,aAAa,QAAQ,CAAA;AAAA,IAC9B,CAAA;AAAA,IACA,MAAA,CAAO,QAAQ,OAAA,EAAS;AACtB,MAAA,MAAM,aAAA,GAAgB,OACpB,OAAA,EACA,aAAA,KACG;AACH,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,SAAA;AAAA,UACZ,WAAA,EAAa;AAAA,SACf;AACA,QAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,QAAA,IAAI,aAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA;AACxD,QAAA,IAAI,aAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,aAAA,CAAc,IAAA;AACtD,QAAA,IAAI,aAAA,EAAe,kBAAkB,MAAA,EAAW;AAC9C,UAAA,OAAA,CAAQ,kBAAkB,aAAA,CAAc,aAAA;AAAA,QAC1C;AACA,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAA2B,SAAS,aAAa,CAAA;AAC/E,QAAA,OAAO,aAAa,QAAQ,CAAA;AAAA,MAC9B,CAAA;AACA,MAAA,OAAO,oBAAiC,aAAa,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,MAAA,CAAO,QAAQ,OAAA,EAAS;AACtB,MAAA,MAAM,aAAA,GAAgB,OACpB,OAAA,EACA,aAAA,KACG;AACH,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,SAAA;AAAA,UACZ,WAAA,EAAa,MAAA;AAAA,UACb,WAAA,EAAa,OAAA,EAAS,UAAA,GAAc,OAAA,CAAQ,UAAA,GAAyC;AAAA,SACvF;AACA,QAAA,IAAI,OAAA,UAAiB,OAAA,GAAU,OAAA;AAC/B,QAAA,IAAI,OAAA,EAAS,UAAA,EAAY,OAAA,CAAQ,WAAA,GAAc,OAAA,CAAQ,UAAA;AACvD,QAAA,IAAI,aAAA,EAAe,KAAA,EAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA;AACxD,QAAA,IAAI,aAAA,EAAe,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,aAAA,CAAc,IAAA;AACtD,QAAA,IAAI,aAAA,EAAe,kBAAkB,MAAA,EAAW;AAC9C,UAAA,OAAA,CAAQ,kBAAkB,aAAA,CAAc,aAAA;AAAA,QAC1C;AACA,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAA2B,SAAS,aAAa,CAAA;AAC/E,QAAA,OAAO,aAAa,QAAQ,CAAA;AAAA,MAC9B,CAAA;AACA,MAAA,OAAO,oBAAiC,aAAa,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,MAAA,CAAO,QAAQ,OAAA,EAAS;AACtB,MAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,UAAU,CAAA,GAAI,MAAA;AAClE,MAAA,MAAM,aAAA,GAAgB,OACpB,OAAA,EACA,aAAA,KACG;AACH,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,SAAA;AAAA,UACZ,WAAA,EAAa,MAAA;AAAA,UACb,UAAA,EAAY,OAAA;AAAA,UACZ,OAAA;AAAA,UACA,WAAA,EAAa,eAAe,UAAA,IAAc;AAAA,SAC5C;AACA,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAAqB,SAAS,aAAa,CAAA;AACzE,QAAA,OAAO,aAAa,QAAQ,CAAA;AAAA,MAC9B,CAAA;AACA,MAAA,OAAO,oBAA2B,aAAa,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,OAAO,OAAA,EAAS;AACd,MAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,UAAU,CAAA,GAAI,MAAA;AAClE,MAAA,MAAM,UAAA,GAAa,OAAA,EAAS,UAAA,IAAc,aAAA,CAAc,KAAK,CAAA;AAC7D,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,OAAA,EAAS,MAAA,EAAQ;AACnC,QAAA,MAAM,IAAI,MAAM,uFAAuF,CAAA;AAAA,MACzG;AACA,MAAA,MAAM,aAAA,GAAgB,OACpB,OAAA,EACA,aAAA,KACG;AACH,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,OAAA,EAAS,aAAa,CAAA;AACzD,QAAA,MAAM,OAAA,GAA+B;AAAA,UACnC,UAAA,EAAY,SAAA;AAAA,UACZ,WAAA,EAAa,UAAA;AAAA,UACb,UAAA,EAAY,OAAA;AAAA,UACZ;AAAA,SACF;AACA,QAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,aAAA,CAA0B,SAAS,aAAa,CAAA;AAC9E,QAAA,OAAO,aAAa,QAAQ,CAAA;AAAA,MAC9B,CAAA;AACA,MAAA,OAAO,oBAAgC,aAAa,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,MAAM,MAAA,CAAgB,OAAA,EAA6B,OAAA,EAAoC;AACrF,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,MAAA,CAAY,SAAS,OAAO,CAAA;AAC3D,MAAA,OAAO,eAAe,QAAQ,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,MAAM,WAAA,CAAqB,OAAA,EAA6B,OAAA,EAAoC;AAC1F,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAU,OAAA,EAAS,OAAO,CAAA;AAAA,IAC3C;AAAA,GACF;AAEA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,YAAA,CACd,GAAA,EACA,MAAA,EACA,OAAA,EACgB;AAChB,EAAA,MAAM,EAAE,SAAS,UAAA,EAAY,MAAA,EAAQ,WAAW,GAAG,WAAA,EAAY,GAAI,OAAA,IAAW,EAAC;AAC/E,EAAA,MAAM,SAAS,yBAAA,CAA0B;AAAA,IACvC,SAAS,UAAA,IAAc,GAAA;AAAA,IACvB,QAAQ,SAAA,IAAa,MAAA;AAAA,IACrB,GAAG;AAAA,GACJ,CAAA;AAED,EAAA,OAAO;AAAA,IACL,KAAoB,KAAA,EAAe;AACjC,MAAA,OAAO,kBAAA,CAAwB,OAAO,MAAM,CAAA;AAAA,IAC9C;AAAA,GACF;AACF","file":"index.mjs","sourcesContent":["import type {\r\n AthenaGatewayBaseOptions,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayMethod,\r\n AthenaGatewayResponse,\r\n} from \"./types.js\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaInsertPayload,\r\n AthenaUpdatePayload,\r\n} from \"./types.js\";\r\n\r\nconst DEFAULT_BASE_URL = \"https://athena-db.com\";\r\nconst DEFAULT_CLIENT = \"railway_direct\";\r\n\r\nfunction parseResponseText(text: string) {\r\n if (!text) return null;\r\n try {\r\n return JSON.parse(text);\r\n } catch {\r\n return text;\r\n }\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null) {\r\n return value ? value : undefined;\r\n}\r\n\r\nfunction buildHeaders(\r\n config: AthenaGatewayBaseOptions,\r\n options?: AthenaGatewayCallOptions,\r\n): Record<string, string> {\r\n const mergedStripNulls = options?.stripNulls ?? config.stripNulls ?? true;\r\n const finalClient = options?.client ?? config.client ?? DEFAULT_CLIENT;\r\n const finalApiKey = options?.apiKey ?? config.apiKey;\r\n const finalSupabaseUrl = options?.supabaseUrl ?? config.supabaseUrl;\r\n const finalSupabaseKey = options?.supabaseKey ?? config.supabaseKey;\r\n const finalPublishEvent = options?.publishEvent ?? config.publishEvent;\r\n const extraHeaders = {\r\n ...(config.headers ?? {}),\r\n ...(options?.headers ?? {}),\r\n };\r\n\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n };\r\n\r\n if (options?.userId ?? config.userId) {\r\n headers[\"X-User-Id\"] = options?.userId ?? config.userId ?? \"\";\r\n }\r\n\r\n if (options?.companyId ?? config.companyId) {\r\n headers[\"X-Company-Id\"] = options?.companyId ?? config.companyId ?? \"\";\r\n }\r\n\r\n if (options?.organizationId ?? config.organizationId) {\r\n headers[\"X-Organization-Id\"] =\r\n options?.organizationId ?? config.organizationId ?? \"\";\r\n }\r\n\r\n if (finalClient) {\r\n headers[\"X-Athena-Client\"] = finalClient;\r\n }\r\n\r\n if (typeof mergedStripNulls === \"boolean\") {\r\n headers[\"X-Strip-Nulls\"] = mergedStripNulls ? \"true\" : \"false\";\r\n }\r\n\r\n if (finalPublishEvent) {\r\n headers[\"X-Publish-Event\"] = finalPublishEvent;\r\n }\r\n\r\n if (finalApiKey) {\r\n headers[\"apikey\"] = finalApiKey;\r\n headers[\"x-api-key\"] = headers[\"x-api-key\"] ?? finalApiKey;\r\n }\r\n\r\n if (finalSupabaseUrl) {\r\n headers[\"x-supabase-url\"] = finalSupabaseUrl;\r\n }\r\n\r\n if (finalSupabaseKey) {\r\n headers[\"x-supabase-key\"] = finalSupabaseKey;\r\n }\r\n\r\n Object.entries(extraHeaders).forEach(([key, value]) => {\r\n const normalized = normalizeHeaderValue(value);\r\n if (normalized) {\r\n headers[key] = normalized;\r\n }\r\n });\r\n\r\n return headers;\r\n}\r\n\r\nasync function callAthena<T>(\r\n config: AthenaGatewayBaseOptions,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n payload: unknown,\r\n options?: AthenaGatewayCallOptions,\r\n): Promise<AthenaGatewayResponse<T>> {\r\n const baseUrl = (\r\n options?.baseUrl ??\r\n config.baseUrl ??\r\n DEFAULT_BASE_URL\r\n ).replace(/\\/$/, \"\");\r\n const url = `${baseUrl}${endpoint}`;\r\n const headers = buildHeaders(config, options);\r\n\r\n try {\r\n const response = await fetch(url, {\r\n method,\r\n headers,\r\n body: JSON.stringify(payload),\r\n });\r\n\r\n const rawText = await response.text();\r\n const parsed = parseResponseText(rawText ?? \"\");\r\n const parsedPayload = parsed as Record<string, unknown> | null;\r\n const parsedError =\r\n parsedPayload && typeof parsedPayload === \"object\"\r\n ? ((parsedPayload.error as string | undefined) ??\r\n (parsedPayload.message as string | undefined))\r\n : undefined;\r\n const hasError =\r\n typeof parsedError === \"string\" && parsedError.length > 0\r\n ? parsedError\r\n : undefined;\r\n\r\n return {\r\n ok: response.ok,\r\n status: response.status,\r\n data: (parsed as T) ?? null,\r\n error: hasError,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message =\r\n callError instanceof Error ? callError.message : String(callError);\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: message,\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport interface AthenaGatewayClient {\r\n baseUrl: string;\r\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\r\n fetchGateway<T>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n insertGateway<T>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n updateGateway<T>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n deleteGateway<T>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n}\r\n\r\nexport function createAthenaGatewayClient(\r\n config: AthenaGatewayBaseOptions = {},\r\n): AthenaGatewayClient {\r\n return {\r\n baseUrl: (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\"),\r\n buildHeaders(options) {\r\n return buildHeaders(config, options);\r\n },\r\n fetchGateway(payload, options) {\r\n return callAthena(config, \"/gateway/fetch\", \"POST\", payload, options);\r\n },\r\n insertGateway(payload, options) {\r\n return callAthena(config, \"/gateway/insert\", \"PUT\", payload, options);\r\n },\r\n updateGateway(payload, options) {\r\n return callAthena(config, \"/gateway/update\", \"POST\", payload, options);\r\n },\r\n deleteGateway(payload, options) {\r\n return callAthena(config, \"/gateway/delete\", \"DELETE\", payload, options);\r\n },\r\n };\r\n}\r\n","import type {\r\n AthenaConditionArrayValue,\r\n AthenaConditionOperator,\r\n AthenaConditionValue,\r\n AthenaDeletePayload,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayCondition,\r\n AthenaGatewayResponse,\r\n AthenaInsertPayload,\r\n AthenaUpdatePayload,\r\n} from './gateway/types.ts'\r\nimport { createAthenaGatewayClient } from './gateway/client.ts'\r\n\r\nexport interface SupabaseResult<T> {\r\n data: T | null\r\n error: string | null\r\n status: number\r\n raw: unknown\r\n}\r\n\r\ntype TableBuilderState = {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n}\r\n\r\ntype MutationSingleResult<Result> = Result extends Array<infer Item> ? Item | null : Result | null\r\nconst DEFAULT_COLUMNS = '*'\r\n\r\nexport interface MutationQuery<Result> extends PromiseLike<SupabaseResult<Result>> {\r\n select(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<SupabaseResult<Result>>\r\n returning(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<SupabaseResult<Result>>\r\n single(\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<SupabaseResult<MutationSingleResult<Result>>>\r\n maybeSingle(\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<SupabaseResult<MutationSingleResult<Result>>>\r\n then<TResult1 = SupabaseResult<Result>, TResult2 = never>(\r\n onfulfilled?: ((value: SupabaseResult<Result>) => TResult1 | PromiseLike<TResult1>) | undefined | null,\r\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\r\n ): Promise<TResult1 | TResult2>\r\n catch<TResult = never>(\r\n onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null,\r\n ): Promise<SupabaseResult<Result> | TResult>\r\n finally(onfinally?: (() => void) | undefined | null): Promise<SupabaseResult<Result>>\r\n}\r\n\r\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): SupabaseResult<T> {\r\n return {\r\n data: response.data ?? null,\r\n error: response.error ?? null,\r\n status: response.status,\r\n raw: response.raw,\r\n }\r\n}\r\n\r\nfunction toSingleResult<Result>(response: SupabaseResult<Result>): SupabaseResult<MutationSingleResult<Result>> {\r\n const payload = response.data\r\n const singleData =\r\n Array.isArray(payload) ? (payload.length ? payload[0] : null) : payload ?? null\r\n return {\r\n ...response,\r\n data: singleData as MutationSingleResult<Result>,\r\n }\r\n}\r\n\r\nfunction mergeOptions(...options: Array<AthenaGatewayCallOptions | undefined>): AthenaGatewayCallOptions | undefined {\r\n return options.reduce<AthenaGatewayCallOptions | undefined>((acc, next) => {\r\n if (!next) return acc\r\n return { ...acc, ...next }\r\n }, undefined)\r\n}\r\n\r\nfunction createMutationQuery<Result>(\r\n executor: (\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<SupabaseResult<Result>>,\r\n defaultColumns: string | string[] = DEFAULT_COLUMNS,\r\n): MutationQuery<Result> {\r\n let selectedColumns: string | string[] = defaultColumns\r\n let selectedOptions: AthenaGatewayCallOptions | undefined\r\n let promise: Promise<SupabaseResult<Result>> | null = null\r\n\r\n const run = (columns?: string | string[], options?: AthenaGatewayCallOptions) => {\r\n const payloadColumns = columns ?? selectedColumns\r\n const payloadOptions = options ?? selectedOptions\r\n if (!promise) {\r\n promise = executor(payloadColumns, payloadOptions)\r\n }\r\n return promise\r\n }\r\n\r\n const mutationQuery: MutationQuery<Result> = {\r\n select(columns = selectedColumns, options) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options)\r\n },\r\n returning(columns = selectedColumns, options) {\r\n return mutationQuery.select(columns, options)\r\n },\r\n single(columns = selectedColumns, options) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options).then(toSingleResult)\r\n },\r\n maybeSingle(columns = selectedColumns, options) {\r\n return mutationQuery.single(columns, options)\r\n },\r\n then(onfulfilled, onrejected) {\r\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\r\n },\r\n catch(onrejected) {\r\n return run(selectedColumns, selectedOptions).catch(onrejected)\r\n },\r\n finally(onfinally) {\r\n return run(selectedColumns, selectedOptions).finally(onfinally)\r\n },\r\n }\r\n\r\n return mutationQuery\r\n}\r\n\r\nexport interface TableQueryBuilder<Row> {\r\n select<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<SupabaseResult<T>>\r\n insert(values: Row | Row[], options?: AthenaGatewayCallOptions): MutationQuery<Row | Row[]>\r\n upsert(\r\n values: Row | Row[],\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Partial<Row>\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row | Row[]>\r\n update(values: Partial<Row>, options?: AthenaGatewayCallOptions): MutationQuery<Row[]>\r\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }): MutationQuery<Row | null>\r\n eq(column: string, value: AthenaConditionValue): TableQueryBuilder<Row>\r\n match(filters: Record<string, AthenaConditionValue>): TableQueryBuilder<Row>\r\n range(from: number, to: number): TableQueryBuilder<Row>\r\n limit(count: number): TableQueryBuilder<Row>\r\n offset(count: number): TableQueryBuilder<Row>\r\n gt(column: string, value: AthenaConditionValue): TableQueryBuilder<Row>\r\n gte(column: string, value: AthenaConditionValue): TableQueryBuilder<Row>\r\n lt(column: string, value: AthenaConditionValue): TableQueryBuilder<Row>\r\n lte(column: string, value: AthenaConditionValue): TableQueryBuilder<Row>\r\n neq(column: string, value: AthenaConditionValue): TableQueryBuilder<Row>\r\n like(column: string, value: AthenaConditionValue): TableQueryBuilder<Row>\r\n ilike(column: string, value: AthenaConditionValue): TableQueryBuilder<Row>\r\n is(column: string, value: AthenaConditionValue): TableQueryBuilder<Row>\r\n in(column: string, values: AthenaConditionArrayValue): TableQueryBuilder<Row>\r\n contains(column: string, values: AthenaConditionArrayValue): TableQueryBuilder<Row>\r\n containedBy(column: string, values: AthenaConditionArrayValue): TableQueryBuilder<Row>\r\n not(columnOrExpression: string, operator?: AthenaConditionOperator, value?: AthenaConditionValue): TableQueryBuilder<Row>\r\n or(expression: string): TableQueryBuilder<Row>\r\n single<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<SupabaseResult<T | null>>\r\n maybeSingle<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<SupabaseResult<T | null>>\r\n reset(): TableQueryBuilder<Row>\r\n}\r\n\r\nfunction getResourceId(state: TableBuilderState): string | undefined {\r\n const candidate = state.conditions.find(\r\n condition =>\r\n condition.operator === 'eq' &&\r\n (condition.column === 'resource_id' || condition.column === 'id'),\r\n )\r\n return candidate?.value?.toString()\r\n}\r\n\r\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\r\n if (Array.isArray(value)) {\r\n return value.join(',')\r\n }\r\n return String(value)\r\n}\r\n\r\nfunction createTableBuilder<Row>(\r\n tableName: string,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n): TableQueryBuilder<Row> {\r\n const state: TableBuilderState = {\r\n conditions: [],\r\n }\r\n\r\n const addCondition = (\r\n operator: AthenaConditionOperator,\r\n column?: string,\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n ) => {\r\n const condition: AthenaGatewayCondition = { operator }\r\n if (column) condition.column = column\r\n if (value !== undefined) condition.value = value\r\n state.conditions.push(condition)\r\n }\r\n\r\n const builder: TableQueryBuilder<Row> = {\r\n reset() {\r\n state.conditions = []\r\n state.limit = undefined\r\n state.offset = undefined\r\n return builder\r\n },\r\n range(from, to) {\r\n state.offset = from\r\n state.limit = to - from + 1\r\n return builder\r\n },\r\n limit(count) {\r\n state.limit = count\r\n return builder\r\n },\r\n offset(count) {\r\n state.offset = count\r\n return builder\r\n },\r\n match(filters) {\r\n Object.entries(filters).forEach(([column, value]) => {\r\n addCondition('eq', column, value)\r\n })\r\n return builder\r\n },\r\n eq(column, value) {\r\n addCondition('eq', column, value)\r\n return builder\r\n },\r\n gt(column, value) {\r\n addCondition('gt', column, value)\r\n return builder\r\n },\r\n gte(column, value) {\r\n addCondition('gte', column, value)\r\n return builder\r\n },\r\n lt(column, value) {\r\n addCondition('lt', column, value)\r\n return builder\r\n },\r\n lte(column, value) {\r\n addCondition('lte', column, value)\r\n return builder\r\n },\r\n neq(column, value) {\r\n addCondition('neq', column, value)\r\n return builder\r\n },\r\n like(column, value) {\r\n addCondition('like', column, value)\r\n return builder\r\n },\r\n ilike(column, value) {\r\n addCondition('ilike', column, value)\r\n return builder\r\n },\r\n is(column, value) {\r\n addCondition('is', column, value)\r\n return builder\r\n },\r\n in(column, values) {\r\n addCondition('in', column, values)\r\n return builder\r\n },\r\n contains(column, values) {\r\n addCondition('contains', column, values)\r\n return builder\r\n },\r\n containedBy(column, values) {\r\n addCondition('containedBy', column, values)\r\n return builder\r\n },\r\n not(columnOrExpression, operator, value) {\r\n if (operator && value !== undefined) {\r\n addCondition('not', undefined, `${columnOrExpression}.${operator}.${stringifyFilterValue(value)}`)\r\n } else {\r\n addCondition('not', undefined, columnOrExpression)\r\n }\r\n return builder\r\n },\r\n or(expression) {\r\n addCondition('or', undefined, expression)\r\n return builder\r\n },\r\n async select<T = Row>(columns: string | string[] = DEFAULT_COLUMNS, options?: AthenaGatewayCallOptions) {\r\n const payload = {\r\n table_name: tableName,\r\n columns,\r\n conditions: state.conditions.length ? [...state.conditions] : undefined,\r\n limit: state.limit,\r\n offset: state.offset,\r\n strip_nulls: options?.stripNulls ?? true,\r\n }\r\n const response = await client.fetchGateway<T>(payload, options)\r\n return formatResult(response)\r\n },\r\n insert(values, options) {\r\n const executeInsert = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const payload: AthenaInsertPayload = {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown> | Record<string, unknown>[],\r\n }\r\n if (columns) payload.columns = columns\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const response = await client.insertGateway<Row | Row[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row | Row[]>(executeInsert)\r\n },\r\n upsert(values, options) {\r\n const executeUpsert = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const payload: AthenaInsertPayload = {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown> | Record<string, unknown>[],\r\n update_body: options?.updateBody ? (options.updateBody as Record<string, unknown>) : undefined,\r\n }\r\n if (columns) payload.columns = columns\r\n if (options?.onConflict) payload.on_conflict = options.onConflict\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const response = await client.insertGateway<Row | Row[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row | Row[]>(executeUpsert)\r\n },\r\n update(values, options) {\r\n const filters = state.conditions.length ? [...state.conditions] : undefined\r\n const executeUpdate = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const payload: AthenaUpdatePayload = {\r\n table_name: tableName,\r\n update_body: values,\r\n conditions: filters,\r\n columns,\r\n strip_nulls: mergedOptions?.stripNulls ?? true,\r\n }\r\n const response = await client.updateGateway<Row[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row[]>(executeUpdate)\r\n },\r\n delete(options) {\r\n const filters = state.conditions.length ? [...state.conditions] : undefined\r\n const resourceId = options?.resourceId ?? getResourceId(state)\r\n if (!resourceId && !filters?.length) {\r\n throw new Error('delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId')\r\n }\r\n const executeDelete = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const payload: AthenaDeletePayload = {\r\n table_name: tableName,\r\n resource_id: resourceId,\r\n conditions: filters,\r\n columns,\r\n }\r\n const response = await client.deleteGateway<Row | null>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row | null>(executeDelete)\r\n },\r\n async single<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions) {\r\n const response = await builder.select<T[]>(columns, options)\r\n return toSingleResult(response)\r\n },\r\n async maybeSingle<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions) {\r\n return builder.single<T>(columns, options)\r\n },\r\n }\r\n\r\n return builder\r\n}\r\n\r\nexport interface SupabaseClient {\r\n from<Row = unknown>(table: string): TableQueryBuilder<Row>\r\n}\r\n\r\nexport function createClient(\r\n url: string,\r\n apiKey: string,\r\n options?: AthenaGatewayCallOptions,\r\n): SupabaseClient {\r\n const { baseUrl: optBaseUrl, apiKey: optApiKey, ...restOptions } = options ?? {}\r\n const client = createAthenaGatewayClient({\r\n baseUrl: optBaseUrl ?? url,\r\n apiKey: optApiKey ?? apiKey,\r\n ...restOptions,\r\n })\r\n\r\n return {\r\n from<Row = unknown>(table: string) {\r\n return createTableBuilder<Row>(table, client)\r\n },\r\n }\r\n}\r\n"]}
|
package/dist/react.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { j as AthenaGatewayHookConfig, k as AthenaGatewayHookResult } from './types-DzCf3v76.mjs';
|
|
2
|
+
export { d as AthenaDeletePayload, e as AthenaFetchPayload, f as AthenaGatewayBaseOptions, g as AthenaGatewayCallLog, A as AthenaGatewayCallOptions, h as AthenaGatewayCondition, i as AthenaGatewayEndpointPath, l as AthenaGatewayMethod, m as AthenaGatewayResponse, n as AthenaGatewayResponseLog, o as AthenaInsertPayload, p as AthenaUpdatePayload } from './types-DzCf3v76.mjs';
|
|
3
3
|
|
|
4
4
|
declare function useAthenaGateway(config?: AthenaGatewayHookConfig): AthenaGatewayHookResult;
|
|
5
5
|
|
package/dist/react.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { j as AthenaGatewayHookConfig, k as AthenaGatewayHookResult } from './types-DzCf3v76.js';
|
|
2
|
+
export { d as AthenaDeletePayload, e as AthenaFetchPayload, f as AthenaGatewayBaseOptions, g as AthenaGatewayCallLog, A as AthenaGatewayCallOptions, h as AthenaGatewayCondition, i as AthenaGatewayEndpointPath, l as AthenaGatewayMethod, m as AthenaGatewayResponse, n as AthenaGatewayResponseLog, o as AthenaInsertPayload, p as AthenaUpdatePayload } from './types-DzCf3v76.js';
|
|
3
3
|
|
|
4
4
|
declare function useAthenaGateway(config?: AthenaGatewayHookConfig): AthenaGatewayHookResult;
|
|
5
5
|
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gateway/client.ts","../src/gateway/use-athena-gateway.ts"],"names":["useState","useMemo","useCallback"],"mappings":"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","file":"react.js","sourcesContent":["import type {\r\n AthenaGatewayBaseOptions,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayMethod,\r\n AthenaGatewayResponse,\r\n} from './types.js'\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaInsertPayload,\r\n AthenaUpdatePayload,\r\n} from './types.js'\r\n\r\nconst DEFAULT_BASE_URL = 'https://athena-db.com'\r\nconst DEFAULT_CLIENT = 'railway_direct'\r\n\r\nfunction parseResponseText(text: string) {\r\n if (!text) return null\r\n try {\r\n return JSON.parse(text)\r\n } catch {\r\n return text\r\n }\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null) {\r\n return value ? value : undefined\r\n}\r\n\r\nfunction buildHeaders(\r\n config: AthenaGatewayBaseOptions,\r\n options?: AthenaGatewayCallOptions,\r\n): Record<string, string> {\r\n const mergedStripNulls = options?.stripNulls ?? config.stripNulls ?? true\r\n const finalClient = options?.client ?? config.client ?? DEFAULT_CLIENT\r\n const finalApiKey = options?.apiKey ?? config.apiKey\r\n const finalSupabaseUrl = options?.supabaseUrl ?? config.supabaseUrl\r\n const finalSupabaseKey = options?.supabaseKey ?? config.supabaseKey\r\n const finalPublishEvent = options?.publishEvent ?? config.publishEvent\r\n const extraHeaders = {\r\n ...(config.headers ?? {}),\r\n ...(options?.headers ?? {}),\r\n }\r\n\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n }\r\n\r\n if (options?.userId ?? config.userId) {\r\n headers['X-User-Id'] = options?.userId ?? config.userId ?? ''\r\n }\r\n\r\n if (options?.companyId ?? config.companyId) {\r\n headers['X-Company-Id'] = options?.companyId ?? config.companyId ?? ''\r\n }\r\n\r\n if (options?.organizationId ?? config.organizationId) {\r\n headers['X-Organization-Id'] = options?.organizationId ?? config.organizationId ?? ''\r\n }\r\n\r\n if (finalClient) {\r\n headers['X-Athena-Client'] = finalClient\r\n }\r\n\r\n if (typeof mergedStripNulls === 'boolean') {\r\n headers['X-Strip-Nulls'] = mergedStripNulls ? 'true' : 'false'\r\n }\r\n\r\n if (finalPublishEvent) {\r\n headers['X-Publish-Event'] = finalPublishEvent\r\n }\r\n\r\n if (finalApiKey) {\r\n headers['apikey'] = finalApiKey\r\n headers['x-api-key'] = headers['x-api-key'] ?? finalApiKey\r\n }\r\n\r\n if (finalSupabaseUrl) {\r\n headers['x-supabase-url'] = finalSupabaseUrl\r\n }\r\n\r\n if (finalSupabaseKey) {\r\n headers['x-supabase-key'] = finalSupabaseKey\r\n }\r\n\r\n Object.entries(extraHeaders).forEach(([key, value]) => {\r\n const normalized = normalizeHeaderValue(value)\r\n if (normalized) {\r\n headers[key] = normalized\r\n }\r\n })\r\n\r\n return headers\r\n}\r\n\r\nasync function callAthena<T>(\r\n config: AthenaGatewayBaseOptions,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n payload: unknown,\r\n options?: AthenaGatewayCallOptions,\r\n): Promise<AthenaGatewayResponse<T>> {\r\n const baseUrl = (options?.baseUrl ?? config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '')\r\n const url = `${baseUrl}${endpoint}`\r\n const headers = buildHeaders(config, options)\r\n\r\n try {\r\n const response = await fetch(url, {\r\n method,\r\n headers,\r\n body: JSON.stringify(payload),\r\n })\r\n\r\n const rawText = await response.text()\r\n const parsed = parseResponseText(rawText ?? '')\r\n const parsedPayload = parsed as Record<string, unknown> | null\r\n const parsedError =\r\n parsedPayload && typeof parsedPayload === 'object'\r\n ? ((parsedPayload.error as string | undefined) ?? (parsedPayload.message as string | undefined))\r\n : undefined\r\n const hasError = typeof parsedError === 'string' && parsedError.length > 0 ? parsedError : undefined\r\n\r\n return {\r\n ok: response.ok,\r\n status: response.status,\r\n data: (parsed as T) ?? null,\r\n error: hasError,\r\n raw: parsed,\r\n }\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError)\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: message,\r\n raw: null,\r\n }\r\n }\r\n}\r\n\r\nexport interface AthenaGatewayClient {\r\n baseUrl: string\r\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>\r\n fetchGateway<T>(payload: AthenaFetchPayload, options?: AthenaGatewayCallOptions): Promise<AthenaGatewayResponse<T>>\r\n insertGateway<T>(payload: AthenaInsertPayload, options?: AthenaGatewayCallOptions): Promise<AthenaGatewayResponse<T>>\r\n updateGateway<T>(payload: AthenaUpdatePayload, options?: AthenaGatewayCallOptions): Promise<AthenaGatewayResponse<T>>\r\n deleteGateway<T>(payload: AthenaDeletePayload, options?: AthenaGatewayCallOptions): Promise<AthenaGatewayResponse<T>>\r\n}\r\n\r\nexport function createAthenaGatewayClient(config: AthenaGatewayBaseOptions = {}): AthenaGatewayClient {\r\n return {\r\n baseUrl: (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, ''),\r\n buildHeaders(options) {\r\n return buildHeaders(config, options)\r\n },\r\n fetchGateway(payload, options) {\r\n return callAthena(config, '/gateway/fetch', 'POST', payload, options)\r\n },\r\n insertGateway(payload, options) {\r\n return callAthena(config, '/gateway/insert', 'PUT', payload, options)\r\n },\r\n updateGateway(payload, options) {\r\n return callAthena(config, '/gateway/update', 'POST', payload, options)\r\n },\r\n deleteGateway(payload, options) {\r\n return callAthena(config, '/gateway/delete', 'DELETE', payload, options)\r\n },\r\n }\r\n}\r\n","import { useCallback, useMemo, useState } from \"react\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaGatewayCallLog,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayHookConfig,\r\n AthenaGatewayHookResult,\r\n AthenaGatewayResponse,\r\n AthenaGatewayResponseLog,\r\n AthenaInsertPayload,\r\n AthenaUpdatePayload,\r\n} from \"./types.js\";\r\nimport { createAthenaGatewayClient } from \"./client.js\";\r\n\r\nexport function useAthenaGateway(\r\n config?: AthenaGatewayHookConfig,\r\n): AthenaGatewayHookResult {\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [lastRequest, setLastRequest] = useState<AthenaGatewayCallLog | null>(\r\n null,\r\n );\r\n const [lastResponse, setLastResponse] =\r\n useState<AthenaGatewayResponseLog | null>(null);\r\n\r\n const client = useMemo(\r\n () =>\r\n createAthenaGatewayClient({\r\n client: config?.client,\r\n baseUrl: config?.baseUrl,\r\n apiKey: config?.apiKey,\r\n supabaseUrl: config?.supabaseUrl,\r\n supabaseKey: config?.supabaseKey,\r\n publishEvent: config?.publishEvent,\r\n stripNulls: config?.stripNulls,\r\n headers: config?.headers,\r\n userId: config?.userId,\r\n companyId: config?.companyId,\r\n organizationId: config?.organizationId,\r\n }),\r\n [\r\n config?.baseUrl,\r\n config?.client,\r\n config?.apiKey,\r\n config?.supabaseUrl,\r\n config?.supabaseKey,\r\n config?.publishEvent,\r\n config?.stripNulls,\r\n config?.headers,\r\n config?.userId,\r\n config?.companyId,\r\n config?.organizationId,\r\n ],\r\n );\r\n\r\n const callWithLifecycle = useCallback(\r\n async <T>(\r\n fn: () => Promise<AthenaGatewayResponse<T>>,\r\n metadata: {\r\n endpoint: string;\r\n method: string;\r\n payload: unknown;\r\n options?: AthenaGatewayCallOptions;\r\n },\r\n ): Promise<AthenaGatewayResponse<T>> => {\r\n const requestLog: AthenaGatewayCallLog = {\r\n endpoint: metadata.endpoint as any,\r\n method: metadata.method as any,\r\n payload: metadata.payload,\r\n headers: client.buildHeaders(metadata.options),\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n setLastRequest(requestLog);\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n let response: AthenaGatewayResponse<T> | undefined;\r\n try {\r\n response = await fn();\r\n setLastResponse({ ...response, timestamp: new Date().toISOString() });\r\n\r\n if (!response.ok) {\r\n const message =\r\n response.error ||\r\n `Athena gateway ${metadata.method} ${metadata.endpoint} failed`;\r\n setError(message);\r\n throw new Error(message);\r\n }\r\n\r\n return response;\r\n } catch (callError) {\r\n const message =\r\n callError instanceof Error ? callError.message : String(callError);\r\n setError(message);\r\n setLastResponse({\r\n timestamp: new Date().toISOString(),\r\n status: response?.status ?? 0,\r\n ok: false,\r\n data: null,\r\n raw: null,\r\n error: message,\r\n });\r\n throw callError;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [client],\r\n );\r\n\r\n const normalizedConfigStripNulls = useMemo(\r\n () => config?.stripNulls ?? true,\r\n [config?.stripNulls],\r\n );\r\n\r\n const fetchGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n const normalizedPayload: AthenaFetchPayload = {\r\n ...payload,\r\n conditions: payload.conditions ?? [],\r\n strip_nulls:\r\n payload.strip_nulls ??\r\n options?.stripNulls ??\r\n normalizedConfigStripNulls,\r\n };\r\n return callWithLifecycle<T>(\r\n () => client.fetchGateway<T>(normalizedPayload, options),\r\n {\r\n endpoint: \"/gateway/fetch\",\r\n method: \"POST\",\r\n payload: normalizedPayload,\r\n options,\r\n },\r\n );\r\n },\r\n [callWithLifecycle, client, normalizedConfigStripNulls],\r\n );\r\n\r\n const insertGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) =>\r\n callWithLifecycle<T>(() => client.insertGateway<T>(payload, options), {\r\n endpoint: \"/gateway/insert\",\r\n method: \"PUT\",\r\n payload,\r\n options,\r\n }),\r\n [callWithLifecycle, client],\r\n );\r\n\r\n const updateGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n const normalizedPayload: AthenaUpdatePayload = {\r\n ...payload,\r\n conditions: payload.conditions ?? [],\r\n strip_nulls:\r\n payload.strip_nulls ??\r\n options?.stripNulls ??\r\n normalizedConfigStripNulls,\r\n };\r\n return callWithLifecycle<T>(\r\n () => client.updateGateway<T>(normalizedPayload, options),\r\n {\r\n endpoint: \"/gateway/update\",\r\n method: \"POST\",\r\n payload: normalizedPayload,\r\n options,\r\n },\r\n );\r\n },\r\n [callWithLifecycle, client, normalizedConfigStripNulls],\r\n );\r\n\r\n const deleteGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n if (!payload.resource_id) {\r\n throw new Error(\r\n \"deleteGateway requires resource_id (the unique identifier of the record to delete)\",\r\n );\r\n }\r\n return callWithLifecycle<T>(\r\n () => client.deleteGateway<T>(payload, options),\r\n { endpoint: \"/gateway/delete\", method: \"DELETE\", payload, options },\r\n );\r\n },\r\n [callWithLifecycle, client],\r\n );\r\n\r\n return {\r\n fetchGateway,\r\n insertGateway,\r\n updateGateway,\r\n deleteGateway,\r\n isLoading,\r\n error,\r\n lastRequest,\r\n lastResponse,\r\n baseUrl: client.baseUrl,\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/gateway/client.ts","../src/gateway/use-athena-gateway.ts"],"names":["useState","useMemo","useCallback"],"mappings":"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","file":"react.js","sourcesContent":["import type {\r\n AthenaGatewayBaseOptions,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayMethod,\r\n AthenaGatewayResponse,\r\n} from \"./types.js\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaInsertPayload,\r\n AthenaUpdatePayload,\r\n} from \"./types.js\";\r\n\r\nconst DEFAULT_BASE_URL = \"https://athena-db.com\";\r\nconst DEFAULT_CLIENT = \"railway_direct\";\r\n\r\nfunction parseResponseText(text: string) {\r\n if (!text) return null;\r\n try {\r\n return JSON.parse(text);\r\n } catch {\r\n return text;\r\n }\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null) {\r\n return value ? value : undefined;\r\n}\r\n\r\nfunction buildHeaders(\r\n config: AthenaGatewayBaseOptions,\r\n options?: AthenaGatewayCallOptions,\r\n): Record<string, string> {\r\n const mergedStripNulls = options?.stripNulls ?? config.stripNulls ?? true;\r\n const finalClient = options?.client ?? config.client ?? DEFAULT_CLIENT;\r\n const finalApiKey = options?.apiKey ?? config.apiKey;\r\n const finalSupabaseUrl = options?.supabaseUrl ?? config.supabaseUrl;\r\n const finalSupabaseKey = options?.supabaseKey ?? config.supabaseKey;\r\n const finalPublishEvent = options?.publishEvent ?? config.publishEvent;\r\n const extraHeaders = {\r\n ...(config.headers ?? {}),\r\n ...(options?.headers ?? {}),\r\n };\r\n\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n };\r\n\r\n if (options?.userId ?? config.userId) {\r\n headers[\"X-User-Id\"] = options?.userId ?? config.userId ?? \"\";\r\n }\r\n\r\n if (options?.companyId ?? config.companyId) {\r\n headers[\"X-Company-Id\"] = options?.companyId ?? config.companyId ?? \"\";\r\n }\r\n\r\n if (options?.organizationId ?? config.organizationId) {\r\n headers[\"X-Organization-Id\"] =\r\n options?.organizationId ?? config.organizationId ?? \"\";\r\n }\r\n\r\n if (finalClient) {\r\n headers[\"X-Athena-Client\"] = finalClient;\r\n }\r\n\r\n if (typeof mergedStripNulls === \"boolean\") {\r\n headers[\"X-Strip-Nulls\"] = mergedStripNulls ? \"true\" : \"false\";\r\n }\r\n\r\n if (finalPublishEvent) {\r\n headers[\"X-Publish-Event\"] = finalPublishEvent;\r\n }\r\n\r\n if (finalApiKey) {\r\n headers[\"apikey\"] = finalApiKey;\r\n headers[\"x-api-key\"] = headers[\"x-api-key\"] ?? finalApiKey;\r\n }\r\n\r\n if (finalSupabaseUrl) {\r\n headers[\"x-supabase-url\"] = finalSupabaseUrl;\r\n }\r\n\r\n if (finalSupabaseKey) {\r\n headers[\"x-supabase-key\"] = finalSupabaseKey;\r\n }\r\n\r\n Object.entries(extraHeaders).forEach(([key, value]) => {\r\n const normalized = normalizeHeaderValue(value);\r\n if (normalized) {\r\n headers[key] = normalized;\r\n }\r\n });\r\n\r\n return headers;\r\n}\r\n\r\nasync function callAthena<T>(\r\n config: AthenaGatewayBaseOptions,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n payload: unknown,\r\n options?: AthenaGatewayCallOptions,\r\n): Promise<AthenaGatewayResponse<T>> {\r\n const baseUrl = (\r\n options?.baseUrl ??\r\n config.baseUrl ??\r\n DEFAULT_BASE_URL\r\n ).replace(/\\/$/, \"\");\r\n const url = `${baseUrl}${endpoint}`;\r\n const headers = buildHeaders(config, options);\r\n\r\n try {\r\n const response = await fetch(url, {\r\n method,\r\n headers,\r\n body: JSON.stringify(payload),\r\n });\r\n\r\n const rawText = await response.text();\r\n const parsed = parseResponseText(rawText ?? \"\");\r\n const parsedPayload = parsed as Record<string, unknown> | null;\r\n const parsedError =\r\n parsedPayload && typeof parsedPayload === \"object\"\r\n ? ((parsedPayload.error as string | undefined) ??\r\n (parsedPayload.message as string | undefined))\r\n : undefined;\r\n const hasError =\r\n typeof parsedError === \"string\" && parsedError.length > 0\r\n ? parsedError\r\n : undefined;\r\n\r\n return {\r\n ok: response.ok,\r\n status: response.status,\r\n data: (parsed as T) ?? null,\r\n error: hasError,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message =\r\n callError instanceof Error ? callError.message : String(callError);\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: message,\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport interface AthenaGatewayClient {\r\n baseUrl: string;\r\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\r\n fetchGateway<T>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n insertGateway<T>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n updateGateway<T>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n deleteGateway<T>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n}\r\n\r\nexport function createAthenaGatewayClient(\r\n config: AthenaGatewayBaseOptions = {},\r\n): AthenaGatewayClient {\r\n return {\r\n baseUrl: (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\"),\r\n buildHeaders(options) {\r\n return buildHeaders(config, options);\r\n },\r\n fetchGateway(payload, options) {\r\n return callAthena(config, \"/gateway/fetch\", \"POST\", payload, options);\r\n },\r\n insertGateway(payload, options) {\r\n return callAthena(config, \"/gateway/insert\", \"PUT\", payload, options);\r\n },\r\n updateGateway(payload, options) {\r\n return callAthena(config, \"/gateway/update\", \"POST\", payload, options);\r\n },\r\n deleteGateway(payload, options) {\r\n return callAthena(config, \"/gateway/delete\", \"DELETE\", payload, options);\r\n },\r\n };\r\n}\r\n","import { useCallback, useMemo, useState } from \"react\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaGatewayCallLog,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayHookConfig,\r\n AthenaGatewayHookResult,\r\n AthenaGatewayResponse,\r\n AthenaGatewayResponseLog,\r\n AthenaInsertPayload,\r\n AthenaUpdatePayload,\r\n} from \"./types.js\";\r\nimport { createAthenaGatewayClient } from \"./client.js\";\r\n\r\nexport function useAthenaGateway(\r\n config?: AthenaGatewayHookConfig,\r\n): AthenaGatewayHookResult {\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [lastRequest, setLastRequest] = useState<AthenaGatewayCallLog | null>(\r\n null,\r\n );\r\n const [lastResponse, setLastResponse] =\r\n useState<AthenaGatewayResponseLog | null>(null);\r\n\r\n const client = useMemo(\r\n () =>\r\n createAthenaGatewayClient({\r\n client: config?.client,\r\n baseUrl: config?.baseUrl,\r\n apiKey: config?.apiKey,\r\n supabaseUrl: config?.supabaseUrl,\r\n supabaseKey: config?.supabaseKey,\r\n publishEvent: config?.publishEvent,\r\n stripNulls: config?.stripNulls,\r\n headers: config?.headers,\r\n userId: config?.userId,\r\n companyId: config?.companyId,\r\n organizationId: config?.organizationId,\r\n }),\r\n [\r\n config?.baseUrl,\r\n config?.client,\r\n config?.apiKey,\r\n config?.supabaseUrl,\r\n config?.supabaseKey,\r\n config?.publishEvent,\r\n config?.stripNulls,\r\n config?.headers,\r\n config?.userId,\r\n config?.companyId,\r\n config?.organizationId,\r\n ],\r\n );\r\n\r\n const callWithLifecycle = useCallback(\r\n async <T>(\r\n fn: () => Promise<AthenaGatewayResponse<T>>,\r\n metadata: {\r\n endpoint: string;\r\n method: string;\r\n payload: unknown;\r\n options?: AthenaGatewayCallOptions;\r\n },\r\n ): Promise<AthenaGatewayResponse<T>> => {\r\n const requestLog: AthenaGatewayCallLog = {\r\n endpoint: metadata.endpoint as any,\r\n method: metadata.method as any,\r\n payload: metadata.payload,\r\n headers: client.buildHeaders(metadata.options),\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n setLastRequest(requestLog);\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n let response: AthenaGatewayResponse<T> | undefined;\r\n try {\r\n response = await fn();\r\n setLastResponse({ ...response, timestamp: new Date().toISOString() });\r\n\r\n if (!response.ok) {\r\n const message =\r\n response.error ||\r\n `Athena gateway ${metadata.method} ${metadata.endpoint} failed`;\r\n setError(message);\r\n throw new Error(message);\r\n }\r\n\r\n return response;\r\n } catch (callError) {\r\n const message =\r\n callError instanceof Error ? callError.message : String(callError);\r\n setError(message);\r\n setLastResponse({\r\n timestamp: new Date().toISOString(),\r\n status: response?.status ?? 0,\r\n ok: false,\r\n data: null,\r\n raw: null,\r\n error: message,\r\n });\r\n throw callError;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [client],\r\n );\r\n\r\n const normalizedConfigStripNulls = useMemo(\r\n () => config?.stripNulls ?? true,\r\n [config?.stripNulls],\r\n );\r\n\r\n const fetchGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n const normalizedPayload: AthenaFetchPayload = {\r\n ...payload,\r\n conditions: payload.conditions ?? [],\r\n strip_nulls:\r\n payload.strip_nulls ??\r\n options?.stripNulls ??\r\n normalizedConfigStripNulls,\r\n };\r\n return callWithLifecycle<T>(\r\n () => client.fetchGateway<T>(normalizedPayload, options),\r\n {\r\n endpoint: \"/gateway/fetch\",\r\n method: \"POST\",\r\n payload: normalizedPayload,\r\n options,\r\n },\r\n );\r\n },\r\n [callWithLifecycle, client, normalizedConfigStripNulls],\r\n );\r\n\r\n const insertGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) =>\r\n callWithLifecycle<T>(() => client.insertGateway<T>(payload, options), {\r\n endpoint: \"/gateway/insert\",\r\n method: \"PUT\",\r\n payload,\r\n options,\r\n }),\r\n [callWithLifecycle, client],\r\n );\r\n\r\n const updateGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n const normalizedPayload: AthenaUpdatePayload = {\r\n ...payload,\r\n conditions: payload.conditions ?? [],\r\n strip_nulls:\r\n payload.strip_nulls ??\r\n options?.stripNulls ??\r\n normalizedConfigStripNulls,\r\n };\r\n return callWithLifecycle<T>(\r\n () => client.updateGateway<T>(normalizedPayload, options),\r\n {\r\n endpoint: \"/gateway/update\",\r\n method: \"POST\",\r\n payload: normalizedPayload,\r\n options,\r\n },\r\n );\r\n },\r\n [callWithLifecycle, client, normalizedConfigStripNulls],\r\n );\r\n\r\n const deleteGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n if (!payload.resource_id) {\r\n throw new Error(\r\n \"deleteGateway requires resource_id (the unique identifier of the record to delete)\",\r\n );\r\n }\r\n return callWithLifecycle<T>(\r\n () => client.deleteGateway<T>(payload, options),\r\n { endpoint: \"/gateway/delete\", method: \"DELETE\", payload, options },\r\n );\r\n },\r\n [callWithLifecycle, client],\r\n );\r\n\r\n return {\r\n fetchGateway,\r\n insertGateway,\r\n updateGateway,\r\n deleteGateway,\r\n isLoading,\r\n error,\r\n lastRequest,\r\n lastResponse,\r\n baseUrl: client.baseUrl,\r\n };\r\n}\r\n"]}
|