@akirilyuk/supabase-in-memory-server 1.0.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/LICENSE +21 -0
- package/README.md +240 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +28 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth-memory.d.ts +40 -0
- package/dist/lib/auth-memory.d.ts.map +1 -0
- package/dist/lib/auth-memory.js +167 -0
- package/dist/lib/auth-memory.js.map +1 -0
- package/dist/lib/http-headers.d.ts +6 -0
- package/dist/lib/http-headers.d.ts.map +1 -0
- package/dist/lib/http-headers.js +14 -0
- package/dist/lib/http-headers.js.map +1 -0
- package/dist/lib/jwt.d.ts +14 -0
- package/dist/lib/jwt.d.ts.map +1 -0
- package/dist/lib/jwt.js +41 -0
- package/dist/lib/jwt.js.map +1 -0
- package/dist/lib/memory-store.d.ts +18 -0
- package/dist/lib/memory-store.d.ts.map +1 -0
- package/dist/lib/memory-store.js +34 -0
- package/dist/lib/memory-store.js.map +1 -0
- package/dist/lib/postgrest.d.ts +9 -0
- package/dist/lib/postgrest.d.ts.map +1 -0
- package/dist/lib/postgrest.js +169 -0
- package/dist/lib/postgrest.js.map +1 -0
- package/dist/lib/server-logger.d.ts +10 -0
- package/dist/lib/server-logger.d.ts.map +1 -0
- package/dist/lib/server-logger.js +36 -0
- package/dist/lib/server-logger.js.map +1 -0
- package/dist/lib/server-options.d.ts +52 -0
- package/dist/lib/server-options.d.ts.map +1 -0
- package/dist/lib/server-options.js +82 -0
- package/dist/lib/server-options.js.map +1 -0
- package/dist/lib/types.d.ts +3 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +3 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/memory-server/MemorySupabaseHttpServer.d.ts +24 -0
- package/dist/memory-server/MemorySupabaseHttpServer.d.ts.map +1 -0
- package/dist/memory-server/MemorySupabaseHttpServer.js +91 -0
- package/dist/memory-server/MemorySupabaseHttpServer.js.map +1 -0
- package/dist/memory-server/auth-routes.d.ts +3 -0
- package/dist/memory-server/auth-routes.d.ts.map +1 -0
- package/dist/memory-server/auth-routes.js +217 -0
- package/dist/memory-server/auth-routes.js.map +1 -0
- package/dist/memory-server/handler-context.d.ts +19 -0
- package/dist/memory-server/handler-context.d.ts.map +1 -0
- package/dist/memory-server/handler-context.js +3 -0
- package/dist/memory-server/handler-context.js.map +1 -0
- package/dist/memory-server/http-utils.d.ts +19 -0
- package/dist/memory-server/http-utils.d.ts.map +1 -0
- package/dist/memory-server/http-utils.js +109 -0
- package/dist/memory-server/http-utils.js.map +1 -0
- package/dist/memory-server/index.d.ts +4 -0
- package/dist/memory-server/index.d.ts.map +1 -0
- package/dist/memory-server/index.js +8 -0
- package/dist/memory-server/index.js.map +1 -0
- package/dist/memory-server/log-meta.d.ts +12 -0
- package/dist/memory-server/log-meta.d.ts.map +1 -0
- package/dist/memory-server/log-meta.js +58 -0
- package/dist/memory-server/log-meta.js.map +1 -0
- package/dist/memory-server/rest-routes.d.ts +3 -0
- package/dist/memory-server/rest-routes.d.ts.map +1 -0
- package/dist/memory-server/rest-routes.js +235 -0
- package/dist/memory-server/rest-routes.js.map +1 -0
- package/dist/memory-server/server-lifecycle.d.ts +19 -0
- package/dist/memory-server/server-lifecycle.d.ts.map +1 -0
- package/dist/memory-server/server-lifecycle.js +75 -0
- package/dist/memory-server/server-lifecycle.js.map +1 -0
- package/dist/memory-server/types.d.ts +33 -0
- package/dist/memory-server/types.d.ts.map +1 -0
- package/dist/memory-server/types.js +3 -0
- package/dist/memory-server/types.js.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getIncomingHeader = getIncomingHeader;
|
|
4
|
+
/**
|
|
5
|
+
* Reads a request header case-insensitively; if multiple values exist, returns the first.
|
|
6
|
+
*/
|
|
7
|
+
function getIncomingHeader(req, name) {
|
|
8
|
+
const key = name.toLowerCase();
|
|
9
|
+
const raw = req.headers[key];
|
|
10
|
+
if (raw === undefined)
|
|
11
|
+
return undefined;
|
|
12
|
+
return Array.isArray(raw) ? raw[0] : raw;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=http-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-headers.js","sourceRoot":"","sources":["../../src/lib/http-headers.ts"],"names":[],"mappings":";;AAKA,8CAKC;AARD;;GAEG;AACH,SAAgB,iBAAiB,CAAC,GAAoB,EAAE,IAAY;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds a three-part JWT string with `alg: none` for local testing only (not cryptographically signed).
|
|
3
|
+
* @param payload - Claims embedded in the middle segment (e.g. `role`, `sub`).
|
|
4
|
+
*/
|
|
5
|
+
export declare function encodeMemoryJwt(payload: Record<string, unknown>): string;
|
|
6
|
+
/**
|
|
7
|
+
* Decodes the JWT payload segment without verifying a signature.
|
|
8
|
+
* @param token - Standard `header.payload.signature` JWT string.
|
|
9
|
+
* @returns Parsed payload object, or `null` if malformed.
|
|
10
|
+
*/
|
|
11
|
+
export declare function decodeJwtPayload(token: string): Record<string, unknown> | null;
|
|
12
|
+
/** Cryptographically random URL-safe token (e.g. refresh tokens). */
|
|
13
|
+
export declare function randomToken(): string;
|
|
14
|
+
//# sourceMappingURL=jwt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAIxE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU9E;AAED,qEAAqE;AACrE,wBAAgB,WAAW,IAAI,MAAM,CAEpC"}
|
package/dist/lib/jwt.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.encodeMemoryJwt = encodeMemoryJwt;
|
|
4
|
+
exports.decodeJwtPayload = decodeJwtPayload;
|
|
5
|
+
exports.randomToken = randomToken;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
function b64urlJson(obj) {
|
|
8
|
+
return Buffer.from(JSON.stringify(obj), 'utf8').toString('base64url');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Builds a three-part JWT string with `alg: none` for local testing only (not cryptographically signed).
|
|
12
|
+
* @param payload - Claims embedded in the middle segment (e.g. `role`, `sub`).
|
|
13
|
+
*/
|
|
14
|
+
function encodeMemoryJwt(payload) {
|
|
15
|
+
const header = b64urlJson({ alg: 'none', typ: 'JWT' });
|
|
16
|
+
const body = b64urlJson(payload);
|
|
17
|
+
return `${header}.${body}.`;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Decodes the JWT payload segment without verifying a signature.
|
|
21
|
+
* @param token - Standard `header.payload.signature` JWT string.
|
|
22
|
+
* @returns Parsed payload object, or `null` if malformed.
|
|
23
|
+
*/
|
|
24
|
+
function decodeJwtPayload(token) {
|
|
25
|
+
const parts = token.split('.');
|
|
26
|
+
const payloadPart = parts[1];
|
|
27
|
+
if (parts.length < 2 || payloadPart === undefined)
|
|
28
|
+
return null;
|
|
29
|
+
try {
|
|
30
|
+
const json = Buffer.from(payloadPart, 'base64url').toString('utf8');
|
|
31
|
+
return JSON.parse(json);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Cryptographically random URL-safe token (e.g. refresh tokens). */
|
|
38
|
+
function randomToken() {
|
|
39
|
+
return (0, node_crypto_1.randomBytes)(32).toString('base64url');
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=jwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":";;AAUA,0CAIC;AAOD,4CAUC;AAGD,kCAEC;AApCD,6CAA0C;AAE1C,SAAS,UAAU,CAAC,GAAY;IAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,OAAgC;IAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,GAAG,MAAM,IAAI,IAAI,GAAG,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,SAAgB,WAAW;IACzB,OAAO,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { JsonRecord } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory table storage for `/rest/v1/:table` (PostgREST-like, no schema or RLS).
|
|
4
|
+
* Each table name maps to an array of row objects.
|
|
5
|
+
*/
|
|
6
|
+
export declare class MemoryStore {
|
|
7
|
+
private readonly tables;
|
|
8
|
+
/**
|
|
9
|
+
* Returns the mutable row array for a table, creating an empty table if needed.
|
|
10
|
+
* @param name - Table name as used in `client.from(name)`.
|
|
11
|
+
*/
|
|
12
|
+
getTable(name: string): JsonRecord[];
|
|
13
|
+
/** Replace table contents (tests / seeding). */
|
|
14
|
+
seed(table: string, rows: JsonRecord[]): void;
|
|
15
|
+
clearTable(table: string): void;
|
|
16
|
+
clearAll(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=memory-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/lib/memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAE1D;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE;IASpC,gDAAgD;IAChD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI;IAO7C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B,QAAQ,IAAI,IAAI;CAGjB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoryStore = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* In-memory table storage for `/rest/v1/:table` (PostgREST-like, no schema or RLS).
|
|
6
|
+
* Each table name maps to an array of row objects.
|
|
7
|
+
*/
|
|
8
|
+
class MemoryStore {
|
|
9
|
+
tables = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Returns the mutable row array for a table, creating an empty table if needed.
|
|
12
|
+
* @param name - Table name as used in `client.from(name)`.
|
|
13
|
+
*/
|
|
14
|
+
getTable(name) {
|
|
15
|
+
let rows = this.tables.get(name);
|
|
16
|
+
if (!rows) {
|
|
17
|
+
rows = [];
|
|
18
|
+
this.tables.set(name, rows);
|
|
19
|
+
}
|
|
20
|
+
return rows;
|
|
21
|
+
}
|
|
22
|
+
/** Replace table contents (tests / seeding). */
|
|
23
|
+
seed(table, rows) {
|
|
24
|
+
this.tables.set(table, rows.map((r) => ({ ...r })));
|
|
25
|
+
}
|
|
26
|
+
clearTable(table) {
|
|
27
|
+
this.tables.set(table, []);
|
|
28
|
+
}
|
|
29
|
+
clearAll() {
|
|
30
|
+
this.tables.clear();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.MemoryStore = MemoryStore;
|
|
34
|
+
//# sourceMappingURL=memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/lib/memory-store.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,WAAW;IACL,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE1D;;;OAGG;IACH,QAAQ,CAAC,IAAY;QACnB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC,KAAa,EAAE,IAAkB;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAC5B,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AA/BD,kCA+BC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { JsonRecord } from './types.js';
|
|
2
|
+
/** AND across columns; within one column, OR across repeated params (PostgREST). */
|
|
3
|
+
export declare function filterRows(rows: JsonRecord[], searchParams: URLSearchParams): JsonRecord[];
|
|
4
|
+
export declare function orderRows(rows: JsonRecord[], orderParam: string | null): JsonRecord[];
|
|
5
|
+
export declare function limitOffset(rows: JsonRecord[], searchParams: URLSearchParams): JsonRecord[];
|
|
6
|
+
export declare function projectSelect(row: JsonRecord, select: string | null): JsonRecord;
|
|
7
|
+
export declare function projectRows(rows: JsonRecord[], select: string | null): JsonRecord[];
|
|
8
|
+
export declare function upsertRows(existing: JsonRecord[], incoming: JsonRecord[], onConflict: string | null, ignoreDuplicates: boolean): JsonRecord[];
|
|
9
|
+
//# sourceMappingURL=postgrest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgrest.d.ts","sourceRoot":"","sources":["../../src/lib/postgrest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAkE7C,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,eAAe,GAAG,UAAU,EAAE,CAgB1F;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,EAAE,CAiBrF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,eAAe,GAAG,UAAU,EAAE,CAS3F;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAQhF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,EAAE,CAEnF;AAcD,wBAAgB,UAAU,CACxB,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,UAAU,EAAE,EACtB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,gBAAgB,EAAE,OAAO,GACxB,UAAU,EAAE,CAiBd"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filterRows = filterRows;
|
|
4
|
+
exports.orderRows = orderRows;
|
|
5
|
+
exports.limitOffset = limitOffset;
|
|
6
|
+
exports.projectSelect = projectSelect;
|
|
7
|
+
exports.projectRows = projectRows;
|
|
8
|
+
exports.upsertRows = upsertRows;
|
|
9
|
+
const RESERVED = new Set(['select', 'order', 'limit', 'offset', 'columns', 'on_conflict']);
|
|
10
|
+
function parseOperator(raw) {
|
|
11
|
+
const dot = raw.indexOf('.');
|
|
12
|
+
if (dot === -1)
|
|
13
|
+
return { op: 'eq', arg: raw };
|
|
14
|
+
const op = raw.slice(0, dot);
|
|
15
|
+
let arg = raw.slice(dot + 1);
|
|
16
|
+
if (op === 'in' && arg.startsWith('(') && arg.endsWith(')')) {
|
|
17
|
+
arg = arg.slice(1, -1);
|
|
18
|
+
}
|
|
19
|
+
return { op, arg };
|
|
20
|
+
}
|
|
21
|
+
function parseInList(arg) {
|
|
22
|
+
return arg.split(',').map((s) => s.trim());
|
|
23
|
+
}
|
|
24
|
+
function cellMatchesFilter(row, column, rawFilter) {
|
|
25
|
+
const cell = row[column];
|
|
26
|
+
const { op, arg } = parseOperator(rawFilter);
|
|
27
|
+
switch (op) {
|
|
28
|
+
case 'eq':
|
|
29
|
+
return String(cell) === arg;
|
|
30
|
+
case 'neq':
|
|
31
|
+
return String(cell) !== arg;
|
|
32
|
+
case 'gt':
|
|
33
|
+
return compare(cell, arg) > 0;
|
|
34
|
+
case 'gte':
|
|
35
|
+
return compare(cell, arg) >= 0;
|
|
36
|
+
case 'lt':
|
|
37
|
+
return compare(cell, arg) < 0;
|
|
38
|
+
case 'lte':
|
|
39
|
+
return compare(cell, arg) <= 0;
|
|
40
|
+
case 'is': {
|
|
41
|
+
if (arg === 'null')
|
|
42
|
+
return cell === null || cell === undefined;
|
|
43
|
+
if (arg === 'true')
|
|
44
|
+
return cell === true;
|
|
45
|
+
if (arg === 'false')
|
|
46
|
+
return cell === false;
|
|
47
|
+
return String(cell) === arg;
|
|
48
|
+
}
|
|
49
|
+
case 'in': {
|
|
50
|
+
const set = parseInList(arg);
|
|
51
|
+
return set.some((v) => String(cell) === v);
|
|
52
|
+
}
|
|
53
|
+
default:
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function compare(a, b) {
|
|
58
|
+
const an = Number(a);
|
|
59
|
+
const bn = Number(b);
|
|
60
|
+
if (!Number.isNaN(an) && !Number.isNaN(bn))
|
|
61
|
+
return an - bn;
|
|
62
|
+
return String(a).localeCompare(b);
|
|
63
|
+
}
|
|
64
|
+
function compareValues(a, b) {
|
|
65
|
+
const an = Number(a);
|
|
66
|
+
const bn = Number(b);
|
|
67
|
+
if (typeof a === 'number' && typeof b === 'number')
|
|
68
|
+
return a - b;
|
|
69
|
+
if (!Number.isNaN(an) && !Number.isNaN(bn))
|
|
70
|
+
return an - bn;
|
|
71
|
+
return String(a).localeCompare(String(b));
|
|
72
|
+
}
|
|
73
|
+
/** AND across columns; within one column, OR across repeated params (PostgREST). */
|
|
74
|
+
function filterRows(rows, searchParams) {
|
|
75
|
+
const byColumn = new Map();
|
|
76
|
+
for (const [key, value] of searchParams.entries()) {
|
|
77
|
+
if (RESERVED.has(key))
|
|
78
|
+
continue;
|
|
79
|
+
const list = byColumn.get(key) ?? [];
|
|
80
|
+
list.push(value);
|
|
81
|
+
byColumn.set(key, list);
|
|
82
|
+
}
|
|
83
|
+
return rows.filter((row) => {
|
|
84
|
+
for (const [column, filters] of byColumn) {
|
|
85
|
+
const ok = filters.some((f) => cellMatchesFilter(row, column, f));
|
|
86
|
+
if (!ok)
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
function orderRows(rows, orderParam) {
|
|
93
|
+
if (!orderParam)
|
|
94
|
+
return rows;
|
|
95
|
+
const parts = orderParam.split(',').map((p) => p.trim());
|
|
96
|
+
const sorted = [...rows];
|
|
97
|
+
for (const part of parts.reverse()) {
|
|
98
|
+
const [colPart, dirRaw] = part.split('.');
|
|
99
|
+
const col = colPart ?? '';
|
|
100
|
+
if (!col)
|
|
101
|
+
continue;
|
|
102
|
+
const ascending = !(dirRaw?.startsWith('desc') ?? false);
|
|
103
|
+
sorted.sort((a, b) => {
|
|
104
|
+
const av = a[col];
|
|
105
|
+
const bv = b[col];
|
|
106
|
+
const c = compareValues(av, bv);
|
|
107
|
+
return ascending ? c : -c;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return sorted;
|
|
111
|
+
}
|
|
112
|
+
function limitOffset(rows, searchParams) {
|
|
113
|
+
const lim = searchParams.get('limit');
|
|
114
|
+
const off = searchParams.get('offset');
|
|
115
|
+
let slice = rows;
|
|
116
|
+
const o = off ? parseInt(off, 10) : 0;
|
|
117
|
+
if (!Number.isNaN(o) && o > 0)
|
|
118
|
+
slice = slice.slice(o);
|
|
119
|
+
const l = lim ? parseInt(lim, 10) : undefined;
|
|
120
|
+
if (l !== undefined && !Number.isNaN(l))
|
|
121
|
+
slice = slice.slice(0, l);
|
|
122
|
+
return slice;
|
|
123
|
+
}
|
|
124
|
+
function projectSelect(row, select) {
|
|
125
|
+
if (!select || select === '*')
|
|
126
|
+
return { ...row };
|
|
127
|
+
const cols = select.split(',').map((c) => c.trim().replace(/^"|"$/g, ''));
|
|
128
|
+
const out = {};
|
|
129
|
+
for (const c of cols) {
|
|
130
|
+
if (c in row)
|
|
131
|
+
out[c] = row[c];
|
|
132
|
+
}
|
|
133
|
+
return out;
|
|
134
|
+
}
|
|
135
|
+
function projectRows(rows, select) {
|
|
136
|
+
return rows.map((r) => projectSelect(r, select));
|
|
137
|
+
}
|
|
138
|
+
function rowKey(row, onConflict) {
|
|
139
|
+
if (onConflict) {
|
|
140
|
+
return onConflict
|
|
141
|
+
.split(',')
|
|
142
|
+
.map((c) => c.trim())
|
|
143
|
+
.map((c) => `${c}=${JSON.stringify(row[c])}`)
|
|
144
|
+
.join('|');
|
|
145
|
+
}
|
|
146
|
+
if ('id' in row)
|
|
147
|
+
return `id=${JSON.stringify(row.id)}`;
|
|
148
|
+
return JSON.stringify(row);
|
|
149
|
+
}
|
|
150
|
+
function upsertRows(existing, incoming, onConflict, ignoreDuplicates) {
|
|
151
|
+
const next = [...existing];
|
|
152
|
+
const indexByKey = new Map();
|
|
153
|
+
next.forEach((r, i) => indexByKey.set(rowKey(r, onConflict), i));
|
|
154
|
+
for (const row of incoming) {
|
|
155
|
+
const key = rowKey(row, onConflict);
|
|
156
|
+
const idx = indexByKey.get(key);
|
|
157
|
+
if (idx !== undefined) {
|
|
158
|
+
if (ignoreDuplicates)
|
|
159
|
+
continue;
|
|
160
|
+
next[idx] = { ...next[idx], ...row };
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
next.push({ ...row });
|
|
164
|
+
indexByKey.set(key, next.length - 1);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return next;
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=postgrest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgrest.js","sourceRoot":"","sources":["../../src/lib/postgrest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
/**
|
|
3
|
+
* Winston logger for the in-memory Supabase HTTP server.
|
|
4
|
+
*
|
|
5
|
+
* - **`debug: true`**: level `debug` — logs every request line, route match, and detailed outcomes.
|
|
6
|
+
* - **`debug: false`**: level `info` — logs lifecycle (listen/close) and `error` for failures;
|
|
7
|
+
* routine outcomes use `debug` so they stay hidden unless debug mode is on.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createMemorySupabaseLogger(debug: boolean): winston.Logger;
|
|
10
|
+
//# sourceMappingURL=server-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-logger.d.ts","sourceRoot":"","sources":["../../src/lib/server-logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAuBzE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createMemorySupabaseLogger = createMemorySupabaseLogger;
|
|
7
|
+
const winston_1 = __importDefault(require("winston"));
|
|
8
|
+
/**
|
|
9
|
+
* Winston logger for the in-memory Supabase HTTP server.
|
|
10
|
+
*
|
|
11
|
+
* - **`debug: true`**: level `debug` — logs every request line, route match, and detailed outcomes.
|
|
12
|
+
* - **`debug: false`**: level `info` — logs lifecycle (listen/close) and `error` for failures;
|
|
13
|
+
* routine outcomes use `debug` so they stay hidden unless debug mode is on.
|
|
14
|
+
*/
|
|
15
|
+
function createMemorySupabaseLogger(debug) {
|
|
16
|
+
return winston_1.default.createLogger({
|
|
17
|
+
defaultMeta: { service: 'supabase-in-memory-server' },
|
|
18
|
+
level: debug ? 'debug' : 'info',
|
|
19
|
+
transports: [
|
|
20
|
+
new winston_1.default.transports.Console({
|
|
21
|
+
stderrLevels: ['error', 'warn'],
|
|
22
|
+
}),
|
|
23
|
+
],
|
|
24
|
+
format: winston_1.default.format.combine(winston_1.default.format.timestamp({ format: 'HH:mm:ss.SSS' }), winston_1.default.format.errors({ stack: true }), winston_1.default.format.printf((info) => {
|
|
25
|
+
const { timestamp, level, message, service, ...meta } = info;
|
|
26
|
+
const rest = {};
|
|
27
|
+
for (const [k, v] of Object.entries(meta)) {
|
|
28
|
+
if (!k.startsWith('Symbol(') && k !== 'splat')
|
|
29
|
+
rest[k] = v;
|
|
30
|
+
}
|
|
31
|
+
const suffix = Object.keys(rest).length > 0 ? ` ${JSON.stringify(rest)}` : '';
|
|
32
|
+
return `${String(timestamp)} [${String(service)}] ${level}: ${String(message)}${suffix}`;
|
|
33
|
+
})),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=server-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-logger.js","sourceRoot":"","sources":["../../src/lib/server-logger.ts"],"names":[],"mappings":";;;;;AASA,gEAuBC;AAhCD,sDAA8B;AAE9B;;;;;;GAMG;AACH,SAAgB,0BAA0B,CAAC,KAAc;IACvD,OAAO,iBAAO,CAAC,YAAY,CAAC;QAC1B,WAAW,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE;QACrD,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QAC/B,UAAU,EAAE;YACV,IAAI,iBAAO,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;aAChC,CAAC;SACH;QACD,MAAM,EAAE,iBAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,iBAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,EACpD,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACtC,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;YAC7D,MAAM,IAAI,GAA4B,EAAE,CAAC;YACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,OAAO;oBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC;QAC3F,CAAC,CAAC,CACH;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface MemorySupabaseServerResolvedOptions {
|
|
2
|
+
host: string;
|
|
3
|
+
port: number;
|
|
4
|
+
anonKey: string;
|
|
5
|
+
serviceRoleKey: string;
|
|
6
|
+
/** When true, Winston level is `debug` and all request-level logs are emitted. */
|
|
7
|
+
debug: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Default keys when env does not set `SUPABASE_ANON_KEY` / `SUPABASE_SERVICE_ROLE_KEY`. */
|
|
10
|
+
export declare function generateDefaultProjectKeys(): {
|
|
11
|
+
anonKey: string;
|
|
12
|
+
serviceRoleKey: string;
|
|
13
|
+
};
|
|
14
|
+
export interface MemorySupabaseServerInputOptions {
|
|
15
|
+
/** When `false`, environment variables are ignored (defaults + explicit options only). @default true */
|
|
16
|
+
useEnv?: boolean;
|
|
17
|
+
host?: string;
|
|
18
|
+
port?: number;
|
|
19
|
+
/** Public anon key (sent as `apikey` for the anon client). */
|
|
20
|
+
anonKey?: string;
|
|
21
|
+
/** Service role / admin key (for `createClient(url, serviceRoleKey)` and `auth.admin`). */
|
|
22
|
+
serviceRoleKey?: string;
|
|
23
|
+
/** Alias for {@link serviceRoleKey}. */
|
|
24
|
+
adminApiKey?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Legacy: use {@link anonKey}. If set and `anonKey` is omitted, treated as anon key.
|
|
27
|
+
*/
|
|
28
|
+
supabaseKey?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Verbose logging: every request and handler detail via Winston at `debug`.
|
|
31
|
+
* When `false`, only lifecycle (`info`) and errors (`error`) are shown at default levels.
|
|
32
|
+
* @default false (also set by env `SUPABASE_JEST_MOCK_DEBUG` when `useEnv` is not `false`).
|
|
33
|
+
*/
|
|
34
|
+
debug?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Reads optional env vars used by the in-memory server and clients:
|
|
38
|
+
* - `SUPABASE_URL` — if set, host and port are taken from this URL unless overridden below.
|
|
39
|
+
* - `SUPABASE_JEST_MOCK_HOST` / `SUPABASE_JEST_MOCK_PORT` — bind address (override URL-derived listen target).
|
|
40
|
+
* - `SUPABASE_ANON_KEY` — anon `apikey`.
|
|
41
|
+
* - `SUPABASE_SERVICE_ROLE_KEY` — service role key (admin client).
|
|
42
|
+
* - `SUPABASE_JEST_MOCK_DEBUG` — if `1`, `true`, or `yes`, enables {@link MemorySupabaseServerInputOptions.debug}.
|
|
43
|
+
*/
|
|
44
|
+
export declare function readMemorySupabaseServerEnv(): MemorySupabaseServerInputOptions;
|
|
45
|
+
/**
|
|
46
|
+
* Produces final listen address and project keys after merging env (unless `useEnv: false`) and defaults.
|
|
47
|
+
*
|
|
48
|
+
* @param options - Explicit overrides; spread on top of `readMemorySupabaseServerEnv()` when `useEnv !== false`.
|
|
49
|
+
* @returns Resolved `host`, `port`, `anonKey`, and `serviceRoleKey`.
|
|
50
|
+
*/
|
|
51
|
+
export declare function resolveMemorySupabaseServerOptions(options?: MemorySupabaseServerInputOptions): MemorySupabaseServerResolvedOptions;
|
|
52
|
+
//# sourceMappingURL=server-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-options.d.ts","sourceRoot":"","sources":["../../src/lib/server-options.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mCAAmC;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,KAAK,EAAE,OAAO,CAAC;CAChB;AAKD,4FAA4F;AAC5F,wBAAgB,0BAA0B,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAKxF;AAcD,MAAM,WAAW,gCAAgC;IAC/C,wGAAwG;IACxG,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,IAAI,gCAAgC,CAuB9E;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,GAAE,gCAAqC,GAC7C,mCAAmC,CAWrC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateDefaultProjectKeys = generateDefaultProjectKeys;
|
|
4
|
+
exports.readMemorySupabaseServerEnv = readMemorySupabaseServerEnv;
|
|
5
|
+
exports.resolveMemorySupabaseServerOptions = resolveMemorySupabaseServerOptions;
|
|
6
|
+
const jwt_js_1 = require("./jwt.js");
|
|
7
|
+
const ENV_HOST = 'SUPABASE_JEST_MOCK_HOST';
|
|
8
|
+
const ENV_PORT = 'SUPABASE_JEST_MOCK_PORT';
|
|
9
|
+
/** Default keys when env does not set `SUPABASE_ANON_KEY` / `SUPABASE_SERVICE_ROLE_KEY`. */
|
|
10
|
+
function generateDefaultProjectKeys() {
|
|
11
|
+
return {
|
|
12
|
+
anonKey: (0, jwt_js_1.encodeMemoryJwt)({ iss: 'supabase-in-memory-server', role: 'anon' }),
|
|
13
|
+
serviceRoleKey: (0, jwt_js_1.encodeMemoryJwt)({ iss: 'supabase-in-memory-server', role: 'service_role' }),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function parseUrlForListen(raw) {
|
|
17
|
+
try {
|
|
18
|
+
const u = new URL(raw);
|
|
19
|
+
const host = u.hostname;
|
|
20
|
+
const port = u.port !== '' ? parseInt(u.port, 10) : u.protocol === 'https:' ? 443 : 80;
|
|
21
|
+
if (!host)
|
|
22
|
+
return undefined;
|
|
23
|
+
return { host, port };
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Reads optional env vars used by the in-memory server and clients:
|
|
31
|
+
* - `SUPABASE_URL` — if set, host and port are taken from this URL unless overridden below.
|
|
32
|
+
* - `SUPABASE_JEST_MOCK_HOST` / `SUPABASE_JEST_MOCK_PORT` — bind address (override URL-derived listen target).
|
|
33
|
+
* - `SUPABASE_ANON_KEY` — anon `apikey`.
|
|
34
|
+
* - `SUPABASE_SERVICE_ROLE_KEY` — service role key (admin client).
|
|
35
|
+
* - `SUPABASE_JEST_MOCK_DEBUG` — if `1`, `true`, or `yes`, enables {@link MemorySupabaseServerInputOptions.debug}.
|
|
36
|
+
*/
|
|
37
|
+
function readMemorySupabaseServerEnv() {
|
|
38
|
+
const out = {};
|
|
39
|
+
const fromUrl = process.env.SUPABASE_URL
|
|
40
|
+
? parseUrlForListen(process.env.SUPABASE_URL)
|
|
41
|
+
: undefined;
|
|
42
|
+
if (fromUrl) {
|
|
43
|
+
out.host = fromUrl.host;
|
|
44
|
+
out.port = fromUrl.port;
|
|
45
|
+
}
|
|
46
|
+
if (process.env[ENV_HOST])
|
|
47
|
+
out.host = process.env[ENV_HOST];
|
|
48
|
+
if (process.env[ENV_PORT]) {
|
|
49
|
+
const p = parseInt(process.env[ENV_PORT], 10);
|
|
50
|
+
if (!Number.isNaN(p))
|
|
51
|
+
out.port = p;
|
|
52
|
+
}
|
|
53
|
+
if (process.env.SUPABASE_ANON_KEY)
|
|
54
|
+
out.anonKey = process.env.SUPABASE_ANON_KEY;
|
|
55
|
+
if (process.env.SUPABASE_SERVICE_ROLE_KEY) {
|
|
56
|
+
out.serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY;
|
|
57
|
+
}
|
|
58
|
+
const debugRaw = process.env.SUPABASE_JEST_MOCK_DEBUG?.trim().toLowerCase();
|
|
59
|
+
if (debugRaw === '1' || debugRaw === 'true' || debugRaw === 'yes') {
|
|
60
|
+
out.debug = true;
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Produces final listen address and project keys after merging env (unless `useEnv: false`) and defaults.
|
|
66
|
+
*
|
|
67
|
+
* @param options - Explicit overrides; spread on top of `readMemorySupabaseServerEnv()` when `useEnv !== false`.
|
|
68
|
+
* @returns Resolved `host`, `port`, `anonKey`, and `serviceRoleKey`.
|
|
69
|
+
*/
|
|
70
|
+
function resolveMemorySupabaseServerOptions(options = {}) {
|
|
71
|
+
const useEnv = options.useEnv !== false;
|
|
72
|
+
const env = useEnv ? readMemorySupabaseServerEnv() : {};
|
|
73
|
+
const merged = { ...env, ...options };
|
|
74
|
+
const defaults = generateDefaultProjectKeys();
|
|
75
|
+
const anonKey = merged.anonKey ?? merged.supabaseKey ?? defaults.anonKey;
|
|
76
|
+
const serviceRoleKey = merged.serviceRoleKey ?? merged.adminApiKey ?? defaults.serviceRoleKey;
|
|
77
|
+
const host = merged.host ?? '127.0.0.1';
|
|
78
|
+
const port = merged.port ?? 0;
|
|
79
|
+
const debug = merged.debug === true;
|
|
80
|
+
return { host, port, anonKey, serviceRoleKey, debug };
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=server-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-options.js","sourceRoot":"","sources":["../../src/lib/server-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type IncomingMessage, type ServerResponse } from 'node:http';
|
|
2
|
+
import type { Logger } from 'winston';
|
|
3
|
+
import { AuthMemory } from '../lib/auth-memory.js';
|
|
4
|
+
import { MemoryStore } from '../lib/memory-store.js';
|
|
5
|
+
/**
|
|
6
|
+
* HTTP application: validates `apikey`, then dispatches to auth or REST handlers.
|
|
7
|
+
* Owns {@link MemoryStore} and {@link AuthMemory} for the lifetime of the server.
|
|
8
|
+
*/
|
|
9
|
+
export declare class MemorySupabaseHttpServer {
|
|
10
|
+
private readonly anonKey;
|
|
11
|
+
private readonly serviceRoleKey;
|
|
12
|
+
private readonly logger;
|
|
13
|
+
readonly store: MemoryStore;
|
|
14
|
+
readonly auth: AuthMemory;
|
|
15
|
+
constructor(anonKey: string, serviceRoleKey: string, logger: Logger);
|
|
16
|
+
private buildContext;
|
|
17
|
+
/**
|
|
18
|
+
* Full request pipeline (OPTIONS, apikey check, auth routes, REST routes, 404).
|
|
19
|
+
*/
|
|
20
|
+
handleRequest(req: IncomingMessage, res: ServerResponse): Promise<void>;
|
|
21
|
+
/** For `http.createServer` — wraps async handler without floating promises. */
|
|
22
|
+
createNodeListener(): (req: IncomingMessage, res: ServerResponse) => void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=MemorySupabaseHttpServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemorySupabaseHttpServer.d.ts","sourceRoot":"","sources":["../../src/memory-server/MemorySupabaseHttpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAEtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAarD;;;GAGG;AACH,qBAAa,wBAAwB;IAKjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,QAAQ,CAAC,KAAK,cAAqB;IACnC,QAAQ,CAAC,IAAI,aAAoB;gBAGd,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM;IAGjC,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA+C7E,+EAA+E;IAC/E,kBAAkB,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI;CAK1E"}
|