@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
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Env-file 解析 - 从 Supabase/BaaS 惯例的 .env 文件里提取登录所需字段
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* 单租户实例取 SUPABASE_ANON_KEY / SUPABASE_SERVICE_ROLE_KEY;多租户实例
|
|
5
|
+
* (MULTI_TENANT_MODE=true)取 DEFAULT_TENANT_ID + TENANT_ANON_KEY /
|
|
6
|
+
* TENANT_SERVICE_ROLE_KEY —— 离线包 gen-client-env.sh 产出的多租户 client.env
|
|
7
|
+
* 同时带全局键与租户级键,而全局键访问租户资源会被 Kong 的全局凭证护栏挡掉,
|
|
8
|
+
* 所以落库的一律是租户级凭据;文件里的 GLOBAL_* 只报告存在、不导入。
|
|
7
9
|
*
|
|
8
10
|
* 不引入 dotenv 依赖:项目内的 env 文件均为简单 KEY=VALUE 格式。
|
|
9
11
|
*/
|
|
12
|
+
/**
|
|
13
|
+
* 多租户 env 文件缺少租户级凭据时抛出。
|
|
14
|
+
*
|
|
15
|
+
* 单独成类是为了让调用方(profile import 的失败分支)能**判别**这种情况并给出
|
|
16
|
+
* 分流指引,而不是只对着一段自然语言做字符串匹配。
|
|
17
|
+
*/
|
|
18
|
+
export class TenantCredentialGapError extends Error {
|
|
19
|
+
missing;
|
|
20
|
+
constructor(message, missing) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = 'TenantCredentialGapError';
|
|
23
|
+
this.missing = missing;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
10
26
|
/**
|
|
11
27
|
* 解析 env 文件文本为键值对。
|
|
12
28
|
*
|
|
@@ -60,6 +76,13 @@ const SERVICE_VARS = [
|
|
|
60
76
|
'SERVICE_ROLE_KEY',
|
|
61
77
|
'GLOBAL_SERVICE_ROLE_KEY',
|
|
62
78
|
];
|
|
79
|
+
const TENANT_ID_VARS = ['DEFAULT_TENANT_ID'];
|
|
80
|
+
const TENANT_ANON_VARS = ['TENANT_ANON_KEY'];
|
|
81
|
+
const TENANT_SERVICE_VARS = ['TENANT_SERVICE_ROLE_KEY'];
|
|
82
|
+
const GLOBAL_KEY_VARS = ['GLOBAL_ANON_KEY', 'GLOBAL_SERVICE_ROLE_KEY'];
|
|
83
|
+
/** 实例管理面凭据:默认不导入,见 EnvLoginFields.skippedAdminKeys。 */
|
|
84
|
+
const ADMIN_USERNAME_VARS = ['DASHBOARD_USERNAME'];
|
|
85
|
+
const ADMIN_PASSWORD_VARS = ['DASHBOARD_PASSWORD'];
|
|
63
86
|
function pickWithSource(env, keys) {
|
|
64
87
|
for (const k of keys) {
|
|
65
88
|
const v = env[k];
|
|
@@ -70,31 +93,60 @@ function pickWithSource(env, keys) {
|
|
|
70
93
|
return undefined;
|
|
71
94
|
}
|
|
72
95
|
/**
|
|
73
|
-
* 从解析后的 env
|
|
96
|
+
* 从解析后的 env 中提取登录字段(单租户或多租户)。
|
|
74
97
|
*
|
|
75
98
|
* @param env parseEnvText 的结果
|
|
76
99
|
* @param options.intranet 为 true 时优先使用内网入口 SUPABASE_INTRANET_URL
|
|
77
|
-
* @throws Error
|
|
100
|
+
* @throws Error 缺少必需字段(多租户即缺租户级凭据)时抛出可直接展示的错误
|
|
78
101
|
*/
|
|
79
102
|
export function resolveLoginFromEnv(env, options = {}) {
|
|
80
|
-
// 多租户:暂不支持(global keys 不能直接访问租户资源)
|
|
81
103
|
const mtRaw = (env.MULTI_TENANT_MODE ?? '').trim().toLowerCase();
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
104
|
+
const isMultiTenant = mtRaw === 'true' || mtRaw === '1' || mtRaw === 'yes';
|
|
105
|
+
// 多租户:只有租户级凭据能访问租户资源(全局键会命中 Kong 的全局凭证护栏 403),
|
|
106
|
+
// 因此改写取值来源;全局键仅记录「存在但未导入」。
|
|
107
|
+
let anonVars = ANON_VARS;
|
|
108
|
+
let serviceVars = SERVICE_VARS;
|
|
109
|
+
let tenantId;
|
|
110
|
+
let tenantIdSource;
|
|
111
|
+
let skippedGlobalKeys;
|
|
112
|
+
if (isMultiTenant) {
|
|
113
|
+
const tenantIdHit = pickWithSource(env, TENANT_ID_VARS);
|
|
114
|
+
const tenantAnonHit = pickWithSource(env, TENANT_ANON_VARS);
|
|
115
|
+
const tenantServiceHit = pickWithSource(env, TENANT_SERVICE_VARS);
|
|
116
|
+
const missingTenant = [];
|
|
117
|
+
if (!tenantIdHit)
|
|
118
|
+
missingTenant.push(`tenant id (${TENANT_ID_VARS.join(' | ')})`);
|
|
119
|
+
if (!tenantAnonHit)
|
|
120
|
+
missingTenant.push(`tenant anon key (${TENANT_ANON_VARS.join(' | ')})`);
|
|
121
|
+
if (!tenantServiceHit) {
|
|
122
|
+
missingTenant.push(`tenant service role key (${TENANT_SERVICE_VARS.join(' | ')})`);
|
|
123
|
+
}
|
|
124
|
+
if (missingTenant.length > 0) {
|
|
125
|
+
throw new TenantCredentialGapError('Multi-tenant instances are not supported by `profile import` unless the env file ' +
|
|
126
|
+
`carries tenant-level credentials. This file is missing: ${missingTenant.join('; ')}. ` +
|
|
127
|
+
'Regenerate client.env with tenant keys, or use `pxbaas login --tenant-id <id> ' +
|
|
128
|
+
'--anon-key-stdin --service-key-stdin` with per-tenant keys instead.', missingTenant);
|
|
129
|
+
}
|
|
130
|
+
tenantId = tenantIdHit.value;
|
|
131
|
+
tenantIdSource = tenantIdHit.source;
|
|
132
|
+
anonVars = TENANT_ANON_VARS;
|
|
133
|
+
serviceVars = TENANT_SERVICE_VARS;
|
|
134
|
+
const presentGlobal = GLOBAL_KEY_VARS.filter((k) => (env[k] ?? '').trim() !== '');
|
|
135
|
+
if (presentGlobal.length > 0) {
|
|
136
|
+
skippedGlobalKeys = presentGlobal;
|
|
137
|
+
}
|
|
86
138
|
}
|
|
87
139
|
const endpointVars = options.intranet ? ENDPOINT_VARS_INTRANET : ENDPOINT_VARS;
|
|
88
140
|
const endpointHit = pickWithSource(env, endpointVars);
|
|
89
|
-
const anonHit = pickWithSource(env,
|
|
90
|
-
const serviceHit = pickWithSource(env,
|
|
141
|
+
const anonHit = pickWithSource(env, anonVars);
|
|
142
|
+
const serviceHit = pickWithSource(env, serviceVars);
|
|
91
143
|
const missing = [];
|
|
92
144
|
if (!endpointHit)
|
|
93
145
|
missing.push(`endpoint (${endpointVars.join(' | ')})`);
|
|
94
146
|
if (!anonHit)
|
|
95
|
-
missing.push(`anon key (${
|
|
147
|
+
missing.push(`anon key (${anonVars.join(' | ')})`);
|
|
96
148
|
if (!serviceHit)
|
|
97
|
-
missing.push(`service role key (${
|
|
149
|
+
missing.push(`service role key (${serviceVars.join(' | ')})`);
|
|
98
150
|
if (missing.length > 0) {
|
|
99
151
|
throw new Error(`Env file is missing required variable(s): ${missing.join('; ')}`);
|
|
100
152
|
}
|
|
@@ -102,17 +154,40 @@ export function resolveLoginFromEnv(env, options = {}) {
|
|
|
102
154
|
if (!/^https?:\/\//.test(endpoint)) {
|
|
103
155
|
throw new Error(`Endpoint from ${endpointHit.source} must start with http:// or https:// (got: ${endpoint})`);
|
|
104
156
|
}
|
|
157
|
+
// 管理凭据默认不外吸:只报告"存在",由调用方决定是否显式导入(--with-admin)。
|
|
158
|
+
const presentAdmin = [...ADMIN_USERNAME_VARS, ...ADMIN_PASSWORD_VARS].filter((k) => (env[k] ?? '').trim() !== '');
|
|
105
159
|
return {
|
|
106
160
|
endpoint,
|
|
107
161
|
anonKey: anonHit.value,
|
|
108
162
|
serviceRoleKey: serviceHit.value,
|
|
109
|
-
tenantId
|
|
110
|
-
mode: 'single-tenant',
|
|
163
|
+
tenantId,
|
|
164
|
+
mode: isMultiTenant ? 'multi-tenant' : 'single-tenant',
|
|
111
165
|
sources: {
|
|
112
166
|
endpoint: endpointHit.source,
|
|
113
167
|
anonKey: anonHit.source,
|
|
114
168
|
serviceRoleKey: serviceHit.source,
|
|
169
|
+
tenantId: tenantIdSource,
|
|
115
170
|
},
|
|
171
|
+
skippedGlobalKeys,
|
|
172
|
+
skippedAdminKeys: presentAdmin.length > 0 ? presentAdmin : undefined,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* 从 env 中提取实例管理凭据(dashboard Basic Auth)。
|
|
177
|
+
*
|
|
178
|
+
* 返回 undefined 表示文件里没有成对的管理凭据 —— 调用方**不应**因此报错:
|
|
179
|
+
* 它们只在管理员显式 `--with-admin` 或临时能力探测时才被读取。
|
|
180
|
+
* 只出现一半(有 user 无 password)视为不可用,避免半套凭据落库。
|
|
181
|
+
*/
|
|
182
|
+
export function resolveAdminFromEnv(env) {
|
|
183
|
+
const username = pickWithSource(env, ADMIN_USERNAME_VARS);
|
|
184
|
+
const password = pickWithSource(env, ADMIN_PASSWORD_VARS);
|
|
185
|
+
if (!username || !password)
|
|
186
|
+
return undefined;
|
|
187
|
+
return {
|
|
188
|
+
username: username.value,
|
|
189
|
+
password: password.value,
|
|
190
|
+
sources: { username: username.source, password: password.source },
|
|
116
191
|
};
|
|
117
192
|
}
|
|
118
193
|
//# sourceMappingURL=env-file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-file.js","sourceRoot":"","sources":["../../src/credentials/env-file.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"env-file.js","sourceRoot":"","sources":["../../src/credentials/env-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,7 @@ export * from './jwt-introspect.js';
|
|
|
7
7
|
export * from './masker.js';
|
|
8
8
|
export * from './tty-guard.js';
|
|
9
9
|
export * from './tenant-guard.js';
|
|
10
|
+
export * from './env-file.js';
|
|
11
|
+
export * from './commit.js';
|
|
10
12
|
export * from './formatter.js';
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
|
@@ -7,5 +7,7 @@ export * from './jwt-introspect.js';
|
|
|
7
7
|
export * from './masker.js';
|
|
8
8
|
export * from './tty-guard.js';
|
|
9
9
|
export * from './tenant-guard.js';
|
|
10
|
+
export * from './env-file.js';
|
|
11
|
+
export * from './commit.js';
|
|
10
12
|
export * from './formatter.js';
|
|
11
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
|
@@ -14,6 +14,13 @@ export interface IntrospectedJwt {
|
|
|
14
14
|
payload: JwtPayload;
|
|
15
15
|
isExpired: boolean;
|
|
16
16
|
expiresIn: number;
|
|
17
|
+
/**
|
|
18
|
+
* 裸指纹:sha256 前8 + 后4,形如 `6ee48f23...a477`,**不带** `sha256:` 前缀。
|
|
19
|
+
*
|
|
20
|
+
* 契约(分层,勿在其中一层"顺手"补前缀,否则展示层会变成 `sha256:sha256:`):
|
|
21
|
+
* 内层解析只产出裸值;展示层 `computeFingerprint()`(./masker.ts,whoami /
|
|
22
|
+
* instance / provision 用它)统一加 `sha256:` 前缀。
|
|
23
|
+
*/
|
|
17
24
|
fingerprint: string;
|
|
18
25
|
}
|
|
19
26
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-introspect.d.ts","sourceRoot":"","sources":["../../src/credentials/jwt-introspect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAanD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAkB3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAatD"}
|
|
1
|
+
{"version":3,"file":"jwt-introspect.d.ts","sourceRoot":"","sources":["../../src/credentials/jwt-introspect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAanD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAkB3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAatD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-introspect.js","sourceRoot":"","sources":["../../src/credentials/jwt-introspect.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"jwt-introspect.js","sourceRoot":"","sources":["../../src/credentials/jwt-introspect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAe,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa;IAC/C,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;IACpC,MAAM,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC;IAEjC,0BAA0B;IAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,OAAO;QACL,OAAO;QACP,SAAS;QACT,SAAS;QACT,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,GAAG,GAAG,EAAE;YAAE,OAAO,WAAW,GAAG,OAAO,CAAC;QAC3C,IAAI,GAAG,GAAG,IAAI;YAAE,OAAO,WAAW,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;QAC9D,IAAI,GAAG,GAAG,KAAK;YAAE,OAAO,WAAW,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACjE,OAAO,WAAW,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;IACnD,CAAC;IAED,IAAI,SAAS,GAAG,EAAE;QAAE,OAAO,cAAc,SAAS,GAAG,CAAC;IACtD,IAAI,SAAS,GAAG,IAAI;QAAE,OAAO,cAAc,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC;IACzE,IAAI,SAAS,GAAG,KAAK;QAAE,OAAO,cAAc,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;IAC5E,OAAO,cAAc,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;AACxD,CAAC"}
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* 计算密钥指纹:sha256 前8字符 + 后4字符
|
|
6
6
|
* 格式:sha256:abcd1234...ef56
|
|
7
|
+
*
|
|
8
|
+
* 这是**展示层**的唯一加前缀处(whoami / instance / provision 直接输出它)。
|
|
9
|
+
* `introspectJwt().fingerprint` 返回的是同一指纹的裸值,前缀只在这里加一次。
|
|
7
10
|
*/
|
|
8
11
|
export declare function computeFingerprint(key: string): string;
|
|
9
12
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masker.d.ts","sourceRoot":"","sources":["../../src/credentials/masker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH
|
|
1
|
+
{"version":3,"file":"masker.d.ts","sourceRoot":"","sources":["../../src/credentials/masker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM/C"}
|
|
@@ -5,6 +5,9 @@ import { createHash } from 'node:crypto';
|
|
|
5
5
|
/**
|
|
6
6
|
* 计算密钥指纹:sha256 前8字符 + 后4字符
|
|
7
7
|
* 格式:sha256:abcd1234...ef56
|
|
8
|
+
*
|
|
9
|
+
* 这是**展示层**的唯一加前缀处(whoami / instance / provision 直接输出它)。
|
|
10
|
+
* `introspectJwt().fingerprint` 返回的是同一指纹的裸值,前缀只在这里加一次。
|
|
8
11
|
*/
|
|
9
12
|
export function computeFingerprint(key) {
|
|
10
13
|
const hash = createHash('sha256').update(key).digest('hex');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masker.js","sourceRoot":"","sources":["../../src/credentials/masker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC
|
|
1
|
+
{"version":3,"file":"masker.js","sourceRoot":"","sources":["../../src/credentials/masker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,UAAU,WAAW,EAAE,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -17,6 +17,11 @@ export interface BaasProfile {
|
|
|
17
17
|
zeroInstanceId?: string;
|
|
18
18
|
/** Zero instance expiry (ISO 8601), only when source === 'zero'. */
|
|
19
19
|
expiresAt?: string;
|
|
20
|
+
/**
|
|
21
|
+
* 该 profile 是否绑定了平台管理凭据(dashboard Basic Auth)。仅是标记:口令本身
|
|
22
|
+
* 存在凭据存储的独立账目里,数据面命令读不到它。
|
|
23
|
+
*/
|
|
24
|
+
adminCapable?: boolean;
|
|
20
25
|
createdAt: string;
|
|
21
26
|
updatedAt: string;
|
|
22
27
|
}
|
|
@@ -29,6 +34,13 @@ interface ProfilesStore {
|
|
|
29
34
|
export declare function setCliProfileOverrideGlobal(profileName: string | undefined): void;
|
|
30
35
|
/** 读取进程级 profile 覆盖(供测试/诊断)。 */
|
|
31
36
|
export declare function getCliProfileOverrideGlobal(): string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* 判断被调用的命令是否会创建/覆盖 `--profile` 指定的 profile。
|
|
39
|
+
*
|
|
40
|
+
* @param commandPath 完整命令路径(如 `['profile','import']`),不含程序名。
|
|
41
|
+
* 只比叶子名会让将来任何同名子命令误获放行,故必须传完整路径。
|
|
42
|
+
*/
|
|
43
|
+
export declare function isProfileCreatingCommand(commandPath: readonly string[]): boolean;
|
|
32
44
|
export declare class ProfileManager {
|
|
33
45
|
private homeDir;
|
|
34
46
|
private cliProfileOverride?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/credentials/profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,cAAc,CAAC;AAE3D,yGAAyG;AACzG,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACvC;AAYD,uDAAuD;AACvD,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEjF;AAED,gCAAgC;AAChC,wBAAgB,2BAA2B,IAAI,MAAM,GAAG,SAAS,CAEhE;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,KAAK,CAA8B;gBAE/B,OAAO,CAAC,EAAE,MAAM;IAI5B;;;OAGG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAK5D,oCAAoC;IACpC,OAAO,KAAK,2BAA2B,GAEtC;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IA2BpC;;OAEG;YACW,IAAI;IAYlB;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAsCtD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAK5C;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK3D;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7C;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAiBpD"}
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/credentials/profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,cAAc,CAAC;AAE3D,yGAAyG;AACzG,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACvC;AAYD,uDAAuD;AACvD,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEjF;AAED,gCAAgC;AAChC,wBAAgB,2BAA2B,IAAI,MAAM,GAAG,SAAS,CAEhE;AAgBD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAMhF;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,KAAK,CAA8B;gBAE/B,OAAO,CAAC,EAAE,MAAM;IAI5B;;;OAGG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAK5D,oCAAoC;IACpC,OAAO,KAAK,2BAA2B,GAEtC;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;IA2BpC;;OAEG;YACW,IAAI;IAYlB;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAsCtD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAK5C;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK3D;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7C;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAiBpD"}
|
|
@@ -22,6 +22,29 @@ export function setCliProfileOverrideGlobal(profileName) {
|
|
|
22
22
|
export function getCliProfileOverrideGlobal() {
|
|
23
23
|
return processCliProfileOverride;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* 会「写入 --profile 所指 profile」的命令,按完整命令路径匹配。
|
|
27
|
+
*
|
|
28
|
+
* 对这些命令来说,profile 名不存在恰恰是前提(它们正要创建它),所以 main.ts 的
|
|
29
|
+
* preAction 钩子不能对其做存在性硬校验;其余命令一律保持响亮失败,否则就退回了
|
|
30
|
+
* `--profile` 曾被静默忽略、写操作跨实例误落的旧缺陷。
|
|
31
|
+
*/
|
|
32
|
+
const PROFILE_CREATING_COMMANDS = [
|
|
33
|
+
['login'],
|
|
34
|
+
['profile', 'import'],
|
|
35
|
+
// `tenant login` 可以把管理凭据绑定到一个尚不存在的 profile(管理员常在新机器上先做这一步)
|
|
36
|
+
['tenant', 'login'],
|
|
37
|
+
];
|
|
38
|
+
/**
|
|
39
|
+
* 判断被调用的命令是否会创建/覆盖 `--profile` 指定的 profile。
|
|
40
|
+
*
|
|
41
|
+
* @param commandPath 完整命令路径(如 `['profile','import']`),不含程序名。
|
|
42
|
+
* 只比叶子名会让将来任何同名子命令误获放行,故必须传完整路径。
|
|
43
|
+
*/
|
|
44
|
+
export function isProfileCreatingCommand(commandPath) {
|
|
45
|
+
return PROFILE_CREATING_COMMANDS.some((candidate) => candidate.length === commandPath.length &&
|
|
46
|
+
candidate.every((segment, index) => segment === commandPath[index]));
|
|
47
|
+
}
|
|
25
48
|
export class ProfileManager {
|
|
26
49
|
homeDir;
|
|
27
50
|
cliProfileOverride; // --profile flag
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/credentials/profile.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/credentials/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
* @throws Error 如果非 TTY 环境
|
|
9
9
|
*/
|
|
10
10
|
export declare function assertTty(isTTY?: boolean, ciEnv?: string): void;
|
|
11
|
+
/**
|
|
12
|
+
* 从 stdin 按行读取密钥/口令类输入。
|
|
13
|
+
*
|
|
14
|
+
* 存在的理由:敏感值绝不能走 argv(会进 shell history 与进程列表)。login 与
|
|
15
|
+
* tenant login 都需要"两行管道输入",此前各自实现了一份,统一到这里。
|
|
16
|
+
*
|
|
17
|
+
* @param expected 期望的行数
|
|
18
|
+
* @param label 报错里对各行内容的说明(保持调用方的既有文案可辨识)
|
|
19
|
+
*/
|
|
20
|
+
export declare function readStdinLines(expected: number, label: string): Promise<string[]>;
|
|
11
21
|
/**
|
|
12
22
|
* 断言命令行参数中不包含密钥参数
|
|
13
23
|
* 防止通过 argv 传递密钥(会出现在 shell history 中)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tty-guard.d.ts","sourceRoot":"","sources":["../../src/credentials/tty-guard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAkB/D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"tty-guard.d.ts","sourceRoot":"","sources":["../../src/credentials/tty-guard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAkB/D;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBvF;AACD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsBpD"}
|
|
@@ -21,6 +21,34 @@ export function assertTty(isTTY, ciEnv) {
|
|
|
21
21
|
'Use --anon-key-stdin and --service-key-stdin for non-interactive input.');
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* 从 stdin 按行读取密钥/口令类输入。
|
|
26
|
+
*
|
|
27
|
+
* 存在的理由:敏感值绝不能走 argv(会进 shell history 与进程列表)。login 与
|
|
28
|
+
* tenant login 都需要"两行管道输入",此前各自实现了一份,统一到这里。
|
|
29
|
+
*
|
|
30
|
+
* @param expected 期望的行数
|
|
31
|
+
* @param label 报错里对各行内容的说明(保持调用方的既有文案可辨识)
|
|
32
|
+
*/
|
|
33
|
+
export async function readStdinLines(expected, label) {
|
|
34
|
+
const data = await new Promise((resolvePromise, rejectPromise) => {
|
|
35
|
+
let buffer = '';
|
|
36
|
+
process.stdin.setEncoding('utf8');
|
|
37
|
+
process.stdin.on('readable', () => {
|
|
38
|
+
let chunk;
|
|
39
|
+
while ((chunk = process.stdin.read()) !== null) {
|
|
40
|
+
buffer += chunk;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
process.stdin.on('end', () => resolvePromise(buffer));
|
|
44
|
+
process.stdin.on('error', rejectPromise);
|
|
45
|
+
});
|
|
46
|
+
const lines = data.split('\n').map((line) => line.trim());
|
|
47
|
+
if (lines.length < expected) {
|
|
48
|
+
throw new Error(`Expected ${expected} lines from stdin: ${label}`);
|
|
49
|
+
}
|
|
50
|
+
return lines;
|
|
51
|
+
}
|
|
24
52
|
/**
|
|
25
53
|
* 断言命令行参数中不包含密钥参数
|
|
26
54
|
* 防止通过 argv 传递密钥(会出现在 shell history 中)
|
|
@@ -33,6 +61,10 @@ export function assertNoKeyArgs(argv) {
|
|
|
33
61
|
'--anon-key',
|
|
34
62
|
'--service-key',
|
|
35
63
|
'--token',
|
|
64
|
+
// 平台管理凭据同样不得进 argv(会留在 shell history 与进程列表里)
|
|
65
|
+
'--dashboard-user',
|
|
66
|
+
'--dashboard-password',
|
|
67
|
+
'--admin-password',
|
|
36
68
|
];
|
|
37
69
|
for (const arg of argv) {
|
|
38
70
|
// 检查 --anon-key=value 或 --anon-key value 形式
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tty-guard.js","sourceRoot":"","sources":["../../src/credentials/tty-guard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAe,EAAE,KAAc;IACvD,mBAAmB;IACnB,MAAM,WAAW,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IACtE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,mDAAmD;YACnD,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,aAAa;IACb,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9D,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,sDAAsD;YACtD,yEAAyE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAc;IAC5C,MAAM,aAAa,GAAG;QACpB,YAAY;QACZ,eAAe;QACf,SAAS;
|
|
1
|
+
{"version":3,"file":"tty-guard.js","sourceRoot":"","sources":["../../src/credentials/tty-guard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAe,EAAE,KAAc;IACvD,mBAAmB;IACnB,MAAM,WAAW,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IACtE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,mDAAmD;YACnD,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,aAAa;IACb,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9D,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,sDAAsD;YACtD,yEAAyE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,KAAa;IAClE,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QACvE,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAChC,IAAI,KAAoB,CAAC;YACzB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,sBAAsB,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AACD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAc;IAC5C,MAAM,aAAa,GAAG;QACpB,YAAY;QACZ,eAAe;QACf,SAAS;QACT,6CAA6C;QAC7C,kBAAkB;QAClB,sBAAsB;QACtB,kBAAkB;KACnB,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,4CAA4C;QAC5C,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;YACtC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,KAAK,CACb,8CAA8C,GAAG,KAAK;oBACtD,OAAO,SAAS,kCAAkC,CACnD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,17 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* `pxbaas app db-init <name>`.
|
|
2
|
+
* Schema apply engine shared by `pxbaas db push <file>` and `pxbaas app db-init <name>`.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
* -
|
|
4
|
+
* Two execution identities (chosen by profile.mode via {@link getSchemaSink}):
|
|
5
|
+
* - single-tenant → MetaDriver `/pg/query` with the global service_role key
|
|
6
|
+
* (that key IS the platform admin, so it can also write the central RLS
|
|
7
|
+
* registry `supabase._mysqlrest_rls_*` directly).
|
|
8
|
+
* - multi-tenant → TenantDdlDriver `/api/tenant-ddl/*` with the per-tenant
|
|
9
|
+
* service_role key. DDL/DML runs on the tenant's OWN database; RLS goes
|
|
10
|
+
* through the structured endpoints (the tenant account has NO grant on the
|
|
11
|
+
* shared `supabase` database, so a raw central INSERT would be denied).
|
|
12
|
+
*
|
|
13
|
+
* Safety contract (agreed design, unchanged):
|
|
14
|
+
* - The plan (every step) is shown BEFORE anything runs.
|
|
7
15
|
* - Execution requires explicit authorization: an interactive confirm, or
|
|
8
16
|
* `--yes` for non-interactive use. `--dry-run` only previews.
|
|
9
|
-
* -
|
|
10
|
-
* - No automatic rollback — already-applied
|
|
11
|
-
*
|
|
12
|
-
*
|
|
17
|
+
* - Steps run sequentially and STOP ON THE FIRST ERROR.
|
|
18
|
+
* - No automatic rollback — already-applied steps stay applied.
|
|
19
|
+
*
|
|
20
|
+
* RLS source (see plan §5, decision R-C "hybrid"):
|
|
21
|
+
* - a declarative `db/rls.json` is preferred when present;
|
|
22
|
+
* - otherwise the `INSERT ... supabase._mysqlrest_rls_*` statements embedded in
|
|
23
|
+
* schema.sql are parsed (multi-tenant) or run verbatim (single-tenant).
|
|
13
24
|
*/
|
|
14
|
-
import { MetaDriver } from "@polardbx/pxbaas-client";
|
|
25
|
+
import { MetaDriver, type RlsTableInput, type RlsPolicyInput } from "@polardbx/pxbaas-client";
|
|
26
|
+
import type { ProfileMode } from "../credentials/profile.js";
|
|
27
|
+
import { type RlsJson } from "./sql-file.js";
|
|
28
|
+
export type { RlsJson };
|
|
15
29
|
export interface ApplyOptions {
|
|
16
30
|
/** Target schema the `__SCHEMA__` placeholder resolves to (single-tenant: public). */
|
|
17
31
|
schema: string;
|
|
@@ -22,9 +36,12 @@ export interface ApplyOptions {
|
|
|
22
36
|
/** Emit a structured result instead of human text (caller prints JSON). */
|
|
23
37
|
json: boolean;
|
|
24
38
|
}
|
|
39
|
+
export type StepKind = "sql" | "rls-table" | "rls-policy";
|
|
25
40
|
export interface StatementResult {
|
|
26
41
|
index: number;
|
|
42
|
+
/** For sql steps this is the SQL; for RLS steps a human-readable description. */
|
|
27
43
|
sql: string;
|
|
44
|
+
kind?: StepKind;
|
|
28
45
|
status: "pending" | "ok" | "failed" | "skipped";
|
|
29
46
|
error?: string;
|
|
30
47
|
}
|
|
@@ -37,12 +54,56 @@ export interface ApplyResult {
|
|
|
37
54
|
dryRun: boolean;
|
|
38
55
|
authorized: boolean;
|
|
39
56
|
statements: StatementResult[];
|
|
57
|
+
/** Present when produced by {@link applySchema}. */
|
|
58
|
+
mode?: ProfileMode;
|
|
59
|
+
rls?: {
|
|
60
|
+
tables: number;
|
|
61
|
+
policies: number;
|
|
62
|
+
source: "rls.json" | "schema.sql" | "none";
|
|
63
|
+
};
|
|
40
64
|
}
|
|
41
65
|
/** A minimal SQL executor so this module stays unit-testable without MetaDriver. */
|
|
42
66
|
export type SqlExecutor = (sql: string) => Promise<unknown>;
|
|
67
|
+
/** Per-call context the sink needs to render/apply structured RLS. */
|
|
68
|
+
export interface RlsApplyContext {
|
|
69
|
+
/** Single-tenant target schema; ignored by the multi-tenant sink (server-bound). */
|
|
70
|
+
schema: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Execution strategy for a resolved profile. Encapsulates the single- vs
|
|
74
|
+
* multi-tenant channel difference so {@link applySchema} stays mode-agnostic.
|
|
75
|
+
*/
|
|
76
|
+
export interface SchemaSink {
|
|
77
|
+
mode: ProfileMode;
|
|
78
|
+
profileName: string;
|
|
79
|
+
/** Run one DDL/DML statement on the appropriate channel. */
|
|
80
|
+
runStatement(sql: string): Promise<unknown>;
|
|
81
|
+
/** Apply one RLS table toggle. */
|
|
82
|
+
applyRlsTable(input: RlsTableInput, ctx: RlsApplyContext): Promise<unknown>;
|
|
83
|
+
/** Apply one RLS policy. */
|
|
84
|
+
applyRlsPolicy(input: RlsPolicyInput, ctx: RlsApplyContext): Promise<unknown>;
|
|
85
|
+
/** Human-readable label for the plan preview. */
|
|
86
|
+
renderRlsTable(input: RlsTableInput, ctx: RlsApplyContext): string;
|
|
87
|
+
renderRlsPolicy(input: RlsPolicyInput, ctx: RlsApplyContext): string;
|
|
88
|
+
/** Drop one of the app's tables (used by `app destroy --purge-db`). */
|
|
89
|
+
dropTable(table: string, ctx: RlsApplyContext): Promise<unknown>;
|
|
90
|
+
/**
|
|
91
|
+
* Remove the RLS registry rows for one table. `toggleRemoved` reports whether
|
|
92
|
+
* the central `_mysqlrest_rls_tables` enable/force row was deleted. In
|
|
93
|
+
* multi-tenant this uses `DELETE /api/tenant-ddl/rls/tables`; on instances that
|
|
94
|
+
* predate that endpoint the call fails and we degrade gracefully (the benign
|
|
95
|
+
* toggle row is left and self-heals on the next db-init upsert).
|
|
96
|
+
*/
|
|
97
|
+
purgeRlsForTable(table: string, ctx: RlsApplyContext): Promise<{
|
|
98
|
+
policiesDeleted: number;
|
|
99
|
+
toggleRemoved: boolean;
|
|
100
|
+
}>;
|
|
101
|
+
}
|
|
43
102
|
/**
|
|
44
103
|
* Resolve the active profile into a single-tenant MetaDriver.
|
|
45
104
|
* @throws when there is no profile, no credentials, or the profile is multi-tenant.
|
|
105
|
+
* @deprecated prefer {@link getSchemaSink}, which supports both modes. Kept for
|
|
106
|
+
* single-tenant callers and existing tests.
|
|
46
107
|
*/
|
|
47
108
|
export declare function getSingleTenantMetaDriver(role?: "anon" | "service_role"): Promise<{
|
|
48
109
|
driver: MetaDriver;
|
|
@@ -50,8 +111,34 @@ export declare function getSingleTenantMetaDriver(role?: "anon" | "service_role"
|
|
|
50
111
|
profileName: string;
|
|
51
112
|
}>;
|
|
52
113
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
114
|
+
* Resolve the active profile into a mode-appropriate {@link SchemaSink}.
|
|
115
|
+
* Unlike {@link getSingleTenantMetaDriver}, a multi-tenant profile is fully
|
|
116
|
+
* supported: DDL/RLS route through the tenant self-service endpoints using the
|
|
117
|
+
* per-tenant service_role key (Kong injects the trusted X-Tenant-Id).
|
|
118
|
+
*/
|
|
119
|
+
export declare function getSchemaSink(role?: "anon" | "service_role"): Promise<SchemaSink>;
|
|
120
|
+
/**
|
|
121
|
+
* Apply a raw SQL script through an injected executor (single-tenant legacy
|
|
122
|
+
* path). Schema substitution uses the single-tenant rule; RLS statements are
|
|
123
|
+
* NOT diverted (they run verbatim through the executor). For mode-aware apply
|
|
124
|
+
* with RLS diversion use {@link applySchema}.
|
|
55
125
|
*/
|
|
56
126
|
export declare function applySqlStatements(rawSql: string, source: string, opts: ApplyOptions, executor: SqlExecutor): Promise<ApplyResult>;
|
|
127
|
+
export interface ApplySchemaParams extends ApplyOptions {
|
|
128
|
+
rawSql: string;
|
|
129
|
+
source: string;
|
|
130
|
+
/** Parsed `db/rls.json` (preferred RLS source); null/absent → fall back to schema.sql. */
|
|
131
|
+
rls?: RlsJson | null;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Mode-aware apply used by `db push` and `app db-init`.
|
|
135
|
+
*
|
|
136
|
+
* - Splits the script, then (multi-tenant OR when rls.json is present) diverts
|
|
137
|
+
* the embedded central-registry RLS INSERTs out of the raw-SQL stream.
|
|
138
|
+
* - RLS source: `db/rls.json` when present; else parsed from schema.sql
|
|
139
|
+
* (multi-tenant) or left embedded (single-tenant legacy).
|
|
140
|
+
* - `__SCHEMA__`: single-tenant → --schema; multi-tenant → de-qualified.
|
|
141
|
+
* - Order: DDL/seed first (tables must exist), then RLS tables, then policies.
|
|
142
|
+
*/
|
|
143
|
+
export declare function applySchema(params: ApplySchemaParams, sink: SchemaSink): Promise<ApplyResult>;
|
|
57
144
|
//# sourceMappingURL=apply-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-schema.d.ts","sourceRoot":"","sources":["../../src/db/apply-schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"apply-schema.d.ts","sourceRoot":"","sources":["../../src/db/apply-schema.ts"],"names":[],"mappings":"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"}
|