@supacloud/lite 0.2.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.
Files changed (108) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/LICENSE +201 -0
  3. package/LICENSES/PGLITE-APACHE-2.0.txt +176 -0
  4. package/LICENSES/TINBASE-MIT.txt +21 -0
  5. package/README.md +170 -0
  6. package/RELEASING.md +22 -0
  7. package/THIRD_PARTY_NOTICES.md +24 -0
  8. package/dist/cli.js +9018 -0
  9. package/dist/index.d.ts +13 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +8469 -0
  12. package/dist/project-runtime.d.ts +65 -0
  13. package/dist/project-runtime.d.ts.map +1 -0
  14. package/dist/vendor/tinbase/auth/handler.d.ts +140 -0
  15. package/dist/vendor/tinbase/auth/handler.d.ts.map +1 -0
  16. package/dist/vendor/tinbase/auth/inbox.d.ts +34 -0
  17. package/dist/vendor/tinbase/auth/inbox.d.ts.map +1 -0
  18. package/dist/vendor/tinbase/auth/oauth.d.ts +88 -0
  19. package/dist/vendor/tinbase/auth/oauth.d.ts.map +1 -0
  20. package/dist/vendor/tinbase/auth/password.d.ts +9 -0
  21. package/dist/vendor/tinbase/auth/password.d.ts.map +1 -0
  22. package/dist/vendor/tinbase/auth/qr.d.ts +9 -0
  23. package/dist/vendor/tinbase/auth/qr.d.ts.map +1 -0
  24. package/dist/vendor/tinbase/auth/rate-limit.d.ts +34 -0
  25. package/dist/vendor/tinbase/auth/rate-limit.d.ts.map +1 -0
  26. package/dist/vendor/tinbase/auth/redirect.d.ts +21 -0
  27. package/dist/vendor/tinbase/auth/redirect.d.ts.map +1 -0
  28. package/dist/vendor/tinbase/auth/settings.d.ts +56 -0
  29. package/dist/vendor/tinbase/auth/settings.d.ts.map +1 -0
  30. package/dist/vendor/tinbase/auth/totp.d.ts +20 -0
  31. package/dist/vendor/tinbase/auth/totp.d.ts.map +1 -0
  32. package/dist/vendor/tinbase/cron/service.d.ts +47 -0
  33. package/dist/vendor/tinbase/cron/service.d.ts.map +1 -0
  34. package/dist/vendor/tinbase/db/bootstrap.d.ts +21 -0
  35. package/dist/vendor/tinbase/db/bootstrap.d.ts.map +1 -0
  36. package/dist/vendor/tinbase/db/database.d.ts +168 -0
  37. package/dist/vendor/tinbase/db/database.d.ts.map +1 -0
  38. package/dist/vendor/tinbase/db/emulated.d.ts +53 -0
  39. package/dist/vendor/tinbase/db/emulated.d.ts.map +1 -0
  40. package/dist/vendor/tinbase/db/engine.d.ts +47 -0
  41. package/dist/vendor/tinbase/db/engine.d.ts.map +1 -0
  42. package/dist/vendor/tinbase/db/inspect.d.ts +19 -0
  43. package/dist/vendor/tinbase/db/inspect.d.ts.map +1 -0
  44. package/dist/vendor/tinbase/db/pglite-engine.d.ts +9 -0
  45. package/dist/vendor/tinbase/db/pglite-engine.d.ts.map +1 -0
  46. package/dist/vendor/tinbase/db/schema-diff.d.ts +32 -0
  47. package/dist/vendor/tinbase/db/schema-diff.d.ts.map +1 -0
  48. package/dist/vendor/tinbase/db/sql-compat.d.ts +33 -0
  49. package/dist/vendor/tinbase/db/sql-compat.d.ts.map +1 -0
  50. package/dist/vendor/tinbase/functions/deno-shim.d.ts +15 -0
  51. package/dist/vendor/tinbase/functions/deno-shim.d.ts.map +1 -0
  52. package/dist/vendor/tinbase/functions/handler.d.ts +36 -0
  53. package/dist/vendor/tinbase/functions/handler.d.ts.map +1 -0
  54. package/dist/vendor/tinbase/gen-types.d.ts +23 -0
  55. package/dist/vendor/tinbase/gen-types.d.ts.map +1 -0
  56. package/dist/vendor/tinbase/index.d.ts +82 -0
  57. package/dist/vendor/tinbase/index.d.ts.map +1 -0
  58. package/dist/vendor/tinbase/jwt.d.ts +31 -0
  59. package/dist/vendor/tinbase/jwt.d.ts.map +1 -0
  60. package/dist/vendor/tinbase/log-buffer.d.ts +28 -0
  61. package/dist/vendor/tinbase/log-buffer.d.ts.map +1 -0
  62. package/dist/vendor/tinbase/net/service.d.ts +72 -0
  63. package/dist/vendor/tinbase/net/service.d.ts.map +1 -0
  64. package/dist/vendor/tinbase/node/bun-server.d.ts +23 -0
  65. package/dist/vendor/tinbase/node/bun-server.d.ts.map +1 -0
  66. package/dist/vendor/tinbase/node/bundle-function.d.ts +8 -0
  67. package/dist/vendor/tinbase/node/bundle-function.d.ts.map +1 -0
  68. package/dist/vendor/tinbase/node/config-toml.d.ts +34 -0
  69. package/dist/vendor/tinbase/node/config-toml.d.ts.map +1 -0
  70. package/dist/vendor/tinbase/node/fs-driver.d.ts +27 -0
  71. package/dist/vendor/tinbase/node/fs-driver.d.ts.map +1 -0
  72. package/dist/vendor/tinbase/node/load-config.d.ts +82 -0
  73. package/dist/vendor/tinbase/node/load-config.d.ts.map +1 -0
  74. package/dist/vendor/tinbase/node/load-functions.d.ts +24 -0
  75. package/dist/vendor/tinbase/node/load-functions.d.ts.map +1 -0
  76. package/dist/vendor/tinbase/node/project.d.ts +21 -0
  77. package/dist/vendor/tinbase/node/project.d.ts.map +1 -0
  78. package/dist/vendor/tinbase/node/server-shared.d.ts +10 -0
  79. package/dist/vendor/tinbase/node/server-shared.d.ts.map +1 -0
  80. package/dist/vendor/tinbase/realtime/engine.d.ts +82 -0
  81. package/dist/vendor/tinbase/realtime/engine.d.ts.map +1 -0
  82. package/dist/vendor/tinbase/rest/build.d.ts +101 -0
  83. package/dist/vendor/tinbase/rest/build.d.ts.map +1 -0
  84. package/dist/vendor/tinbase/rest/errors.d.ts +11 -0
  85. package/dist/vendor/tinbase/rest/errors.d.ts.map +1 -0
  86. package/dist/vendor/tinbase/rest/handler.d.ts +28 -0
  87. package/dist/vendor/tinbase/rest/handler.d.ts.map +1 -0
  88. package/dist/vendor/tinbase/rest/parse.d.ts +95 -0
  89. package/dist/vendor/tinbase/rest/parse.d.ts.map +1 -0
  90. package/dist/vendor/tinbase/retention/service.d.ts +41 -0
  91. package/dist/vendor/tinbase/retention/service.d.ts.map +1 -0
  92. package/dist/vendor/tinbase/security.d.ts +23 -0
  93. package/dist/vendor/tinbase/security.d.ts.map +1 -0
  94. package/dist/vendor/tinbase/storage/driver.d.ts +17 -0
  95. package/dist/vendor/tinbase/storage/driver.d.ts.map +1 -0
  96. package/dist/vendor/tinbase/storage/handler.d.ts +76 -0
  97. package/dist/vendor/tinbase/storage/handler.d.ts.map +1 -0
  98. package/dist/vendor/tinbase/storage/image-transform.d.ts +38 -0
  99. package/dist/vendor/tinbase/storage/image-transform.d.ts.map +1 -0
  100. package/dist/vendor/tinbase/storage/s3-driver.d.ts +36 -0
  101. package/dist/vendor/tinbase/storage/s3-driver.d.ts.map +1 -0
  102. package/dist/vendor/tinbase/types.d.ts +171 -0
  103. package/dist/vendor/tinbase/types.d.ts.map +1 -0
  104. package/dist/vendor/tinbase/webhooks/service.d.ts +71 -0
  105. package/dist/vendor/tinbase/webhooks/service.d.ts.map +1 -0
  106. package/dist/version.d.ts +2 -0
  107. package/dist/version.d.ts.map +1 -0
  108. package/package.json +64 -0
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Builds SQL from a ParsedQuery + schema introspection. All row data is
3
+ * serialized to JSON inside Postgres (row_to_json/json_agg), so results come
4
+ * back with correct JSON types and zero client-side type mapping.
5
+ */
6
+ import { type SchemaInfo } from '../db/database.js';
7
+ import { type Cond, type ParsedQuery } from './parse.js';
8
+ /** A built SQL statement plus its bind params and an optional separate count query. */
9
+ export interface BuiltQuery {
10
+ /** SQL text with `$n` placeholders */
11
+ sql: string;
12
+ /** positional bind values for the placeholders */
13
+ params: unknown[];
14
+ /** separate exact-count query, emitted only when the client asked for a count */
15
+ countSql?: string;
16
+ }
17
+ /** Builds SQL for one PostgREST request against a single schema's introspection. */
18
+ export declare class QueryBuilder {
19
+ private schema;
20
+ private info;
21
+ private q;
22
+ private aliasCounter;
23
+ private consumedPaths;
24
+ /** pg-mem can't bind a table alias in UPDATE/DELETE; omit it for subset engines. */
25
+ private aliasMutations;
26
+ constructor(schema: string, info: SchemaInfo, q: ParsedQuery, opts?: {
27
+ aliasMutations?: boolean;
28
+ });
29
+ private nextAlias;
30
+ private qualify;
31
+ private table;
32
+ /** Build the SELECT (with embeds/filters/order/pagination), plus an optional count query. */
33
+ buildSelect(table: string, opts?: {
34
+ count?: boolean;
35
+ }): BuiltQuery;
36
+ /**
37
+ * Aggregate select: `count()`, `col.sum()`, `col.avg()`, `col.max()`,
38
+ * `col.min()`. Any non-aggregate column becomes an implicit GROUP BY key, so
39
+ * `select=author_id,views.sum()` yields one row per author. Output keys are
40
+ * the aggregate name (or the column's alias) and the grouping column names.
41
+ */
42
+ private buildAggregateSelect;
43
+ /**
44
+ * Build a multi-row INSERT, optionally with ON CONFLICT upsert semantics.
45
+ * @param opts.upsert merge-duplicates (do update) or ignore-duplicates (do nothing)
46
+ * @param opts.missingDefault emit `default` for absent columns instead of `null`
47
+ * @param opts.returning wrap in a CTE so select= can shape the returned rows
48
+ */
49
+ buildInsert(table: string, rows: Record<string, unknown>[], opts: {
50
+ upsert?: 'merge-duplicates' | 'ignore-duplicates';
51
+ missingDefault?: boolean;
52
+ returning: boolean;
53
+ }): BuiltQuery;
54
+ /** Build an UPDATE scoped by the base filters; SET comes from the JSON body. */
55
+ buildUpdate(table: string, body: Record<string, unknown>, opts: {
56
+ returning: boolean;
57
+ }): BuiltQuery;
58
+ /** Build a DELETE scoped by the base filters. */
59
+ buildDelete(table: string, opts: {
60
+ returning: boolean;
61
+ }): BuiltQuery;
62
+ /** Wrap a mutation in a CTE so the response can apply select= (incl. embeds). */
63
+ private wrapMutation;
64
+ private buildSelectList;
65
+ private buildEmbed;
66
+ /** Whether `columns` (order-independent) form a PK/UNIQUE key on `table`. */
67
+ private isUniqueKey;
68
+ private findRelationship;
69
+ private baseWhere;
70
+ /** Render one condition (leaf filter or and/or subtree) as a SQL boolean expression. */
71
+ renderCond(cond: Cond, alias: string): string;
72
+ private renderLogic;
73
+ /** Render the `order by` clause for the terms scoped to the given embed path (`[]` = base). */
74
+ renderOrder(path: string[], alias: string): string;
75
+ /** Render `limit`/`offset` for the given path key (`''` = base); empty when neither is set. */
76
+ renderLimitOffset(pathKey: string): string;
77
+ private assertAllPathsConsumed;
78
+ private requireColumn;
79
+ private pushParam;
80
+ }
81
+ /**
82
+ * Render a (possibly JSON-arrowed) column reference: `data->a->>b` becomes
83
+ * `"data"->'a'->>'b'`; numeric keys become array indexes.
84
+ * SECURITY: the base column is quoted as an identifier and text keys are quoted
85
+ * as literals, so a hostile column/key name can't break out of the expression.
86
+ */
87
+ export declare function renderColumnExpr(alias: string, raw: string): string;
88
+ /**
89
+ * Validate a `::type` cast against an identifier-plus-`[]` allowlist and return it.
90
+ * SECURITY: casts are interpolated raw into SQL, so this reject is the only guard
91
+ * against injection through the cast token.
92
+ * @throws ParseError when the cast is not a bare type name (optionally array).
93
+ */
94
+ export declare function sanitizeCast(cast: string): string;
95
+ /**
96
+ * Serialize a JS array into a Postgres array literal (`{a,b,...}`), recursing
97
+ * for nested arrays. Elements are double-quoted with backslash/quote escaping so
98
+ * the literal survives being bound as a parameter and cast to the target type.
99
+ */
100
+ export declare function pgArrayLiteral(arr: unknown[]): string;
101
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../../src/vendor/tinbase/rest/build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAA8D,KAAK,UAAU,EAAkB,MAAM,mBAAmB,CAAA;AAE/H,OAAO,EAKL,KAAK,IAAI,EAGT,KAAK,WAAW,EAGjB,MAAM,YAAY,CAAA;AAoBnB,uFAAuF;AACvF,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,kDAAkD;IAClD,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAKD,oFAAoF;AACpF,qBAAa,YAAY;IAQrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,CAAC;IATX,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,aAAa,CAAwB;IAE7C,oFAAoF;IACpF,OAAO,CAAC,cAAc,CAAS;gBAGrB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,EAChB,CAAC,EAAE,WAAW,EACtB,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAKrC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IAeb,6FAA6F;IAC7F,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,UAAU;IAsBtE;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;;;;OAKG;IACH,WAAW,CACT,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,kBAAkB,GAAG,mBAAmB,CAAA;QACjD,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,SAAS,EAAE,OAAO,CAAA;KACnB,GACA,UAAU;IAqDb,gFAAgF;IAChF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU;IAkBnG,iDAAiD;IACjD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU;IAWpE,iFAAiF;IACjF,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,UAAU;IA4FlB,6EAA6E;IAC7E,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,gBAAgB;IAoExB,OAAO,CAAC,SAAS;IAQjB,wFAAwF;IACxF,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAK7C,OAAO,CAAC,WAAW;IASnB,+FAA+F;IAC/F,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAalD,+FAA+F;IAC/F,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAS1C,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,SAAS;CA0BlB;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAWnE;AAOD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AASD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,CASrD"}
@@ -0,0 +1,11 @@
1
+ /** HTTP status for a Postgres SQLSTATE, following PostgREST's mapping. */
2
+ export declare function statusForSqlState(code: string): number;
3
+ /**
4
+ * Normalize any thrown value into a JSON Response: ApiError/ParseError keep
5
+ * their status; anything with a 5-char SQLSTATE is mapped via
6
+ * {@link statusForSqlState}; everything else becomes a 500.
7
+ */
8
+ export declare function errorToResponse(e: unknown): Response;
9
+ /** JSON Response helper; status 204 sends no body. */
10
+ export declare function jsonResponse(status: number, body: unknown, headers?: Record<string, string>): Response;
11
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/vendor/tinbase/rest/errors.ts"],"names":[],"mappings":"AAQA,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBtD;AAUD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,QAAQ,CAkBpD;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,QAAQ,CAKV"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The Data API: a PostgREST-compatible REST layer over /rest/v1/*. Routes
3
+ * table CRUD and RPC calls, parses the query string, delegates SQL generation
4
+ * to {@link QueryBuilder}, and renders PostgREST-shaped responses (Content-Range
5
+ * counts, singular-object media type, Prefer handling).
6
+ */
7
+ import { type Database } from '../db/database.js';
8
+ import { type RequestContext } from '../types.js';
9
+ /** Dispatches /rest/v1/* requests to table or RPC handling and builds responses. */
10
+ export declare class RestHandler {
11
+ private db;
12
+ /** Schemas reachable through the Data API for non-privileged roles (PostgREST db-schemas). */
13
+ private exposedSchemas;
14
+ /** Max rows a read returns (PostgREST db-max-rows). Undefined = unlimited. */
15
+ private maxRows?;
16
+ constructor(db: Database, opts?: {
17
+ exposedSchemas?: string[];
18
+ maxRows?: number;
19
+ });
20
+ /** Entry point: resolve the profile schema, enforce schema exposure, route to table/rpc. */
21
+ handle(req: Request, ctx: RequestContext, url: URL): Promise<Response>;
22
+ private handleTable;
23
+ private runMutation;
24
+ private dataResponse;
25
+ private handleRpc;
26
+ private runRpc;
27
+ }
28
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/vendor/tinbase/rest/handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAA4B,KAAK,QAAQ,EAAqB,MAAM,mBAAmB,CAAA;AAC9F,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAyE3D,oFAAoF;AACpF,qBAAa,WAAW;IAOpB,OAAO,CAAC,EAAE;IANZ,8FAA8F;IAC9F,OAAO,CAAC,cAAc,CAAU;IAChC,8EAA8E;IAC9E,OAAO,CAAC,OAAO,CAAC,CAAQ;gBAGd,EAAE,EAAE,QAAQ,EACpB,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAMxD,4FAA4F;IACtF,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;YAmC9D,WAAW;YAoHX,WAAW;IA4CzB,OAAO,CAAC,YAAY;YA4CN,SAAS;YAqET,MAAM;CAmFrB"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Parser for the PostgREST query grammar as emitted by supabase-js
3
+ * (postgrest-js): select trees with embedded resources, filter operators,
4
+ * and/or logic trees, ordering, and pagination.
5
+ */
6
+ /** A selected column, optionally aliased and/or cast. */
7
+ export interface SelectColumn {
8
+ kind: 'column';
9
+ /** raw column expression, may contain json arrows: data->>key */
10
+ name: string;
11
+ alias?: string;
12
+ cast?: string;
13
+ /** aggregate function applied to the column (col.sum(), count(), ...) */
14
+ aggregate?: 'avg' | 'count' | 'max' | 'min' | 'sum';
15
+ }
16
+ /** An embedded related resource, e.g. `author(name)` or `...profile(bio)`. */
17
+ export interface SelectEmbed {
18
+ kind: 'embed';
19
+ /** relation (table) name or fk hint target */
20
+ name: string;
21
+ alias?: string;
22
+ /** disambiguation hint: fk constraint name, column name, or junction table */
23
+ hint?: string;
24
+ /** `!inner` - turn the embed into an inner join (filters out unmatched base rows) */
25
+ inner: boolean;
26
+ children: SelectItem[];
27
+ /** `...rel` spread - merge the related row's columns into the parent instead of nesting */
28
+ spread: boolean;
29
+ }
30
+ /** One entry in a `select=` list: a plain column or an embedded resource. */
31
+ export type SelectItem = SelectColumn | SelectEmbed;
32
+ /** A single `column=op.value` filter, possibly scoped to an embed path. */
33
+ export interface FilterCond {
34
+ kind: 'filter';
35
+ /** embed path, [] = base table */
36
+ path: string[];
37
+ column: string;
38
+ negated: boolean;
39
+ op: string;
40
+ value: string;
41
+ /** text-search config, e.g. fts(english).query */
42
+ ftsConfig?: string;
43
+ }
44
+ /** An `and(...)`/`or(...)` group of conditions, optionally negated with `not`. */
45
+ export interface LogicCond {
46
+ kind: 'logic';
47
+ path: string[];
48
+ op: 'and' | 'or';
49
+ negated: boolean;
50
+ conditions: Cond[];
51
+ }
52
+ /** A leaf filter or an and/or subtree. */
53
+ export type Cond = FilterCond | LogicCond;
54
+ /** One `order=` term. `nullsFirst` undefined = let Postgres pick the default. */
55
+ export interface OrderTerm {
56
+ path: string[];
57
+ column: string;
58
+ asc: boolean;
59
+ nullsFirst?: boolean;
60
+ }
61
+ /** The fully parsed query string, consumed by the QueryBuilder. */
62
+ export interface ParsedQuery {
63
+ /** select tree; defaults to a single `*` column when no `select=` was given */
64
+ select: SelectItem[];
65
+ /** base and embed-scoped filters, plus and/or logic trees */
66
+ conditions: Cond[];
67
+ /** ordering terms, each tagged with the embed path it applies to */
68
+ order: OrderTerm[];
69
+ /** per-path row limit; key = path joined with '.', '' = base */
70
+ limits: Map<string, number>;
71
+ /** per-path row offset; same keying as `limits` */
72
+ offsets: Map<string, number>;
73
+ /** `on_conflict=` target columns for upsert */
74
+ onConflict?: string[];
75
+ /** explicit insert column set from `columns=`; absent = infer from the body rows */
76
+ columns?: string[];
77
+ }
78
+ /** Thrown on malformed query syntax; mapped to a 400 PGRST100 by the handler. */
79
+ export declare class ParseError extends Error {
80
+ }
81
+ /** PostgREST filter operator → SQL operator/keyword. */
82
+ export declare const FILTER_OPS: Record<string, string>;
83
+ /** Parse a full URLSearchParams into a {@link ParsedQuery}. Unknown reserved keys and `apikey` are skipped. */
84
+ export declare function parseQuery(searchParams: URLSearchParams): ParsedQuery;
85
+ /** Split on a delimiter, ignoring delimiters inside parens and double quotes. */
86
+ export declare function splitTopLevel(str: string, delim: string): string[];
87
+ /** Strip surrounding double quotes and unescape `\"`; passthrough when unquoted. */
88
+ export declare function unquote(s: string): string;
89
+ /**
90
+ * Parse a `select=` list into select items (columns and embeds), splitting at
91
+ * top level so nested embeds and quoted names stay intact.
92
+ * Grammar example: `select=a,b:c,d::text,rel!hint!inner(x,nested(y)),...spread(a)`
93
+ */
94
+ export declare function parseSelect(value: string): SelectItem[];
95
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/vendor/tinbase/rest/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * In-process data-retention sweeper. Periodically purges expired or stale rows
3
+ * that would otherwise accumulate forever: consumed/expired one-time tokens,
4
+ * revoked and aged-out refresh tokens, expired MFA challenges and OAuth flow
5
+ * state, and audit-log entries past the retention window.
6
+ *
7
+ * Supports GDPR data-minimization and keeps the auth tables from growing
8
+ * unbounded. All windows are configurable; a window of 0 disables that sweep.
9
+ */
10
+ import type { Database } from '../db/database.js';
11
+ /** Retention windows for the background sweep; a window of 0 disables that sweep. */
12
+ export interface RetentionConfig {
13
+ /** How often to run a sweep (ms). Default 1 hour. */
14
+ intervalMs?: number;
15
+ /** Delete audit_log_entries older than this many days (0 = keep forever). Default 90. */
16
+ auditLogDays?: number;
17
+ /** Delete revoked/expired refresh tokens older than this many days (0 = keep). Default 30. */
18
+ refreshTokenDays?: number;
19
+ }
20
+ /** Periodically purges expired/stale auth rows so those tables can't grow unbounded. */
21
+ export declare class RetentionService {
22
+ private db;
23
+ private now;
24
+ private timer;
25
+ private inFlight;
26
+ private readonly intervalMs;
27
+ private readonly auditLogDays;
28
+ private readonly refreshTokenDays;
29
+ constructor(db: Database, config?: RetentionConfig, now?: () => Date);
30
+ /** Sweep once at boot, then on the configured interval; no-op if already running. */
31
+ start(): void;
32
+ /**
33
+ * Stop future sweeps and wait for any in-flight one to settle, so the caller
34
+ * can safely close the database without racing a queued sweep query.
35
+ */
36
+ stop(): Promise<void>;
37
+ /** Run a single retention pass (also callable directly in tests). */
38
+ sweep(): Promise<void>;
39
+ private run;
40
+ }
41
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/vendor/tinbase/retention/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yFAAyF;IACzF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAID,wFAAwF;AACxF,qBAAa,gBAAgB;IAYzB,OAAO,CAAC,EAAE;IAEV,OAAO,CAAC,GAAG;IAbb,OAAO,CAAC,KAAK,CAA8C;IAK3D,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;gBAG/B,EAAE,EAAE,QAAQ,EACpB,MAAM,GAAE,eAAoB,EACpB,GAAG,GAAE,MAAM,IAAuB;IAO5C,qFAAqF;IACrF,KAAK,IAAI,IAAI;IAUb;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,qEAAqE;IAC/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAed,GAAG;CAOlB"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Whether `host` exposes the server beyond loopback. Wildcard binds
3
+ * (`0.0.0.0`, `::`) and any concrete non-loopback address count as exposed.
4
+ */
5
+ export declare function isNetworkExposed(host: string | undefined): boolean;
6
+ /** Inputs to {@link assertSecretsSafe}: the bind host, the secrets in use, and a warning sink. */
7
+ export interface SecretGuardInput {
8
+ /** host the server is bound to; drives the loopback-vs-exposed decision */
9
+ host?: string;
10
+ /** the JWT secret in use; a weak/default value is only allowed on loopback */
11
+ jwtSecret: string;
12
+ /** whether the vault key was derived from the JWT secret rather than set explicitly */
13
+ vaultKeyDerived: boolean;
14
+ /** sink for non-fatal warnings (loopback-only weak-secret notices) */
15
+ warn: (msg: string) => void;
16
+ }
17
+ /**
18
+ * Enforce secret hygiene at boot. On a loopback bind, weak defaults only warn;
19
+ * on a network-exposed bind they throw, refusing to start with forgeable
20
+ * credentials. Returns nothing; throws {@link Error} to abort startup.
21
+ */
22
+ export declare function assertSecretsSafe(input: SecretGuardInput): void;
23
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/vendor/tinbase/security.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAElE;AAED,kGAAkG;AAClG,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAA;IACjB,uFAAuF;IACvF,eAAe,EAAE,OAAO,CAAA;IACxB,sEAAsE;IACtE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CA6B/D"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Storage backends for object bytes. The default is in-memory; persistent
3
+ * drivers (disk, S3) implement the same StorageDriver interface.
4
+ */
5
+ import type { StorageDriver } from '../types.js';
6
+ /**
7
+ * Default driver - keeps object bytes in memory, keyed by "bucket/key".
8
+ * Browser-safe (no fs); bytes are lost on restart.
9
+ */
10
+ export declare class MemoryStorageDriver implements StorageDriver {
11
+ private files;
12
+ put(key: string, data: Uint8Array): Promise<void>;
13
+ get(key: string): Promise<Uint8Array | null>;
14
+ delete(key: string): Promise<void>;
15
+ deleteMany(keys: string[]): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../../src/vendor/tinbase/storage/driver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,KAAK,CAAgC;IAEvC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhD"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * storage-api-compatible endpoints (/storage/v1/*) for supabase-js's
3
+ * StorageClient. Object metadata lives in storage.objects (RLS enforced
4
+ * through the request role); bytes live behind a StorageDriver.
5
+ */
6
+ import type { Database } from '../db/database.js';
7
+ import type { BucketSeed, RequestContext, StorageDriver } from '../types.js';
8
+ /** Construction options for {@link StorageHandler}. */
9
+ export interface StorageConfig {
10
+ /** secret used to sign and verify signed download/upload URL tokens */
11
+ jwtSecret: string;
12
+ /** default per-bucket byte limit applied when a bucket sets none (config.toml storage.file_size_limit) */
13
+ defaultFileSizeLimit?: number;
14
+ /** sink for progress/warning lines (e.g. image-transform no-op); no-op when omitted */
15
+ log?: (message: string) => void;
16
+ }
17
+ /** Routes /storage/v1/* requests to bucket and object operations. */
18
+ export declare class StorageHandler {
19
+ private db;
20
+ private driver;
21
+ private config;
22
+ private tusUploads;
23
+ private mutationTail;
24
+ constructor(db: Database, driver: StorageDriver, config: StorageConfig);
25
+ /** Create the given buckets if they don't already exist (config.toml storage.buckets.*). */
26
+ ensureBuckets(buckets: BucketSeed[]): Promise<void>;
27
+ /** Entry point: match the path to a bucket/object endpoint and map thrown errors to storage-api responses. */
28
+ handle(req: Request, ctx: RequestContext, url: URL): Promise<Response>;
29
+ private withMutation;
30
+ private requireService;
31
+ private createBucket;
32
+ private listBuckets;
33
+ private getBucket;
34
+ private updateBucket;
35
+ private deleteBucket;
36
+ private emptyBucket;
37
+ private loadBucket;
38
+ private upload;
39
+ private transformImageResponse;
40
+ /** Write immutable bytes first, then atomically switch the metadata pointer. */
41
+ private persistObject;
42
+ private handleTus;
43
+ /** Append a chunk at `offset`; finalize the object once fully received. */
44
+ private appendTus;
45
+ private pruneTusUploads;
46
+ private effectiveFileSizeLimit;
47
+ private preflightObjectWrite;
48
+ private download;
49
+ private downloadPublic;
50
+ private serveObject;
51
+ private removeObjects;
52
+ private removeOne;
53
+ private moveOrCopy;
54
+ private stageObjectBytes;
55
+ private discardStagedBytes;
56
+ private readObjectBytes;
57
+ private cleanupObjectRows;
58
+ private listObjects;
59
+ private objectInfo;
60
+ private signUrl;
61
+ private signUrls;
62
+ private redeemSignedUrl;
63
+ private signUploadUrl;
64
+ private redeemSignedUpload;
65
+ private makeSignToken;
66
+ }
67
+ interface MultipartPart {
68
+ name: string;
69
+ filename?: string;
70
+ contentType?: string;
71
+ data: Uint8Array;
72
+ }
73
+ /** Minimal byte-safe multipart/form-data parser (works identically on Node, Bun, browsers). */
74
+ export declare function parseMultipart(bytes: Uint8Array, boundary: string): MultipartPart[];
75
+ export {};
76
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/vendor/tinbase/storage/handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAQjD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE5E,uDAAuD;AACvD,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAA;IACjB,0GAA0G;IAC1G,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,uFAAuF;IACvF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAChC;AAqGD,qEAAqE;AACrE,qBAAa,cAAc;IAKvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,YAAY,CAAoB;gBAG9B,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa;IAG/B,4FAA4F;IACtF,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAazD,8GAA8G;IACxG,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;YA6G9D,YAAY;IAgB1B,OAAO,CAAC,cAAc;YAOR,YAAY;YA2BZ,WAAW;YAKX,SAAS;YAMT,YAAY;YAqBZ,YAAY;YAYZ,WAAW;YAUX,UAAU;YAKV,MAAM;YAyDN,sBAAsB;IAgBpC,gFAAgF;YAClE,aAAa;YA2Cb,SAAS;IA6KvB,2EAA2E;YAC7D,SAAS;IA0CvB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,sBAAsB;YAMhB,oBAAoB;YA2CpB,QAAQ;YASR,cAAc;YAYd,WAAW;YAoBX,aAAa;YAeb,SAAS;YAUT,UAAU;YAuEV,gBAAgB;YAUhB,kBAAkB;YASlB,eAAe;YAKf,iBAAiB;YAcjB,WAAW;YAsDX,UAAU;YAyBV,OAAO;YAmBP,QAAQ;YAiBR,eAAe;YAef,aAAa;YAab,kBAAkB;IAehC,OAAO,CAAC,aAAa;CAUtB;AAsHD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAqCnF"}
@@ -0,0 +1,38 @@
1
+ export type ImageTransformResize = 'contain' | 'fill';
2
+ export type ImageTransformFormat = 'origin' | 'jpeg' | 'png' | 'webp';
3
+ export interface ImageTransformOptions {
4
+ width?: number;
5
+ height?: number;
6
+ resize: ImageTransformResize;
7
+ quality?: number;
8
+ format: ImageTransformFormat;
9
+ }
10
+ export interface ImageTransformRequestOptions {
11
+ width?: number;
12
+ height?: number;
13
+ resize?: ImageTransformResize | 'cover';
14
+ quality?: number;
15
+ format?: ImageTransformFormat;
16
+ }
17
+ export interface ImageTransformError {
18
+ ok: false;
19
+ status: 400 | 413 | 415 | 422;
20
+ error: string;
21
+ message: string;
22
+ }
23
+ export type ImageTransformParseResult = {
24
+ ok: true;
25
+ value: ImageTransformOptions;
26
+ } | ImageTransformError;
27
+ export type ImageTransformResult = {
28
+ ok: true;
29
+ bytes: Uint8Array;
30
+ contentType: string;
31
+ } | ImageTransformError;
32
+ /** Parse Supabase Storage image query parameters without decoding the source. */
33
+ export declare function parseImageTransform(query: URLSearchParams): ImageTransformParseResult;
34
+ /** Encode a transform object into the query shape used by render/image URLs. */
35
+ export declare function imageTransformToSearchParams(options?: ImageTransformRequestOptions): URLSearchParams;
36
+ /** Decode, resize, and encode an image using the Bun.Image-compatible subset. */
37
+ export declare function transformImage(bytes: Uint8Array, options: ImageTransformOptions): Promise<ImageTransformResult>;
38
+ //# sourceMappingURL=image-transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-transform.d.ts","sourceRoot":"","sources":["../../../../src/vendor/tinbase/storage/image-transform.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,MAAM,CAAA;AACrD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAErE,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,oBAAoB,CAAA;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAA;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,oBAAoB,CAAA;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,KAAK,CAAA;IACT,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GAC1C,mBAAmB,CAAA;AAEvB,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACpD,mBAAmB,CAAA;AA2CvB,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,yBAAyB,CA6BrF;AAED,gFAAgF;AAChF,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE,4BAA4B,GAAG,eAAe,CASpG;AAwDD,iFAAiF;AACjF,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA6CrH"}
@@ -0,0 +1,36 @@
1
+ import type { StorageDriver } from '../types.js';
2
+ export interface S3StorageDriverOptions {
3
+ bucket?: string;
4
+ prefix?: string;
5
+ endpoint?: string;
6
+ region?: string;
7
+ accessKeyId?: string;
8
+ secretAccessKey?: string;
9
+ sessionToken?: string;
10
+ virtualHostedStyle?: boolean;
11
+ partSize?: number;
12
+ queueSize?: number;
13
+ retry?: number;
14
+ requestPayer?: boolean;
15
+ }
16
+ export interface S3StorageFileLike {
17
+ exists(): Promise<boolean>;
18
+ bytes(): Promise<Uint8Array>;
19
+ write(data: Uint8Array): Promise<unknown>;
20
+ delete(): Promise<void>;
21
+ }
22
+ export interface S3StorageClientLike {
23
+ file(path: string): S3StorageFileLike;
24
+ }
25
+ export declare class S3StorageDriver implements StorageDriver {
26
+ readonly cleanupFailureMode: "propagate";
27
+ private readonly client;
28
+ private readonly prefix;
29
+ constructor(options?: S3StorageDriverOptions, client?: S3StorageClientLike);
30
+ put(key: string, data: Uint8Array): Promise<void>;
31
+ get(key: string): Promise<Uint8Array | null>;
32
+ delete(key: string): Promise<void>;
33
+ deleteMany(keys: string[]): Promise<void>;
34
+ private objectKey;
35
+ }
36
+ //# sourceMappingURL=s3-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-driver.d.ts","sourceRoot":"","sources":["../../../../src/vendor/tinbase/storage/s3-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1B,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,CAAA;IAC5B,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACzC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAA;CACtC;AA4DD,qBAAa,eAAgB,YAAW,aAAa;IACnD,QAAQ,CAAC,kBAAkB,EAAG,WAAW,CAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAEnB,OAAO,GAAE,sBAA2B,EAAE,MAAM,CAAC,EAAE,mBAAmB;IAMxE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAY5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,OAAO,CAAC,SAAS;CAGlB"}