@polardbx/pxbaas 0.1.0-beta.1 → 0.1.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +224 -0
- package/dist/app/local-index.d.ts +70 -0
- package/dist/app/local-index.d.ts.map +1 -0
- package/dist/app/local-index.js +140 -0
- package/dist/app/local-index.js.map +1 -0
- package/dist/app/preflight.d.ts +24 -1
- package/dist/app/preflight.d.ts.map +1 -1
- package/dist/app/preflight.js +47 -11
- package/dist/app/preflight.js.map +1 -1
- package/dist/app/spec-lint.d.ts.map +1 -1
- package/dist/app/spec-lint.js +16 -0
- package/dist/app/spec-lint.js.map +1 -1
- package/dist/app/templates.d.ts +24 -0
- package/dist/app/templates.d.ts.map +1 -1
- package/dist/app/templates.js.map +1 -1
- package/dist/cli/help-guides.d.ts +17 -0
- package/dist/cli/help-guides.d.ts.map +1 -0
- package/dist/cli/help-guides.js +132 -0
- package/dist/cli/help-guides.js.map +1 -0
- package/dist/cli/root.d.ts.map +1 -1
- package/dist/cli/root.js +6 -0
- package/dist/cli/root.js.map +1 -1
- package/dist/commands/app/index.d.ts.map +1 -1
- package/dist/commands/app/index.js +687 -47
- package/dist/commands/app/index.js.map +1 -1
- package/dist/commands/completion/index.d.ts.map +1 -1
- package/dist/commands/completion/index.js +5 -1
- package/dist/commands/completion/index.js.map +1 -1
- package/dist/commands/data/index.d.ts +52 -0
- package/dist/commands/data/index.d.ts.map +1 -1
- package/dist/commands/data/index.js +201 -39
- package/dist/commands/data/index.js.map +1 -1
- package/dist/commands/db/index.d.ts +15 -0
- package/dist/commands/db/index.d.ts.map +1 -1
- package/dist/commands/db/index.js +200 -55
- package/dist/commands/db/index.js.map +1 -1
- package/dist/commands/functions/new.d.ts +4 -0
- package/dist/commands/functions/new.d.ts.map +1 -1
- package/dist/commands/functions/new.js +24 -9
- package/dist/commands/functions/new.js.map +1 -1
- package/dist/commands/gen/index.d.ts.map +1 -1
- package/dist/commands/gen/index.js +13 -10
- package/dist/commands/gen/index.js.map +1 -1
- package/dist/commands/guide/index.d.ts +8 -0
- package/dist/commands/guide/index.d.ts.map +1 -0
- package/dist/commands/guide/index.js +20 -0
- package/dist/commands/guide/index.js.map +1 -0
- package/dist/commands/instance/index.d.ts.map +1 -1
- package/dist/commands/instance/index.js +120 -0
- package/dist/commands/instance/index.js.map +1 -1
- package/dist/commands/login/index.d.ts.map +1 -1
- package/dist/commands/login/index.js +23 -63
- package/dist/commands/login/index.js.map +1 -1
- package/dist/commands/profile/import-env.d.ts +7 -2
- package/dist/commands/profile/import-env.d.ts.map +1 -1
- package/dist/commands/profile/import-env.js +141 -16
- package/dist/commands/profile/import-env.js.map +1 -1
- package/dist/commands/profile/index.d.ts.map +1 -1
- package/dist/commands/profile/index.js +16 -1
- package/dist/commands/profile/index.js.map +1 -1
- package/dist/commands/skill/index.d.ts.map +1 -1
- package/dist/commands/skill/index.js +89 -14
- package/dist/commands/skill/index.js.map +1 -1
- package/dist/commands/storage/index.d.ts.map +1 -1
- package/dist/commands/storage/index.js +209 -7
- package/dist/commands/storage/index.js.map +1 -1
- package/dist/commands/tenant/index.d.ts +19 -0
- package/dist/commands/tenant/index.d.ts.map +1 -0
- package/dist/commands/tenant/index.js +667 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/commands/whoami/index.js +19 -0
- package/dist/commands/whoami/index.js.map +1 -1
- package/dist/credentials/credential-store.d.ts +30 -1
- package/dist/credentials/credential-store.d.ts.map +1 -1
- package/dist/credentials/credential-store.js +114 -12
- package/dist/credentials/credential-store.js.map +1 -1
- package/dist/credentials/env-file.d.ts +48 -7
- package/dist/credentials/env-file.d.ts.map +1 -1
- package/dist/credentials/env-file.js +91 -16
- package/dist/credentials/env-file.js.map +1 -1
- package/dist/credentials/index.d.ts +2 -0
- package/dist/credentials/index.d.ts.map +1 -1
- package/dist/credentials/index.js +2 -0
- package/dist/credentials/index.js.map +1 -1
- package/dist/credentials/jwt-introspect.d.ts +7 -0
- package/dist/credentials/jwt-introspect.d.ts.map +1 -1
- package/dist/credentials/jwt-introspect.js.map +1 -1
- package/dist/credentials/masker.d.ts +3 -0
- package/dist/credentials/masker.d.ts.map +1 -1
- package/dist/credentials/masker.js +3 -0
- package/dist/credentials/masker.js.map +1 -1
- package/dist/credentials/profile.d.ts +12 -0
- package/dist/credentials/profile.d.ts.map +1 -1
- package/dist/credentials/profile.js +23 -0
- package/dist/credentials/profile.js.map +1 -1
- package/dist/credentials/tty-guard.d.ts +10 -0
- package/dist/credentials/tty-guard.d.ts.map +1 -1
- package/dist/credentials/tty-guard.js +32 -0
- package/dist/credentials/tty-guard.js.map +1 -1
- package/dist/db/apply-schema.d.ts +98 -11
- package/dist/db/apply-schema.d.ts.map +1 -1
- package/dist/db/apply-schema.js +247 -80
- package/dist/db/apply-schema.js.map +1 -1
- package/dist/db/introspect.d.ts +54 -0
- package/dist/db/introspect.d.ts.map +1 -0
- package/dist/db/introspect.js +140 -0
- package/dist/db/introspect.js.map +1 -0
- package/dist/db/sql-file.d.ts +55 -0
- package/dist/db/sql-file.d.ts.map +1 -1
- package/dist/db/sql-file.js +417 -0
- package/dist/db/sql-file.js.map +1 -1
- package/dist/instance/zero-whitelist.d.ts +39 -0
- package/dist/instance/zero-whitelist.d.ts.map +1 -0
- package/dist/instance/zero-whitelist.js +67 -0
- package/dist/instance/zero-whitelist.js.map +1 -0
- package/dist/main.js +26 -3
- package/dist/main.js.map +1 -1
- package/dist/skill/agents-md.d.ts +25 -0
- package/dist/skill/agents-md.d.ts.map +1 -0
- package/dist/skill/agents-md.js +62 -0
- package/dist/skill/agents-md.js.map +1 -0
- package/dist/skill/hosts.d.ts +31 -7
- package/dist/skill/hosts.d.ts.map +1 -1
- package/dist/skill/hosts.js +65 -7
- package/dist/skill/hosts.js.map +1 -1
- package/dist/skill/installer.d.ts +15 -3
- package/dist/skill/installer.d.ts.map +1 -1
- package/dist/skill/installer.js +62 -24
- package/dist/skill/installer.js.map +1 -1
- package/dist/tenant/bundle.d.ts +66 -0
- package/dist/tenant/bundle.d.ts.map +1 -0
- package/dist/tenant/bundle.js +132 -0
- package/dist/tenant/bundle.js.map +1 -0
- package/dist/tenant/guide.d.ts +50 -0
- package/dist/tenant/guide.d.ts.map +1 -0
- package/dist/tenant/guide.js +152 -0
- package/dist/tenant/guide.js.map +1 -0
- package/dist/tenant/probe.d.ts +65 -0
- package/dist/tenant/probe.d.ts.map +1 -0
- package/dist/tenant/probe.js +159 -0
- package/dist/tenant/probe.js.map +1 -0
- package/dist/tenant/verify.d.ts +37 -0
- package/dist/tenant/verify.d.ts.map +1 -0
- package/dist/tenant/verify.js +132 -0
- package/dist/tenant/verify.js.map +1 -0
- package/dist/version.d.ts +29 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +65 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -3
- package/skills/pxbaas-app-spec/SKILL.md +4 -2
- package/skills/pxbaas-app-spec/references/deploy-options.md +3 -2
- package/skills/pxbaas-app-spec/references/runtime-contract.md +2 -2
- package/skills/pxbaas-app-spec/references/templates-examples.md +7 -4
- package/skills/pxbaas-cli/SKILL.md +26 -8
- package/skills/pxbaas-cli/references/app-deploy.md +46 -3
- package/skills/pxbaas-cli/references/auth-and-credentials.md +30 -2
- package/skills/pxbaas-cli/references/data-postgrest.md +19 -3
- package/skills/pxbaas-cli/references/db-and-meta.md +17 -0
- package/skills/pxbaas-cli/references/multi-tenant-apps.md +35 -4
- package/skills/pxbaas-cli/references/provision.md +16 -1
- package/skills/pxbaas-cli/references/safety-and-two-phase.md +42 -13
- package/skills/pxbaas-cli/references/tenant-admin.md +122 -0
- package/skills/pxbaas-cli/references/troubleshooting.md +4 -1
- package/templates/webapp/csr-bff/db/rls.json +13 -0
- package/templates/webapp/csr-bff/db/schema.sql +8 -28
- package/templates/webapp/manifest.json +131 -8
- package/templates/webapp/react-vite-hono/backend/index.ts +21 -4
- package/templates/webapp/ssr-blog/db/rls.json +13 -0
- package/templates/webapp/ssr-blog/db/schema.sql +8 -28
- package/templates/webapp/ssr-hono/backend/index.ts +50 -31
- package/templates/webapp/ssr-shop/db/rls.json +16 -0
- package/templates/webapp/ssr-shop/db/schema.sql +12 -42
- package/dist/commands/login/login.d.ts +0 -3
- package/dist/commands/login/login.d.ts.map +0 -1
- package/dist/commands/login/login.js +0 -185
- package/dist/commands/login/login.js.map +0 -1
- /package/templates/webapp/vanilla-static/frontend/{app.js → dist/app.js} +0 -0
- /package/templates/webapp/vanilla-static/frontend/{index.html → dist/index.html} +0 -0
- /package/templates/webapp/vanilla-static/frontend/{style.css → dist/style.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../src/db/introspect.ts"],"names":[],"mappings":"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"}
|
package/dist/db/sql-file.d.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* `;`, correctly ignoring separators that appear inside strings, quoted
|
|
10
10
|
* identifiers, or comments.
|
|
11
11
|
*/
|
|
12
|
+
import type { RlsTableInput, RlsPolicyInput } from "@polardbx/pxbaas-client";
|
|
12
13
|
/** Placeholder that every webapp template's db/schema.sql uses for the target schema. */
|
|
13
14
|
export declare const SCHEMA_PLACEHOLDER = "__SCHEMA__";
|
|
14
15
|
/** True when the script still contains the `__SCHEMA__` placeholder. */
|
|
@@ -46,4 +47,58 @@ export declare function buildStatementPlan(rawSql: string, schema: string): {
|
|
|
46
47
|
statements: string[];
|
|
47
48
|
substituted: boolean;
|
|
48
49
|
};
|
|
50
|
+
/**
|
|
51
|
+
* Multi-tenant variant of {@link substituteSchema}: DROP the `__SCHEMA__`.
|
|
52
|
+
* qualifier entirely instead of filling it in. The tenant-ddl connection is
|
|
53
|
+
* already bound to the tenant's own database, and cross-schema fully-qualified
|
|
54
|
+
* names are denied by GRANT / the server pre-check — so `__SCHEMA__`.`t` must
|
|
55
|
+
* become just `t`. The CLI never knows the tenant's real db_name (the resolver
|
|
56
|
+
* does not expose it), so de-qualifying is the only safe substitution.
|
|
57
|
+
*/
|
|
58
|
+
export declare function substituteSchemaForTenant(sql: string): string;
|
|
59
|
+
export interface StatementPartition {
|
|
60
|
+
/** `INSERT ... supabase._mysqlrest_rls_tables` statements. */
|
|
61
|
+
rlsTableInserts: string[];
|
|
62
|
+
/** `INSERT ... supabase._mysqlrest_rls_policies` statements. */
|
|
63
|
+
rlsPolicyInserts: string[];
|
|
64
|
+
/** Everything else (DDL, seed DML) — runs verbatim through the query channel. */
|
|
65
|
+
plain: string[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Split statements into central-registry RLS INSERTs vs. plain DDL/DML. In
|
|
69
|
+
* multi-tenant mode the RLS INSERTs MUST be diverted to the structured
|
|
70
|
+
* `/api/tenant-ddl/rls/*` endpoints (the tenant account has no GRANT on the
|
|
71
|
+
* shared `supabase` database, so a raw INSERT would be denied).
|
|
72
|
+
*/
|
|
73
|
+
export declare function partitionStatements(statements: string[]): StatementPartition;
|
|
74
|
+
/** Thrown when an RLS INSERT does not match the constrained shape we can parse. */
|
|
75
|
+
export declare class SqlParseError extends Error {
|
|
76
|
+
constructor(message: string);
|
|
77
|
+
}
|
|
78
|
+
/** Parse one `_mysqlrest_rls_tables` INSERT into structured inputs (schema dropped). */
|
|
79
|
+
export declare function parseRlsTableInsert(stmt: string): RlsTableInput[];
|
|
80
|
+
/** Parse one `_mysqlrest_rls_policies` INSERT into structured inputs (schema dropped). */
|
|
81
|
+
export declare function parseRlsPolicyInsert(stmt: string): RlsPolicyInput[];
|
|
82
|
+
/** Render an idempotent central-registry INSERT for one RLS table toggle. */
|
|
83
|
+
export declare function renderRlsTableInsert(schema: string, input: RlsTableInput): string;
|
|
84
|
+
/** Render an idempotent central-registry INSERT for one RLS policy. */
|
|
85
|
+
export declare function renderRlsPolicyInsert(schema: string, input: RlsPolicyInput): string;
|
|
86
|
+
/**
|
|
87
|
+
* Extract the table names created by a schema.sql script (for `--purge-db`).
|
|
88
|
+
* Handles `CREATE TABLE [IF NOT EXISTS] [`__SCHEMA__`.]<name>` with optional
|
|
89
|
+
* backticks. Names are returned de-qualified and de-duplicated, in first-seen order.
|
|
90
|
+
*/
|
|
91
|
+
export declare function extractCreateTableNames(sql: string): string[];
|
|
92
|
+
export interface RlsJson {
|
|
93
|
+
tables: RlsTableInput[];
|
|
94
|
+
policies: RlsPolicyInput[];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Parse + validate a declarative `db/rls.json`. Accepts the documented friendly
|
|
98
|
+
* keys (table/name/role/using/check/rlsEnabled/...) and their snake_case aliases,
|
|
99
|
+
* mapping them onto the driver's structured inputs. `table_schema` is NEVER read
|
|
100
|
+
* here — the execution layer decides it (single-tenant = --schema; multi-tenant =
|
|
101
|
+
* server-bound).
|
|
102
|
+
*/
|
|
103
|
+
export declare function parseRlsJson(text: string): RlsJson;
|
|
49
104
|
//# sourceMappingURL=sql-file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-file.d.ts","sourceRoot":"","sources":["../../src/db/sql-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAmHxD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAIhD"}
|
|
1
|
+
{"version":3,"file":"sql-file.d.ts","sourceRoot":"","sources":["../../src/db/sql-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE7E,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAmHxD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAIhD;AAMD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAQD,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iFAAiF;IACjF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAU5E;AAED,mFAAmF;AACnF,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AA2ID,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAiBjE;AAED,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CA2BnE;AAaD,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAOjF;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,CAYnF;AAGD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAU7D;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAgBD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAoDlD"}
|
package/dist/db/sql-file.js
CHANGED
|
@@ -164,4 +164,421 @@ export function buildStatementPlan(rawSql, schema) {
|
|
|
164
164
|
const sql = substituted ? substituteSchema(rawSql, schema) : rawSql;
|
|
165
165
|
return { statements: splitSqlStatements(sql), substituted };
|
|
166
166
|
}
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
// Multi-tenant schema handling (tenant self-service DDL via /api/tenant-ddl)
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
/**
|
|
171
|
+
* Multi-tenant variant of {@link substituteSchema}: DROP the `__SCHEMA__`.
|
|
172
|
+
* qualifier entirely instead of filling it in. The tenant-ddl connection is
|
|
173
|
+
* already bound to the tenant's own database, and cross-schema fully-qualified
|
|
174
|
+
* names are denied by GRANT / the server pre-check — so `__SCHEMA__`.`t` must
|
|
175
|
+
* become just `t`. The CLI never knows the tenant's real db_name (the resolver
|
|
176
|
+
* does not expose it), so de-qualifying is the only safe substitution.
|
|
177
|
+
*/
|
|
178
|
+
export function substituteSchemaForTenant(sql) {
|
|
179
|
+
return sql.replace(/`?__SCHEMA__`?\s*\.\s*/g, "");
|
|
180
|
+
}
|
|
181
|
+
/** Central-registry RLS INSERT recognizers (allow optional backticks / IGNORE). */
|
|
182
|
+
const RLS_TABLES_RE = /^\s*INSERT\s+(?:IGNORE\s+)?INTO\s+`?supabase`?\s*\.\s*`?_mysqlrest_rls_tables`?/i;
|
|
183
|
+
const RLS_POLICIES_RE = /^\s*INSERT\s+(?:IGNORE\s+)?INTO\s+`?supabase`?\s*\.\s*`?_mysqlrest_rls_policies`?/i;
|
|
184
|
+
/**
|
|
185
|
+
* Split statements into central-registry RLS INSERTs vs. plain DDL/DML. In
|
|
186
|
+
* multi-tenant mode the RLS INSERTs MUST be diverted to the structured
|
|
187
|
+
* `/api/tenant-ddl/rls/*` endpoints (the tenant account has no GRANT on the
|
|
188
|
+
* shared `supabase` database, so a raw INSERT would be denied).
|
|
189
|
+
*/
|
|
190
|
+
export function partitionStatements(statements) {
|
|
191
|
+
const rlsTableInserts = [];
|
|
192
|
+
const rlsPolicyInserts = [];
|
|
193
|
+
const plain = [];
|
|
194
|
+
for (const s of statements) {
|
|
195
|
+
if (RLS_TABLES_RE.test(s))
|
|
196
|
+
rlsTableInserts.push(s);
|
|
197
|
+
else if (RLS_POLICIES_RE.test(s))
|
|
198
|
+
rlsPolicyInserts.push(s);
|
|
199
|
+
else
|
|
200
|
+
plain.push(s);
|
|
201
|
+
}
|
|
202
|
+
return { rlsTableInserts, rlsPolicyInserts, plain };
|
|
203
|
+
}
|
|
204
|
+
/** Thrown when an RLS INSERT does not match the constrained shape we can parse. */
|
|
205
|
+
export class SqlParseError extends Error {
|
|
206
|
+
constructor(message) {
|
|
207
|
+
super(message);
|
|
208
|
+
this.name = "SqlParseError";
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/** Extract a balanced `(...)` group starting at `s[open] === '('`. */
|
|
212
|
+
function extractParenGroup(s, open) {
|
|
213
|
+
let depth = 0;
|
|
214
|
+
let inSingle = false;
|
|
215
|
+
let inDouble = false;
|
|
216
|
+
let inBacktick = false;
|
|
217
|
+
for (let i = open; i < s.length; i++) {
|
|
218
|
+
const c = s[i];
|
|
219
|
+
const next = i + 1 < s.length ? s[i + 1] : "";
|
|
220
|
+
if (inSingle) {
|
|
221
|
+
if (c === "'" && next === "'") {
|
|
222
|
+
i++;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
if (c === "'")
|
|
226
|
+
inSingle = false;
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (inDouble) {
|
|
230
|
+
if (c === '"' && next === '"') {
|
|
231
|
+
i++;
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
if (c === '"')
|
|
235
|
+
inDouble = false;
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
if (inBacktick) {
|
|
239
|
+
if (c === "`")
|
|
240
|
+
inBacktick = false;
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
if (c === "'") {
|
|
244
|
+
inSingle = true;
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
if (c === '"') {
|
|
248
|
+
inDouble = true;
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
if (c === "`") {
|
|
252
|
+
inBacktick = true;
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (c === "(")
|
|
256
|
+
depth++;
|
|
257
|
+
else if (c === ")") {
|
|
258
|
+
depth--;
|
|
259
|
+
if (depth === 0)
|
|
260
|
+
return { content: s.slice(open + 1, i), end: i + 1 };
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
throw new SqlParseError("unbalanced parentheses in statement");
|
|
264
|
+
}
|
|
265
|
+
/** Split on top-level commas, ignoring separators inside quotes/backticks/parens. */
|
|
266
|
+
function splitTopLevel(s) {
|
|
267
|
+
const out = [];
|
|
268
|
+
let depth = 0;
|
|
269
|
+
let inSingle = false;
|
|
270
|
+
let inDouble = false;
|
|
271
|
+
let inBacktick = false;
|
|
272
|
+
let cur = "";
|
|
273
|
+
for (let i = 0; i < s.length; i++) {
|
|
274
|
+
const c = s[i];
|
|
275
|
+
const next = i + 1 < s.length ? s[i + 1] : "";
|
|
276
|
+
if (inSingle) {
|
|
277
|
+
cur += c;
|
|
278
|
+
if (c === "'" && next === "'") {
|
|
279
|
+
cur += next;
|
|
280
|
+
i++;
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
if (c === "'")
|
|
284
|
+
inSingle = false;
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
if (inDouble) {
|
|
288
|
+
cur += c;
|
|
289
|
+
if (c === '"' && next === '"') {
|
|
290
|
+
cur += next;
|
|
291
|
+
i++;
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
if (c === '"')
|
|
295
|
+
inDouble = false;
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
if (inBacktick) {
|
|
299
|
+
cur += c;
|
|
300
|
+
if (c === "`")
|
|
301
|
+
inBacktick = false;
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
if (c === "'") {
|
|
305
|
+
inSingle = true;
|
|
306
|
+
cur += c;
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
if (c === '"') {
|
|
310
|
+
inDouble = true;
|
|
311
|
+
cur += c;
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
if (c === "`") {
|
|
315
|
+
inBacktick = true;
|
|
316
|
+
cur += c;
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
if (c === "(" || c === "[") {
|
|
320
|
+
depth++;
|
|
321
|
+
cur += c;
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
324
|
+
if (c === ")" || c === "]") {
|
|
325
|
+
depth--;
|
|
326
|
+
cur += c;
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
if (c === "," && depth === 0) {
|
|
330
|
+
out.push(cur);
|
|
331
|
+
cur = "";
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
cur += c;
|
|
335
|
+
}
|
|
336
|
+
if (cur.trim() !== "")
|
|
337
|
+
out.push(cur);
|
|
338
|
+
return out.map((x) => x.trim()).filter((x) => x !== "");
|
|
339
|
+
}
|
|
340
|
+
function parseLiteral(tok) {
|
|
341
|
+
const t = tok.trim();
|
|
342
|
+
if (/^NULL$/i.test(t))
|
|
343
|
+
return null;
|
|
344
|
+
if (/^TRUE$/i.test(t))
|
|
345
|
+
return true;
|
|
346
|
+
if (/^FALSE$/i.test(t))
|
|
347
|
+
return false;
|
|
348
|
+
if (t.length >= 2 && t.startsWith("'") && t.endsWith("'"))
|
|
349
|
+
return t.slice(1, -1).replace(/''/g, "'");
|
|
350
|
+
if (t.length >= 2 && t.startsWith('"') && t.endsWith('"'))
|
|
351
|
+
return t.slice(1, -1).replace(/""/g, '"');
|
|
352
|
+
if (/^-?\d+$/.test(t))
|
|
353
|
+
return parseInt(t, 10);
|
|
354
|
+
if (/^-?\d+\.\d+$/.test(t))
|
|
355
|
+
return parseFloat(t);
|
|
356
|
+
return t;
|
|
357
|
+
}
|
|
358
|
+
/** Parse `INSERT ... (<cols>) VALUES (<tuple>)[, (<tuple>)...]` into rows. */
|
|
359
|
+
function parseInsertColumnsAndTuples(stmt) {
|
|
360
|
+
const open = stmt.indexOf("(");
|
|
361
|
+
if (open === -1)
|
|
362
|
+
throw new SqlParseError("cannot locate the column list");
|
|
363
|
+
const colGroup = extractParenGroup(stmt, open);
|
|
364
|
+
const columns = splitTopLevel(colGroup.content).map((c) => c.replace(/`/g, "").trim().toLowerCase());
|
|
365
|
+
const rest = stmt.slice(colGroup.end);
|
|
366
|
+
const vm = /\bVALUES\b/i.exec(rest);
|
|
367
|
+
if (!vm)
|
|
368
|
+
throw new SqlParseError("cannot locate the VALUES keyword");
|
|
369
|
+
let idx = colGroup.end + vm.index + vm[0].length;
|
|
370
|
+
const tuples = [];
|
|
371
|
+
while (idx < stmt.length) {
|
|
372
|
+
while (idx < stmt.length && /[\s,]/.test(stmt[idx]))
|
|
373
|
+
idx++;
|
|
374
|
+
if (idx >= stmt.length || stmt[idx] !== "(")
|
|
375
|
+
break; // e.g. trailing ON DUPLICATE KEY
|
|
376
|
+
const g = extractParenGroup(stmt, idx);
|
|
377
|
+
tuples.push(splitTopLevel(g.content).map(parseLiteral));
|
|
378
|
+
idx = g.end;
|
|
379
|
+
}
|
|
380
|
+
if (tuples.length === 0)
|
|
381
|
+
throw new SqlParseError("no VALUES tuples found");
|
|
382
|
+
return { columns, tuples };
|
|
383
|
+
}
|
|
384
|
+
function zipRow(columns, tuple) {
|
|
385
|
+
if (columns.length !== tuple.length) {
|
|
386
|
+
throw new SqlParseError(`column/value count mismatch (${columns.length} columns vs ${tuple.length} values)`);
|
|
387
|
+
}
|
|
388
|
+
const row = {};
|
|
389
|
+
columns.forEach((c, i) => { row[c] = tuple[i]; });
|
|
390
|
+
return row;
|
|
391
|
+
}
|
|
392
|
+
function asString(v) {
|
|
393
|
+
return typeof v === "string" ? v : v === null ? null : String(v);
|
|
394
|
+
}
|
|
395
|
+
function asBool(v, def) {
|
|
396
|
+
if (v === null || v === undefined)
|
|
397
|
+
return def;
|
|
398
|
+
if (typeof v === "boolean")
|
|
399
|
+
return v;
|
|
400
|
+
if (typeof v === "number")
|
|
401
|
+
return v !== 0;
|
|
402
|
+
const s = String(v).toLowerCase();
|
|
403
|
+
if (s === "true" || s === "1")
|
|
404
|
+
return true;
|
|
405
|
+
if (s === "false" || s === "0")
|
|
406
|
+
return false;
|
|
407
|
+
return def;
|
|
408
|
+
}
|
|
409
|
+
const RLS_COMMANDS = ["ALL", "SELECT", "INSERT", "UPDATE", "DELETE"];
|
|
410
|
+
function guidance(table, e) {
|
|
411
|
+
const detail = e instanceof Error ? e.message : String(e);
|
|
412
|
+
throw new SqlParseError(`Cannot parse the RLS INSERT for supabase.${table}: ${detail}. ` +
|
|
413
|
+
`Use a declarative db/rls.json for this app instead of embedding RLS INSERTs in schema.sql.`);
|
|
414
|
+
}
|
|
415
|
+
/** Parse one `_mysqlrest_rls_tables` INSERT into structured inputs (schema dropped). */
|
|
416
|
+
export function parseRlsTableInsert(stmt) {
|
|
417
|
+
try {
|
|
418
|
+
const { columns, tuples } = parseInsertColumnsAndTuples(stmt);
|
|
419
|
+
return tuples.map((t) => {
|
|
420
|
+
const row = zipRow(columns, t);
|
|
421
|
+
const tableName = asString(row["table_name"]);
|
|
422
|
+
if (!tableName)
|
|
423
|
+
throw new SqlParseError("missing or invalid table_name");
|
|
424
|
+
return {
|
|
425
|
+
table_name: tableName,
|
|
426
|
+
// table_schema is intentionally dropped: the server binds it to the tenant db.
|
|
427
|
+
rls_enabled: asBool(row["rls_enabled"], true),
|
|
428
|
+
rls_forced: asBool(row["rls_forced"], false),
|
|
429
|
+
};
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
catch (e) {
|
|
433
|
+
return guidance("_mysqlrest_rls_tables", e);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
/** Parse one `_mysqlrest_rls_policies` INSERT into structured inputs (schema dropped). */
|
|
437
|
+
export function parseRlsPolicyInsert(stmt) {
|
|
438
|
+
try {
|
|
439
|
+
const { columns, tuples } = parseInsertColumnsAndTuples(stmt);
|
|
440
|
+
return tuples.map((t) => {
|
|
441
|
+
const row = zipRow(columns, t);
|
|
442
|
+
const tableName = asString(row["table_name"]);
|
|
443
|
+
const policyName = asString(row["policy_name"]);
|
|
444
|
+
if (!tableName)
|
|
445
|
+
throw new SqlParseError("missing or invalid table_name");
|
|
446
|
+
if (!policyName)
|
|
447
|
+
throw new SqlParseError("missing or invalid policy_name");
|
|
448
|
+
const command = (asString(row["command"]) ?? "ALL").toUpperCase();
|
|
449
|
+
if (!RLS_COMMANDS.includes(command)) {
|
|
450
|
+
throw new SqlParseError(`command must be one of ${RLS_COMMANDS.join(", ")} (got '${command}')`);
|
|
451
|
+
}
|
|
452
|
+
const role = asString(row["role_name"]);
|
|
453
|
+
return {
|
|
454
|
+
table_name: tableName,
|
|
455
|
+
policy_name: policyName,
|
|
456
|
+
role_name: role && role !== "" ? role : "*",
|
|
457
|
+
command,
|
|
458
|
+
using_expr: row["using_expr"] === undefined ? null : asString(row["using_expr"]),
|
|
459
|
+
check_expr: row["check_expr"] === undefined ? null : asString(row["check_expr"]),
|
|
460
|
+
permissive: asBool(row["permissive"], true),
|
|
461
|
+
};
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
catch (e) {
|
|
465
|
+
return guidance("_mysqlrest_rls_policies", e);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
// --- Render structured RLS back to central-registry SQL (single-tenant path) ---
|
|
469
|
+
function sqlLiteral(v) {
|
|
470
|
+
if (v === null || v === undefined)
|
|
471
|
+
return "NULL";
|
|
472
|
+
return `'${String(v).replace(/'/g, "''")}'`;
|
|
473
|
+
}
|
|
474
|
+
function sqlBoolLit(v, def) {
|
|
475
|
+
return (v ?? def) ? "1" : "0";
|
|
476
|
+
}
|
|
477
|
+
/** Render an idempotent central-registry INSERT for one RLS table toggle. */
|
|
478
|
+
export function renderRlsTableInsert(schema, input) {
|
|
479
|
+
return (`INSERT INTO supabase._mysqlrest_rls_tables (table_schema, table_name, rls_enabled, rls_forced) ` +
|
|
480
|
+
`VALUES (${sqlLiteral(schema)}, ${sqlLiteral(input.table_name)}, ` +
|
|
481
|
+
`${sqlBoolLit(input.rls_enabled, true)}, ${sqlBoolLit(input.rls_forced, false)}) ` +
|
|
482
|
+
`ON DUPLICATE KEY UPDATE rls_enabled = VALUES(rls_enabled), rls_forced = VALUES(rls_forced)`);
|
|
483
|
+
}
|
|
484
|
+
/** Render an idempotent central-registry INSERT for one RLS policy. */
|
|
485
|
+
export function renderRlsPolicyInsert(schema, input) {
|
|
486
|
+
const role = input.role_name ?? "*";
|
|
487
|
+
const command = (input.command ?? "ALL").toString().toUpperCase();
|
|
488
|
+
return (`INSERT INTO supabase._mysqlrest_rls_policies ` +
|
|
489
|
+
`(table_schema, table_name, policy_name, role_name, command, using_expr, check_expr, permissive) ` +
|
|
490
|
+
`VALUES (${sqlLiteral(schema)}, ${sqlLiteral(input.table_name)}, ${sqlLiteral(input.policy_name)}, ` +
|
|
491
|
+
`${sqlLiteral(role)}, ${sqlLiteral(command)}, ${sqlLiteral(input.using_expr ?? null)}, ` +
|
|
492
|
+
`${sqlLiteral(input.check_expr ?? null)}, ${sqlBoolLit(input.permissive, true)}) ` +
|
|
493
|
+
`ON DUPLICATE KEY UPDATE role_name = VALUES(role_name), command = VALUES(command), ` +
|
|
494
|
+
`using_expr = VALUES(using_expr), check_expr = VALUES(check_expr), permissive = VALUES(permissive)`);
|
|
495
|
+
}
|
|
496
|
+
// --- Declarative db/rls.json (preferred RLS source; see plan §5.4) ---
|
|
497
|
+
/**
|
|
498
|
+
* Extract the table names created by a schema.sql script (for `--purge-db`).
|
|
499
|
+
* Handles `CREATE TABLE [IF NOT EXISTS] [`__SCHEMA__`.]<name>` with optional
|
|
500
|
+
* backticks. Names are returned de-qualified and de-duplicated, in first-seen order.
|
|
501
|
+
*/
|
|
502
|
+
export function extractCreateTableNames(sql) {
|
|
503
|
+
const re = /CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?(?:`?__SCHEMA__`?\s*\.\s*)?`?([A-Za-z0-9_]+)`?/gi;
|
|
504
|
+
const names = [];
|
|
505
|
+
let m;
|
|
506
|
+
while ((m = re.exec(sql)) !== null) {
|
|
507
|
+
const n = m[1];
|
|
508
|
+
if (n && !names.includes(n))
|
|
509
|
+
names.push(n);
|
|
510
|
+
}
|
|
511
|
+
return names;
|
|
512
|
+
}
|
|
513
|
+
const IDENT_RE = /^[a-zA-Z0-9_]+$/;
|
|
514
|
+
function requireIdent(value, field) {
|
|
515
|
+
if (typeof value !== "string" || !value || value.length > 64 || !IDENT_RE.test(value)) {
|
|
516
|
+
throw new SqlParseError(`db/rls.json: invalid ${field} (only [a-zA-Z0-9_], max 64 chars)`);
|
|
517
|
+
}
|
|
518
|
+
return value;
|
|
519
|
+
}
|
|
520
|
+
function pick(obj, ...keys) {
|
|
521
|
+
for (const k of keys)
|
|
522
|
+
if (obj[k] !== undefined)
|
|
523
|
+
return obj[k];
|
|
524
|
+
return undefined;
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Parse + validate a declarative `db/rls.json`. Accepts the documented friendly
|
|
528
|
+
* keys (table/name/role/using/check/rlsEnabled/...) and their snake_case aliases,
|
|
529
|
+
* mapping them onto the driver's structured inputs. `table_schema` is NEVER read
|
|
530
|
+
* here — the execution layer decides it (single-tenant = --schema; multi-tenant =
|
|
531
|
+
* server-bound).
|
|
532
|
+
*/
|
|
533
|
+
export function parseRlsJson(text) {
|
|
534
|
+
let raw;
|
|
535
|
+
try {
|
|
536
|
+
raw = JSON.parse(text);
|
|
537
|
+
}
|
|
538
|
+
catch (e) {
|
|
539
|
+
throw new SqlParseError(`db/rls.json is not valid JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
540
|
+
}
|
|
541
|
+
const root = (raw ?? {});
|
|
542
|
+
const rawTables = Array.isArray(root.tables) ? root.tables : [];
|
|
543
|
+
const rawPolicies = Array.isArray(root.policies) ? root.policies : [];
|
|
544
|
+
const tables = rawTables.map((entry) => {
|
|
545
|
+
const o = (entry ?? {});
|
|
546
|
+
const table = requireIdent(pick(o, "table", "table_name"), "tables[].table");
|
|
547
|
+
const enabled = pick(o, "rlsEnabled", "rls_enabled");
|
|
548
|
+
const forced = pick(o, "rlsForced", "rls_forced");
|
|
549
|
+
return {
|
|
550
|
+
table_name: table,
|
|
551
|
+
rls_enabled: enabled === undefined ? true : Boolean(enabled),
|
|
552
|
+
rls_forced: forced === undefined ? false : Boolean(forced),
|
|
553
|
+
};
|
|
554
|
+
});
|
|
555
|
+
const policies = rawPolicies.map((entry) => {
|
|
556
|
+
const o = (entry ?? {});
|
|
557
|
+
const table = requireIdent(pick(o, "table", "table_name"), "policies[].table");
|
|
558
|
+
const name = requireIdent(pick(o, "name", "policy_name"), "policies[].name");
|
|
559
|
+
const roleRaw = pick(o, "role", "role_name");
|
|
560
|
+
const role = roleRaw === undefined || roleRaw === null || roleRaw === "" ? "*" : String(roleRaw);
|
|
561
|
+
if (role !== "*" && !IDENT_RE.test(role)) {
|
|
562
|
+
throw new SqlParseError(`db/rls.json: policy '${name}' role must be '*' or [a-zA-Z0-9_]`);
|
|
563
|
+
}
|
|
564
|
+
const commandRaw = pick(o, "command");
|
|
565
|
+
const command = (commandRaw === undefined || commandRaw === null ? "ALL" : String(commandRaw)).toUpperCase();
|
|
566
|
+
if (!RLS_COMMANDS.includes(command)) {
|
|
567
|
+
throw new SqlParseError(`db/rls.json: policy '${name}' command must be one of ${RLS_COMMANDS.join(", ")}`);
|
|
568
|
+
}
|
|
569
|
+
const using = pick(o, "using", "using_expr");
|
|
570
|
+
const check = pick(o, "check", "check_expr");
|
|
571
|
+
const permissive = pick(o, "permissive");
|
|
572
|
+
return {
|
|
573
|
+
table_name: table,
|
|
574
|
+
policy_name: name,
|
|
575
|
+
role_name: role,
|
|
576
|
+
command,
|
|
577
|
+
using_expr: using === undefined || using === null ? null : String(using),
|
|
578
|
+
check_expr: check === undefined || check === null ? null : String(check),
|
|
579
|
+
permissive: permissive === undefined ? true : Boolean(permissive),
|
|
580
|
+
};
|
|
581
|
+
});
|
|
582
|
+
return { tables, policies };
|
|
583
|
+
}
|
|
167
584
|
//# sourceMappingURL=sql-file.js.map
|
package/dist/db/sql-file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-file.js","sourceRoot":"","sources":["../../src/db/sql-file.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sql-file.js","sourceRoot":"","sources":["../../src/db/sql-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zero whitelist self-service helpers (CLI side).
|
|
3
|
+
*
|
|
4
|
+
* The whitelist API authenticates with a Studio-credential HASH (not the pxz_token
|
|
5
|
+
* ownership cookie) and addresses the instance by its cloud id (`pxsp-*`), so this
|
|
6
|
+
* module turns a locally-bound Zero record into the (cloudInstanceId, studioHash)
|
|
7
|
+
* pair the driver needs — and enforces the "Zero instances only" guard.
|
|
8
|
+
*
|
|
9
|
+
* The dashboard password and its derived sha256("supabase:"+password) are NEVER
|
|
10
|
+
* returned in any printable field; only the opaque `studioHash` is handed to the
|
|
11
|
+
* driver. See references/provision.md and the pxbaas-cli SKILL safety rules.
|
|
12
|
+
*/
|
|
13
|
+
import { type ZeroInstanceRecord } from './zero-store.js';
|
|
14
|
+
/**
|
|
15
|
+
* sha256hex("<user>:<password>"), UTF-8, no trailing newline. Equivalent to the
|
|
16
|
+
* password — never log or persist it. `user` is fixed to `supabase` by the API.
|
|
17
|
+
*/
|
|
18
|
+
export declare function studioCredentialHash(password: string, user?: string): string;
|
|
19
|
+
export interface WhitelistTarget {
|
|
20
|
+
record: ZeroInstanceRecord;
|
|
21
|
+
/** Cloud instance id (`pxsp-*`) used in the whitelist API path. */
|
|
22
|
+
cloudInstanceId: string;
|
|
23
|
+
/** Opaque Studio-credential sha256; do not print. */
|
|
24
|
+
studioHash: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolve which Zero instance a `whitelist get|add` targets.
|
|
28
|
+
*
|
|
29
|
+
* - `opts.id` (an `sbx_*` ownership id) selects explicitly.
|
|
30
|
+
* - Otherwise the current profile is used and MUST be `source === 'zero'`.
|
|
31
|
+
*
|
|
32
|
+
* Throws a plain Error (clear, user-facing) when the target is not a locally-bound
|
|
33
|
+
* Zero instance or has no stored dashboard password — the whitelist surface is
|
|
34
|
+
* Zero-only by design.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveWhitelistTarget(opts: {
|
|
37
|
+
id: string | undefined;
|
|
38
|
+
}): Promise<WhitelistTarget>;
|
|
39
|
+
//# sourceMappingURL=zero-whitelist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zero-whitelist.d.ts","sourceRoot":"","sources":["../../src/instance/zero-whitelist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAa,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,SAAa,GAAG,MAAM,CAEhF;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAkCvG"}
|