dbctx 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +6004 -279
- package/package.json +11 -8
- package/dist/app/assemble.d.mts +0 -5
- package/dist/app/assemble.d.mts.map +0 -1
- package/dist/app/assemble.mjs +0 -182
- package/dist/app/config.d.mts +0 -9
- package/dist/app/config.d.mts.map +0 -1
- package/dist/app/config.mjs +0 -49
- package/dist/app/db.d.mts +0 -9
- package/dist/app/db.d.mts.map +0 -1
- package/dist/app/db.mjs +0 -182
- package/dist/app/detect.d.mts +0 -14
- package/dist/app/detect.d.mts.map +0 -1
- package/dist/app/detect.mjs +0 -108
- package/dist/app/list.d.mts +0 -4
- package/dist/app/list.d.mts.map +0 -1
- package/dist/app/list.mjs +0 -93
- package/dist/app/load-introspection.d.mts +0 -26
- package/dist/app/load-introspection.d.mts.map +0 -1
- package/dist/app/load-introspection.mjs +0 -89
- package/dist/app/login.d.mts +0 -2
- package/dist/app/login.d.mts.map +0 -1
- package/dist/app/login.mjs +0 -69
- package/dist/app/open-url.d.mts +0 -6
- package/dist/app/open-url.d.mts.map +0 -1
- package/dist/app/open-url.mjs +0 -33
- package/dist/app/sample.d.mts +0 -24
- package/dist/app/sample.d.mts.map +0 -1
- package/dist/app/sample.mjs +0 -257
- package/dist/app/session.d.mts +0 -9
- package/dist/app/session.d.mts.map +0 -1
- package/dist/app/session.mjs +0 -195
- package/dist/app/ssh.d.mts +0 -3
- package/dist/app/ssh.d.mts.map +0 -1
- package/dist/app/ssh.mjs +0 -218
- package/dist/app/tail.d.mts +0 -13
- package/dist/app/tail.d.mts.map +0 -1
- package/dist/app/tail.mjs +0 -168
- package/dist/db/analyze.d.mts +0 -3
- package/dist/db/analyze.d.mts.map +0 -1
- package/dist/db/analyze.mjs +0 -16
- package/dist/db/attributes.d.mts +0 -16
- package/dist/db/attributes.d.mts.map +0 -1
- package/dist/db/attributes.mjs +0 -37
- package/dist/db/check-constraints.d.mts +0 -9
- package/dist/db/check-constraints.d.mts.map +0 -1
- package/dist/db/check-constraints.mjs +0 -17
- package/dist/db/custom-types.d.mts +0 -26
- package/dist/db/custom-types.d.mts.map +0 -1
- package/dist/db/custom-types.mjs +0 -61
- package/dist/db/enums.d.mts +0 -8
- package/dist/db/enums.d.mts.map +0 -1
- package/dist/db/enums.mjs +0 -24
- package/dist/db/extensions.d.mts +0 -8
- package/dist/db/extensions.d.mts.map +0 -1
- package/dist/db/extensions.mjs +0 -14
- package/dist/db/file-stats.d.mts +0 -11
- package/dist/db/file-stats.d.mts.map +0 -1
- package/dist/db/file-stats.mjs +0 -43
- package/dist/db/foreign-keys.d.mts +0 -14
- package/dist/db/foreign-keys.d.mts.map +0 -1
- package/dist/db/foreign-keys.mjs +0 -44
- package/dist/db/functions.d.mts +0 -11
- package/dist/db/functions.d.mts.map +0 -1
- package/dist/db/functions.mjs +0 -23
- package/dist/db/index.d.mts +0 -19
- package/dist/db/index.d.mts.map +0 -1
- package/dist/db/index.mjs +0 -19
- package/dist/db/indexes.d.mts +0 -16
- package/dist/db/indexes.d.mts.map +0 -1
- package/dist/db/indexes.mjs +0 -38
- package/dist/db/planner-stats.d.mts +0 -33
- package/dist/db/planner-stats.d.mts.map +0 -1
- package/dist/db/planner-stats.mjs +0 -103
- package/dist/db/relations.d.mts +0 -11
- package/dist/db/relations.d.mts.map +0 -1
- package/dist/db/relations.mjs +0 -32
- package/dist/db/rls.d.mts +0 -21
- package/dist/db/rls.d.mts.map +0 -1
- package/dist/db/rls.mjs +0 -48
- package/dist/db/sample.d.mts +0 -16
- package/dist/db/sample.d.mts.map +0 -1
- package/dist/db/sample.mjs +0 -73
- package/dist/db/sequences.d.mts +0 -15
- package/dist/db/sequences.d.mts.map +0 -1
- package/dist/db/sequences.mjs +0 -31
- package/dist/db/stats.d.mts +0 -12
- package/dist/db/stats.d.mts.map +0 -1
- package/dist/db/stats.mjs +0 -34
- package/dist/db/triggers.d.mts +0 -11
- package/dist/db/triggers.d.mts.map +0 -1
- package/dist/db/triggers.mjs +0 -21
- package/dist/db/version.d.mts +0 -14
- package/dist/db/version.d.mts.map +0 -1
- package/dist/db/version.mjs +0 -27
- package/dist/flow/events.d.mts +0 -115
- package/dist/flow/events.d.mts.map +0 -1
- package/dist/flow/events.mjs +0 -2
- package/dist/flow/interpreter.d.mts +0 -21
- package/dist/flow/interpreter.d.mts.map +0 -1
- package/dist/flow/interpreter.mjs +0 -605
- package/dist/flow/projection.d.mts +0 -17
- package/dist/flow/projection.d.mts.map +0 -1
- package/dist/flow/projection.mjs +0 -83
- package/dist/flow/projection.test.d.mts +0 -2
- package/dist/flow/projection.test.d.mts.map +0 -1
- package/dist/flow/projection.test.mjs +0 -162
- package/dist/flow/reducer.d.mts +0 -5
- package/dist/flow/reducer.d.mts.map +0 -1
- package/dist/flow/reducer.mjs +0 -306
- package/dist/flow/reducer.test.d.mts +0 -2
- package/dist/flow/reducer.test.d.mts.map +0 -1
- package/dist/flow/reducer.test.mjs +0 -479
- package/dist/flow/run.d.mts +0 -3
- package/dist/flow/run.d.mts.map +0 -1
- package/dist/flow/run.mjs +0 -89
- package/dist/flow/states.d.mts +0 -54
- package/dist/flow/states.d.mts.map +0 -1
- package/dist/flow/states.mjs +0 -39
- package/dist/index.d.mts +0 -29
- package/dist/index.d.mts.map +0 -1
- package/dist/lib/atomic-write.d.mts +0 -4
- package/dist/lib/atomic-write.d.mts.map +0 -1
- package/dist/lib/atomic-write.mjs +0 -75
- package/dist/lib/env.d.mts +0 -2
- package/dist/lib/env.d.mts.map +0 -1
- package/dist/lib/env.mjs +0 -4
- package/dist/lib/stream-job.d.mts +0 -19
- package/dist/lib/stream-job.d.mts.map +0 -1
- package/dist/lib/stream-job.mjs +0 -55
- package/dist/lib/trpc-url.d.mts +0 -2
- package/dist/lib/trpc-url.d.mts.map +0 -1
- package/dist/lib/trpc-url.mjs +0 -5
- package/dist/lib/trpc.d.mts +0 -7
- package/dist/lib/trpc.d.mts.map +0 -1
- package/dist/lib/trpc.mjs +0 -37
- package/dist/lib/trpc.react.d.mts +0 -4
- package/dist/lib/trpc.react.d.mts.map +0 -1
- package/dist/lib/trpc.react.mjs +0 -3
- package/dist/lib/version.d.mts +0 -2
- package/dist/lib/version.d.mts.map +0 -1
- package/dist/lib/version.mjs +0 -5
- package/dist/logger.d.mts +0 -3
- package/dist/logger.d.mts.map +0 -1
- package/dist/logger.mjs +0 -11
- package/dist/providers/TrpcProvider.d.ts +0 -9
- package/dist/providers/TrpcProvider.d.ts.map +0 -1
- package/dist/providers/TrpcProvider.js +0 -41
- package/dist/store.d.mts +0 -176
- package/dist/store.d.mts.map +0 -1
- package/dist/store.mjs +0 -147
- package/dist/types/connection.d.mts +0 -17
- package/dist/types/connection.d.mts.map +0 -1
- package/dist/types/connection.mjs +0 -2
- package/dist/ui/App.d.ts +0 -10
- package/dist/ui/App.d.ts.map +0 -1
- package/dist/ui/App.js +0 -41
- package/dist/ui/components/Analyze.d.ts +0 -10
- package/dist/ui/components/Analyze.d.ts.map +0 -1
- package/dist/ui/components/Analyze.js +0 -54
- package/dist/ui/components/Billing.d.ts +0 -10
- package/dist/ui/components/Billing.d.ts.map +0 -1
- package/dist/ui/components/Billing.js +0 -40
- package/dist/ui/components/DB.d.ts +0 -10
- package/dist/ui/components/DB.d.ts.map +0 -1
- package/dist/ui/components/DB.js +0 -22
- package/dist/ui/components/DatabasePicker.d.ts +0 -13
- package/dist/ui/components/DatabasePicker.d.ts.map +0 -1
- package/dist/ui/components/DatabasePicker.js +0 -79
- package/dist/ui/components/Enrich.d.ts +0 -10
- package/dist/ui/components/Enrich.d.ts.map +0 -1
- package/dist/ui/components/Enrich.js +0 -41
- package/dist/ui/components/Error.d.ts +0 -7
- package/dist/ui/components/Error.d.ts.map +0 -1
- package/dist/ui/components/Error.js +0 -6
- package/dist/ui/components/Gate.d.ts +0 -10
- package/dist/ui/components/Gate.d.ts.map +0 -1
- package/dist/ui/components/Gate.js +0 -15
- package/dist/ui/components/Introspect.d.ts +0 -10
- package/dist/ui/components/Introspect.d.ts.map +0 -1
- package/dist/ui/components/Introspect.js +0 -66
- package/dist/ui/components/IntrospectionUpload.d.ts +0 -10
- package/dist/ui/components/IntrospectionUpload.d.ts.map +0 -1
- package/dist/ui/components/IntrospectionUpload.js +0 -30
- package/dist/ui/components/Login.d.ts +0 -19
- package/dist/ui/components/Login.d.ts.map +0 -1
- package/dist/ui/components/Login.js +0 -38
- package/dist/ui/components/OutputJson.d.ts +0 -10
- package/dist/ui/components/OutputJson.d.ts.map +0 -1
- package/dist/ui/components/OutputJson.js +0 -18
- package/dist/ui/components/PasswordInput.d.ts +0 -7
- package/dist/ui/components/PasswordInput.d.ts.map +0 -1
- package/dist/ui/components/PasswordInput.js +0 -32
- package/dist/ui/components/SSH.d.ts +0 -10
- package/dist/ui/components/SSH.d.ts.map +0 -1
- package/dist/ui/components/SSH.js +0 -22
- package/dist/ui/components/SamplesUpload.d.ts +0 -10
- package/dist/ui/components/SamplesUpload.d.ts.map +0 -1
- package/dist/ui/components/SamplesUpload.js +0 -24
- package/dist/ui/components/Sampling.d.ts +0 -10
- package/dist/ui/components/Sampling.d.ts.map +0 -1
- package/dist/ui/components/Sampling.js +0 -58
- package/dist/ui/components/Session.d.ts +0 -10
- package/dist/ui/components/Session.d.ts.map +0 -1
- package/dist/ui/components/Session.js +0 -47
- package/dist/ui/components/Spinner.d.ts +0 -3
- package/dist/ui/components/Spinner.d.ts.map +0 -1
- package/dist/ui/components/Spinner.js +0 -30
- package/dist/ui/components/Splash.d.ts +0 -3
- package/dist/ui/components/Splash.d.ts.map +0 -1
- package/dist/ui/components/Splash.js +0 -13
- package/dist/ui/components/TextInput.d.ts +0 -11
- package/dist/ui/components/TextInput.d.ts.map +0 -1
- package/dist/ui/components/TextInput.js +0 -286
- package/dist/ui/components/UserExplanation.d.ts +0 -10
- package/dist/ui/components/UserExplanation.d.ts.map +0 -1
- package/dist/ui/components/UserExplanation.js +0 -34
- package/dist/validatePaths.d.mts +0 -13
- package/dist/validatePaths.d.mts.map +0 -1
- package/dist/validatePaths.mjs +0 -58
package/dist/app/sample.mjs
DELETED
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
|
-
import { readFile, mkdir, readdir, stat } from 'node:fs/promises';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import PQueue from 'p-queue';
|
|
5
|
-
import { runInAction, when } from 'mobx';
|
|
6
|
-
import { z } from 'zod';
|
|
7
|
-
import { atomicWriteFile, recoverAtomicWritesInDir, } from '../lib/atomic-write.mjs';
|
|
8
|
-
import { sampleColumn, sampleCompositeSubField, fetchCompositeSubFields, } from '../db/index.mjs';
|
|
9
|
-
const SAMPLEABLE_TYPE_PREFIXES = Object.freeze([
|
|
10
|
-
'text',
|
|
11
|
-
'character',
|
|
12
|
-
'citext',
|
|
13
|
-
'integer',
|
|
14
|
-
'bigint',
|
|
15
|
-
'smallint',
|
|
16
|
-
'numeric',
|
|
17
|
-
'decimal',
|
|
18
|
-
'real',
|
|
19
|
-
'double precision',
|
|
20
|
-
'boolean',
|
|
21
|
-
'date',
|
|
22
|
-
'timestamp',
|
|
23
|
-
'time with',
|
|
24
|
-
'time without',
|
|
25
|
-
'interval',
|
|
26
|
-
'uuid',
|
|
27
|
-
'json',
|
|
28
|
-
'money',
|
|
29
|
-
'inet',
|
|
30
|
-
'cidr',
|
|
31
|
-
]);
|
|
32
|
-
const TEXTUAL_TYPE_PREFIXES = Object.freeze([
|
|
33
|
-
'text',
|
|
34
|
-
'character',
|
|
35
|
-
'citext',
|
|
36
|
-
'json',
|
|
37
|
-
]);
|
|
38
|
-
const MAX_TEXT_LENGTH = 512;
|
|
39
|
-
const SAMPLING_CONCURRENCY = 8;
|
|
40
|
-
const sensitiveMaskSchema = z.record(z.string(), z.array(z.string()));
|
|
41
|
-
const matchesPrefix = (dataType, prefixes) => {
|
|
42
|
-
const lower = dataType.toLowerCase();
|
|
43
|
-
return prefixes.some((prefix) => lower.startsWith(prefix));
|
|
44
|
-
};
|
|
45
|
-
const isSampleableScalar = (dataType) => matchesPrefix(dataType, SAMPLEABLE_TYPE_PREFIXES);
|
|
46
|
-
const isArrayType = (dataType) => dataType.endsWith('[]') || dataType.toLowerCase().startsWith('array');
|
|
47
|
-
const getArrayElementType = (dataType) => dataType.endsWith('[]') ? dataType.slice(0, -2) : dataType;
|
|
48
|
-
const resolveEnumValues = (dataType, enums) => {
|
|
49
|
-
if (enums[dataType]) {
|
|
50
|
-
return enums[dataType].values;
|
|
51
|
-
}
|
|
52
|
-
if (isArrayType(dataType)) {
|
|
53
|
-
const el = getArrayElementType(dataType);
|
|
54
|
-
if (enums[el]) {
|
|
55
|
-
return enums[el].values;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return null;
|
|
59
|
-
};
|
|
60
|
-
const isTextualType = (dataType) => matchesPrefix(dataType, TEXTUAL_TYPE_PREFIXES);
|
|
61
|
-
const truncateValue = (value, dataType) => isTextualType(dataType) && value.length > MAX_TEXT_LENGTH
|
|
62
|
-
? value.slice(0, MAX_TEXT_LENGTH) + '...'
|
|
63
|
-
: value;
|
|
64
|
-
const hashTableName = (name) => createHash('sha256').update(name).digest('hex');
|
|
65
|
-
export const loadSensitiveMask = async (path) => {
|
|
66
|
-
const raw = await readFile(path, 'utf-8');
|
|
67
|
-
const parsed = JSON.parse(raw);
|
|
68
|
-
return sensitiveMaskSchema.parse(parsed);
|
|
69
|
-
};
|
|
70
|
-
const isSampleableType = (dataType, enumNames) => {
|
|
71
|
-
if (isSampleableScalar(dataType)) {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
if (enumNames.has(dataType)) {
|
|
75
|
-
return true;
|
|
76
|
-
}
|
|
77
|
-
if (isArrayType(dataType)) {
|
|
78
|
-
const elementType = getArrayElementType(dataType);
|
|
79
|
-
return isSampleableScalar(elementType) || enumNames.has(elementType);
|
|
80
|
-
}
|
|
81
|
-
return false;
|
|
82
|
-
};
|
|
83
|
-
export const prepareOutputDir = async (dirPath, allowOverwrite, store) => {
|
|
84
|
-
try {
|
|
85
|
-
const dirStat = await stat(dirPath).catch(() => null);
|
|
86
|
-
if (dirStat !== null && !dirStat.isDirectory()) {
|
|
87
|
-
runInAction(() => {
|
|
88
|
-
store.steps.sampling.state = 'error';
|
|
89
|
-
store.steps.sampling.error = `--output-samples path "${dirPath}" exists but is not a directory`;
|
|
90
|
-
});
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
if (dirStat === null) {
|
|
94
|
-
await mkdir(dirPath, { recursive: true });
|
|
95
|
-
runInAction(() => {
|
|
96
|
-
store.steps.sampling.outputDir = dirPath;
|
|
97
|
-
});
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
await recoverAtomicWritesInDir(dirPath);
|
|
101
|
-
const entries = await readdir(dirPath);
|
|
102
|
-
if (entries.length > 0 && !allowOverwrite) {
|
|
103
|
-
runInAction(() => {
|
|
104
|
-
store.steps.sampling.state = 'prompting-overwrite';
|
|
105
|
-
store.steps.sampling.outputDir = dirPath;
|
|
106
|
-
});
|
|
107
|
-
await when(() => store.steps.sampling.confirmed !== null);
|
|
108
|
-
if (!store.steps.sampling.confirmed) {
|
|
109
|
-
runInAction(() => {
|
|
110
|
-
store.steps.sampling.state = 'done';
|
|
111
|
-
});
|
|
112
|
-
return false;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
runInAction(() => {
|
|
116
|
-
store.steps.sampling.outputDir = dirPath;
|
|
117
|
-
});
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
catch (err) {
|
|
121
|
-
runInAction(() => {
|
|
122
|
-
store.steps.sampling.state = 'error';
|
|
123
|
-
store.steps.sampling.error =
|
|
124
|
-
err instanceof Error
|
|
125
|
-
? `Failed to prepare output directory: ${err.message}`
|
|
126
|
-
: String(err);
|
|
127
|
-
});
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
export const persistTableSamplesToDir = async (outputDir, event, indexAccumulator) => {
|
|
132
|
-
const fileName = `${hashTableName(event.tableName)}.json`;
|
|
133
|
-
await atomicWriteFile(join(outputDir, fileName), JSON.stringify(event.samples, null, 2));
|
|
134
|
-
indexAccumulator[event.tableName] = fileName;
|
|
135
|
-
await atomicWriteFile(join(outputDir, 'index.json'), JSON.stringify(indexAccumulator, null, 2));
|
|
136
|
-
};
|
|
137
|
-
export const runSampling = async function* (pool, introspection, store, mask, tableFilter) {
|
|
138
|
-
const enumNames = new Set(Object.keys(introspection.enums));
|
|
139
|
-
const relationEntries = Object.entries(introspection.relations).filter(([name]) => (tableFilter ? tableFilter.has(name) : true));
|
|
140
|
-
runInAction(() => {
|
|
141
|
-
store.steps.sampling.state = 'fetching';
|
|
142
|
-
store.steps.sampling.counts.totalTables = relationEntries.length;
|
|
143
|
-
});
|
|
144
|
-
const queue = new PQueue({ concurrency: SAMPLING_CONCURRENCY });
|
|
145
|
-
for (const [tableName, relation] of relationEntries) {
|
|
146
|
-
const maskedColumns = mask[tableName] ?? [];
|
|
147
|
-
const maskedSet = new Set(maskedColumns);
|
|
148
|
-
const attributes = Object.values(relation.attributes);
|
|
149
|
-
const relationKind = relation.kind;
|
|
150
|
-
const estimatedRowCount = relation.estimated_row_count ?? 0;
|
|
151
|
-
const workItems = [];
|
|
152
|
-
let skipped = 0;
|
|
153
|
-
for (const attr of attributes) {
|
|
154
|
-
if (maskedSet.has(attr.name)) {
|
|
155
|
-
skipped += 1;
|
|
156
|
-
continue;
|
|
157
|
-
}
|
|
158
|
-
const dataType = attr.data_type;
|
|
159
|
-
if (isSampleableType(dataType, enumNames)) {
|
|
160
|
-
workItems.push({
|
|
161
|
-
columnName: attr.name,
|
|
162
|
-
dataType,
|
|
163
|
-
estimatedDistinct: 'estimated_distinct' in attr
|
|
164
|
-
? attr.estimated_distinct
|
|
165
|
-
: 0,
|
|
166
|
-
composite: null,
|
|
167
|
-
enumValues: resolveEnumValues(dataType, introspection.enums),
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
else if (!isArrayType(dataType) &&
|
|
171
|
-
!isSampleableScalar(dataType) &&
|
|
172
|
-
!enumNames.has(dataType)) {
|
|
173
|
-
// Potential composite type — introspect sub-fields
|
|
174
|
-
const subFields = await fetchCompositeSubFields(pool, dataType);
|
|
175
|
-
if (subFields.length > 0) {
|
|
176
|
-
for (const sf of subFields) {
|
|
177
|
-
if (maskedSet.has(sf.name)) {
|
|
178
|
-
skipped += 1;
|
|
179
|
-
continue;
|
|
180
|
-
}
|
|
181
|
-
if (isSampleableType(sf.data_type, enumNames)) {
|
|
182
|
-
workItems.push({
|
|
183
|
-
columnName: `${attr.name}.${sf.name}`,
|
|
184
|
-
dataType: sf.data_type,
|
|
185
|
-
estimatedDistinct: 0,
|
|
186
|
-
composite: {
|
|
187
|
-
columnName: attr.name,
|
|
188
|
-
subFieldName: sf.name,
|
|
189
|
-
},
|
|
190
|
-
enumValues: resolveEnumValues(sf.data_type, introspection.enums),
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
skipped += 1;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
skipped += 1;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
skipped += 1;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
runInAction(() => {
|
|
207
|
-
store.steps.sampling.counts.totalColumns += workItems.length;
|
|
208
|
-
store.steps.sampling.counts.skippedColumns += skipped;
|
|
209
|
-
});
|
|
210
|
-
const columnResults = (await Promise.all(workItems.map((item) => {
|
|
211
|
-
if (item.enumValues) {
|
|
212
|
-
runInAction(() => {
|
|
213
|
-
store.steps.sampling.counts.sampledColumns += 1;
|
|
214
|
-
});
|
|
215
|
-
const columnName = item.composite
|
|
216
|
-
? `${item.composite.columnName}.${item.composite.subFieldName}`
|
|
217
|
-
: item.columnName;
|
|
218
|
-
return Promise.resolve({
|
|
219
|
-
column_name: columnName,
|
|
220
|
-
strategy: 'distinct',
|
|
221
|
-
values: item.enumValues,
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
return queue.add(async () => {
|
|
225
|
-
const result = item.composite
|
|
226
|
-
? await sampleCompositeSubField(pool, tableName, item.composite.columnName, item.composite.subFieldName, item.estimatedDistinct, estimatedRowCount, relationKind)
|
|
227
|
-
: await sampleColumn(pool, tableName, item.columnName, item.estimatedDistinct, estimatedRowCount, relationKind);
|
|
228
|
-
runInAction(() => {
|
|
229
|
-
store.steps.sampling.counts.sampledColumns += 1;
|
|
230
|
-
});
|
|
231
|
-
return result;
|
|
232
|
-
});
|
|
233
|
-
})));
|
|
234
|
-
const columns = Object.fromEntries(columnResults.map((sample) => [
|
|
235
|
-
sample.column_name,
|
|
236
|
-
{
|
|
237
|
-
strategy: sample.strategy,
|
|
238
|
-
count: sample.values.length,
|
|
239
|
-
values: sample.values.map((v) => truncateValue(v, workItems.find((w) => w.columnName === sample.column_name)?.dataType ?? '')),
|
|
240
|
-
},
|
|
241
|
-
]));
|
|
242
|
-
const tableSamples = {
|
|
243
|
-
table: tableName,
|
|
244
|
-
sampled_at: new Date().toISOString(),
|
|
245
|
-
columns,
|
|
246
|
-
excluded_columns: maskedColumns,
|
|
247
|
-
};
|
|
248
|
-
yield { tableName, samples: tableSamples };
|
|
249
|
-
runInAction(() => {
|
|
250
|
-
store.steps.sampling.counts.completedTables += 1;
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
runInAction(() => {
|
|
254
|
-
store.steps.sampling.state = 'done';
|
|
255
|
-
});
|
|
256
|
-
};
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtcGxlLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImFwcC9zYW1wbGUubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFL0IsT0FBTyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQzdCLE9BQU8sRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFLdEIsT0FBTyxFQUNILGVBQWUsRUFDZix3QkFBd0IsR0FDM0IsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0gsWUFBWSxFQUNaLHVCQUF1QixFQUN2Qix1QkFBdUIsR0FHMUIsTUFBTSxpQkFBaUIsQ0FBQztBQXNCekIsTUFBTSx3QkFBd0IsR0FBc0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5RCxNQUFNO0lBQ04sV0FBVztJQUNYLFFBQVE7SUFDUixTQUFTO0lBQ1QsUUFBUTtJQUNSLFVBQVU7SUFDVixTQUFTO0lBQ1QsU0FBUztJQUNULE1BQU07SUFDTixrQkFBa0I7SUFDbEIsU0FBUztJQUNULE1BQU07SUFDTixXQUFXO0lBQ1gsV0FBVztJQUNYLGNBQWM7SUFDZCxVQUFVO0lBQ1YsTUFBTTtJQUNOLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLE1BQU07Q0FDQSxDQUFDLENBQUM7QUFFWixNQUFNLHFCQUFxQixHQUFzQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNELE1BQU07SUFDTixXQUFXO0lBQ1gsUUFBUTtJQUNSLE1BQU07Q0FDQSxDQUFDLENBQUM7QUFFWixNQUFNLGVBQWUsR0FB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SyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlSGFzaH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHtyZWFkRmlsZSwgbWtkaXIsIHJlYWRkaXIsIHN0YXR9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtqb2lufSBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgUFF1ZXVlIGZyb20gJ3AtcXVldWUnO1xuaW1wb3J0IHtydW5JbkFjdGlvbiwgd2hlbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuaW1wb3J0IHR5cGUge1REYXRhYmFzZUludHJvc3BlY3Rpb259IGZyb20gJ0BkYmN0eC9jb3JlJztcblxuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB7XG4gICAgYXRvbWljV3JpdGVGaWxlLFxuICAgIHJlY292ZXJBdG9taWNXcml0ZXNJbkRpcixcbn0gZnJvbSAnLi4vbGliL2F0b21pYy13cml0ZS5tanMnO1xuaW1wb3J0IHtcbiAgICBzYW1wbGVDb2x1bW4sXG4gICAgc2FtcGxlQ29tcG9zaXRlU3ViRmllbGQsXG4gICAgZmV0Y2hDb21wb3NpdGVTdWJGaWVsZHMsXG4gICAgdHlwZSBUQ29sdW1uU2FtcGxlLFxuICAgIHR5cGUgVFJlbGF0aW9uS2luZCxcbn0gZnJvbSAnLi4vZGIvaW5kZXgubWpzJztcblxuZXhwb3J0IHR5cGUgVFNlbnNpdGl2ZU1hc2sgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4+O1xuXG5leHBvcnQgdHlwZSBUVGFibGVTYW1wbGVDb2x1bW4gPSB7XG4gICAgcmVhZG9ubHkgc3RyYXRlZ3k6ICdkaXN0aW5jdCcgfCAncmFuZG9tJztcbiAgICByZWFkb25seSBjb3VudDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUVGFibGVTYW1wbGVzID0ge1xuICAgIHJlYWRvbmx5IHRhYmxlOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2FtcGxlZF9hdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFRUYWJsZVNhbXBsZUNvbHVtbj4+O1xuICAgIHJlYWRvbmx5IGV4Y2x1ZGVkX2NvbHVtbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgVFRhYmxlU2FtcGxlRXZlbnQgPSB7XG4gICAgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2FtcGxlczogVFRhYmxlU2FtcGxlcztcbn07XG5cbmNvbnN0IFNBTVBMRUFCTEVfVFlQRV9QUkVGSVhFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBPYmplY3QuZnJlZXplKFtcbiAgICAndGV4dCcsXG4gICAgJ2NoYXJhY3RlcicsXG4gICAgJ2NpdGV4dCcsXG4gICAgJ2ludGVnZXInLFxuICAgICdiaWdpbnQnLFxuICAgICdzbWFsbGludCcsXG4gICAgJ251bWVyaWMnLFxuICAgICdkZWNpbWFsJyxcbiAgICAncmVhbCcsXG4gICAgJ2RvdWJsZSBwcmVjaXNpb24nLFxuICAgICdib29sZWFuJyxcbiAgICAnZGF0ZScsXG4gICAgJ3RpbWVzdGFtcCcsXG4gICAgJ3RpbWUgd2l0aCcsXG4gICAgJ3RpbWUgd2l0aG91dCcsXG4gICAgJ2ludGVydmFsJyxcbiAgICAndXVpZCcsXG4gICAgJ2pzb24nLFxuICAgICdtb25leScsXG4gICAgJ2luZXQnLFxuICAgICdjaWRyJyxcbl0gYXMgY29uc3QpO1xuXG5jb25zdCBURVhUVUFMX1RZUEVfUFJFRklYRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gT2JqZWN0LmZyZWV6ZShbXG4gICAgJ3RleHQnLFxuICAgICdjaGFyYWN0ZXInLFxuICAgICdjaXRleHQnLFxuICAgICdqc29uJyxcbl0gYXMgY29uc3QpO1xuXG5jb25zdCBNQVhfVEVYVF9MRU5HVEggPSA1MTI7XG5jb25zdCBTQU1QTElOR19DT05DVVJSRU5DWSA9IDg7XG5cbmNvbnN0IHNlbnNpdGl2ZU1hc2tTY2hlbWEgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFycmF5KHouc3RyaW5nKCkpKTtcblxuY29uc3QgbWF0Y2hlc1ByZWZpeCA9IChcbiAgICBkYXRhVHlwZTogc3RyaW5nLFxuICAgIHByZWZpeGVzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGxvd2VyID0gZGF0YVR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gcHJlZml4ZXMuc29tZSgocHJlZml4KSA9PiBsb3dlci5zdGFydHNXaXRoKHByZWZpeCkpO1xufTtcblxuY29uc3QgaXNTYW1wbGVhYmxlU2NhbGFyID0gKGRhdGFUeXBlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgbWF0Y2hlc1ByZWZpeChkYXRhVHlwZSwgU0FNUExFQUJMRV9UWVBFX1BSRUZJWEVTKTtcblxuY29uc3QgaXNBcnJheVR5cGUgPSAoZGF0YVR5cGU6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICBkYXRhVHlwZS5lbmRzV2l0aCgnW10nKSB8fCBkYXRhVHlwZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2FycmF5Jyk7XG5cbmNvbnN0IGdldEFycmF5RWxlbWVudFR5cGUgPSAoZGF0YVR5cGU6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIGRhdGFUeXBlLmVuZHNXaXRoKCdbXScpID8gZGF0YVR5cGUuc2xpY2UoMCwgLTIpIDogZGF0YVR5cGU7XG5cbmNvbnN0IHJlc29sdmVFbnVtVmFsdWVzID0gKFxuICAgIGRhdGFUeXBlOiBzdHJpbmcsXG4gICAgZW51bXM6IFREYXRhYmFzZUludHJvc3BlY3Rpb25bJ2VudW1zJ10sXG4pOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGwgPT4ge1xuICAgIGlmIChlbnVtc1tkYXRhVHlwZV0pIHtcbiAgICAgICAgcmV0dXJuIGVudW1zW2RhdGFUeXBlXS52YWx1ZXM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5VHlwZShkYXRhVHlwZSkpIHtcbiAgICAgICAgY29uc3QgZWwgPSBnZXRBcnJheUVsZW1lbnRUeXBlKGRhdGFUeXBlKTtcbiAgICAgICAgaWYgKGVudW1zW2VsXSkge1xuICAgICAgICAgICAgcmV0dXJuIGVudW1zW2VsXS52YWx1ZXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBpc1RleHR1YWxUeXBlID0gKGRhdGFUeXBlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgbWF0Y2hlc1ByZWZpeChkYXRhVHlwZSwgVEVYVFVBTF9UWVBFX1BSRUZJWEVTKTtcblxuY29uc3QgdHJ1bmNhdGVWYWx1ZSA9ICh2YWx1ZTogc3RyaW5nLCBkYXRhVHlwZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgaXNUZXh0dWFsVHlwZShkYXRhVHlwZSkgJiYgdmFsdWUubGVuZ3RoID4gTUFYX1RFWFRfTEVOR1RIXG4gICAgICAgID8gdmFsdWUuc2xpY2UoMCwgTUFYX1RFWFRfTEVOR1RIKSArICcuLi4nXG4gICAgICAgIDogdmFsdWU7XG5cbmNvbnN0IGhhc2hUYWJsZU5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKG5hbWUpLmRpZ2VzdCgnaGV4Jyk7XG5cbmV4cG9ydCBjb25zdCBsb2FkU2Vuc2l0aXZlTWFzayA9IGFzeW5jIChcbiAgICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPFRTZW5zaXRpdmVNYXNrPiA9PiB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIHVua25vd247XG4gICAgcmV0dXJuIHNlbnNpdGl2ZU1hc2tTY2hlbWEucGFyc2UocGFyc2VkKTtcbn07XG5cbmNvbnN0IGlzU2FtcGxlYWJsZVR5cGUgPSAoXG4gICAgZGF0YVR5cGU6IHN0cmluZyxcbiAgICBlbnVtTmFtZXM6IFJlYWRvbmx5U2V0PHN0cmluZz4sXG4pOiBib29sZWFuID0+IHtcbiAgICBpZiAoaXNTYW1wbGVhYmxlU2NhbGFyKGRhdGFUeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGVudW1OYW1lcy5oYXMoZGF0YVR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheVR5cGUoZGF0YVR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gZ2V0QXJyYXlFbGVtZW50VHlwZShkYXRhVHlwZSk7XG4gICAgICAgIHJldHVybiBpc1NhbXBsZWFibGVTY2FsYXIoZWxlbWVudFR5cGUpIHx8IGVudW1OYW1lcy5oYXMoZWxlbWVudFR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgcHJlcGFyZU91dHB1dERpciA9IGFzeW5jIChcbiAgICBkaXJQYXRoOiBzdHJpbmcsXG4gICAgYWxsb3dPdmVyd3JpdGU6IGJvb2xlYW4sXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRpclN0YXQgPSBhd2FpdCBzdGF0KGRpclBhdGgpLmNhdGNoKCgpID0+IG51bGwpO1xuXG4gICAgICAgIGlmIChkaXJTdGF0ICE9PSBudWxsICYmICFkaXJTdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuZXJyb3IgPSBgLS1vdXRwdXQtc2FtcGxlcyBwYXRoIFwiJHtkaXJQYXRofVwiIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5YDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpclN0YXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGF3YWl0IG1rZGlyKGRpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5vdXRwdXREaXIgPSBkaXJQYXRoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlY292ZXJBdG9taWNXcml0ZXNJbkRpcihkaXJQYXRoKTtcblxuICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihkaXJQYXRoKTtcblxuICAgICAgICBpZiAoZW50cmllcy5sZW5ndGggPiAwICYmICFhbGxvd092ZXJ3cml0ZSkge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnN0YXRlID0gJ3Byb21wdGluZy1vdmVyd3JpdGUnO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLm91dHB1dERpciA9IGRpclBhdGg7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgd2hlbigoKSA9PiBzdG9yZS5zdGVwcy5zYW1wbGluZy5jb25maXJtZWQgIT09IG51bGwpO1xuXG4gICAgICAgICAgICBpZiAoIXN0b3JlLnN0ZXBzLnNhbXBsaW5nLmNvbmZpcm1lZCkge1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcub3V0cHV0RGlyID0gZGlyUGF0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5lcnJvciA9XG4gICAgICAgICAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgPyBgRmFpbGVkIHRvIHByZXBhcmUgb3V0cHV0IGRpcmVjdG9yeTogJHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBlcnNpc3RUYWJsZVNhbXBsZXNUb0RpciA9IGFzeW5jIChcbiAgICBvdXRwdXREaXI6IHN0cmluZyxcbiAgICBldmVudDogVFRhYmxlU2FtcGxlRXZlbnQsXG4gICAgaW5kZXhBY2N1bXVsYXRvcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7aGFzaFRhYmxlTmFtZShldmVudC50YWJsZU5hbWUpfS5qc29uYDtcblxuICAgIGF3YWl0IGF0b21pY1dyaXRlRmlsZShcbiAgICAgICAgam9pbihvdXRwdXREaXIsIGZpbGVOYW1lKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXZlbnQuc2FtcGxlcywgbnVsbCwgMiksXG4gICAgKTtcblxuICAgIGluZGV4QWNjdW11bGF0b3JbZXZlbnQudGFibGVOYW1lXSA9IGZpbGVOYW1lO1xuXG4gICAgYXdhaXQgYXRvbWljV3JpdGVGaWxlKFxuICAgICAgICBqb2luKG91dHB1dERpciwgJ2luZGV4Lmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoaW5kZXhBY2N1bXVsYXRvciwgbnVsbCwgMiksXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBydW5TYW1wbGluZyA9IGFzeW5jIGZ1bmN0aW9uKiAoXG4gICAgcG9vbDogUG9vbCxcbiAgICBpbnRyb3NwZWN0aW9uOiBURGF0YWJhc2VJbnRyb3NwZWN0aW9uLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgbWFzazogVFNlbnNpdGl2ZU1hc2ssXG4gICAgdGFibGVGaWx0ZXI/OiBSZWFkb25seVNldDxzdHJpbmc+LFxuKTogQXN5bmNHZW5lcmF0b3I8VFRhYmxlU2FtcGxlRXZlbnQ+IHtcbiAgICBjb25zdCBlbnVtTmFtZXM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFxuICAgICAgICBPYmplY3Qua2V5cyhpbnRyb3NwZWN0aW9uLmVudW1zKSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVsYXRpb25FbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoaW50cm9zcGVjdGlvbi5yZWxhdGlvbnMpLmZpbHRlcihcbiAgICAgICAgKFtuYW1lXSkgPT4gKHRhYmxlRmlsdGVyID8gdGFibGVGaWx0ZXIuaGFzKG5hbWUpIDogdHJ1ZSksXG4gICAgKTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuc3RhdGUgPSAnZmV0Y2hpbmcnO1xuICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5jb3VudHMudG90YWxUYWJsZXMgPSByZWxhdGlvbkVudHJpZXMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcXVldWUgPSBuZXcgUFF1ZXVlKHtjb25jdXJyZW5jeTogU0FNUExJTkdfQ09OQ1VSUkVOQ1l9KTtcblxuICAgIGZvciAoY29uc3QgW3RhYmxlTmFtZSwgcmVsYXRpb25dIG9mIHJlbGF0aW9uRW50cmllcykge1xuICAgICAgICBjb25zdCBtYXNrZWRDb2x1bW5zOiByZWFkb25seSBzdHJpbmdbXSA9IG1hc2tbdGFibGVOYW1lXSA/PyBbXTtcbiAgICAgICAgY29uc3QgbWFza2VkU2V0ID0gbmV3IFNldChtYXNrZWRDb2x1bW5zKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC52YWx1ZXMocmVsYXRpb24uYXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uS2luZCA9IHJlbGF0aW9uLmtpbmQgYXMgVFJlbGF0aW9uS2luZDtcblxuICAgICAgICBjb25zdCBlc3RpbWF0ZWRSb3dDb3VudCA9IHJlbGF0aW9uLmVzdGltYXRlZF9yb3dfY291bnQgPz8gMDtcblxuICAgICAgICB0eXBlIFRXb3JrSXRlbSA9IHtcbiAgICAgICAgICAgIHJlYWRvbmx5IGNvbHVtbk5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIHJlYWRvbmx5IGRhdGFUeXBlOiBzdHJpbmc7XG4gICAgICAgICAgICByZWFkb25seSBlc3RpbWF0ZWREaXN0aW5jdDogbnVtYmVyO1xuICAgICAgICAgICAgcmVhZG9ubHkgY29tcG9zaXRlOiB7XG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIHN1YkZpZWxkTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgfSB8IG51bGw7XG4gICAgICAgICAgICByZWFkb25seSBlbnVtVmFsdWVzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgd29ya0l0ZW1zOiBUV29ya0l0ZW1bXSA9IFtdO1xuICAgICAgICBsZXQgc2tpcHBlZCA9IDA7XG5cbiAgICAgICAgZm9yIChjb25zdCBhdHRyIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmIChtYXNrZWRTZXQuaGFzKGF0dHIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkICs9IDE7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gYXR0ci5kYXRhX3R5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc1NhbXBsZWFibGVUeXBlKGRhdGFUeXBlLCBlbnVtTmFtZXMpKSB7XG4gICAgICAgICAgICAgICAgd29ya0l0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBhdHRyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWREaXN0aW5jdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICdlc3RpbWF0ZWRfZGlzdGluY3QnIGluIGF0dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChhdHRyLmVzdGltYXRlZF9kaXN0aW5jdCBhcyBudW1iZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVudW1WYWx1ZXM6IHJlc29sdmVFbnVtVmFsdWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRyb3NwZWN0aW9uLmVudW1zLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAhaXNBcnJheVR5cGUoZGF0YVR5cGUpICYmXG4gICAgICAgICAgICAgICAgIWlzU2FtcGxlYWJsZVNjYWxhcihkYXRhVHlwZSkgJiZcbiAgICAgICAgICAgICAgICAhZW51bU5hbWVzLmhhcyhkYXRhVHlwZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIFBvdGVudGlhbCBjb21wb3NpdGUgdHlwZSDigJQgaW50cm9zcGVjdCBzdWItZmllbGRzXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViRmllbGRzID0gYXdhaXQgZmV0Y2hDb21wb3NpdGVTdWJGaWVsZHMocG9vbCwgZGF0YVR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1YkZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2Ygb2Ygc3ViRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFza2VkU2V0LmhhcyhzZi5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBwZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtcGxlYWJsZVR5cGUoc2YuZGF0YV90eXBlLCBlbnVtTmFtZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya0l0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHthdHRyLm5hbWV9LiR7c2YubmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogc2YuZGF0YV90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWREaXN0aW5jdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBhdHRyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJGaWVsZE5hbWU6IHNmLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1WYWx1ZXM6IHJlc29sdmVFbnVtVmFsdWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2YuZGF0YV90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9zcGVjdGlvbi5lbnVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuY291bnRzLnRvdGFsQ29sdW1ucyArPSB3b3JrSXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuY291bnRzLnNraXBwZWRDb2x1bW5zICs9IHNraXBwZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtblJlc3VsdHM6IFRDb2x1bW5TYW1wbGVbXSA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHdvcmtJdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5lbnVtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLmNvdW50cy5zYW1wbGVkQ29sdW1ucyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IGl0ZW0uY29tcG9zaXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGAke2l0ZW0uY29tcG9zaXRlLmNvbHVtbk5hbWV9LiR7aXRlbS5jb21wb3NpdGUuc3ViRmllbGROYW1lfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbS5jb2x1bW5OYW1lO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlPFRDb2x1bW5TYW1wbGU+KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9uYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6ICdkaXN0aW5jdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IGl0ZW0uZW51bVZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLmFkZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGl0ZW0uY29tcG9zaXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGF3YWl0IHNhbXBsZUNvbXBvc2l0ZVN1YkZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tcG9zaXRlLmNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbXBvc2l0ZS5zdWJGaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmVzdGltYXRlZERpc3RpbmN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkUm93Q291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvbktpbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYXdhaXQgc2FtcGxlQ29sdW1uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZXN0aW1hdGVkRGlzdGluY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRSb3dDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uS2luZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5jb3VudHMuc2FtcGxlZENvbHVtbnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApKSBhcyBUQ29sdW1uU2FtcGxlW107XG5cbiAgICAgICAgY29uc3QgY29sdW1uczogUmVjb3JkPHN0cmluZywgVFRhYmxlU2FtcGxlQ29sdW1uPiA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgIGNvbHVtblJlc3VsdHMubWFwKChzYW1wbGUpID0+IFtcbiAgICAgICAgICAgICAgICBzYW1wbGUuY29sdW1uX25hbWUsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogc2FtcGxlLnN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICBjb3VudDogc2FtcGxlLnZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogc2FtcGxlLnZhbHVlcy5tYXAoKHYpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya0l0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3KSA9PiB3LmNvbHVtbk5hbWUgPT09IHNhbXBsZS5jb2x1bW5fbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApPy5kYXRhVHlwZSA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRhYmxlU2FtcGxlczogVFRhYmxlU2FtcGxlcyA9IHtcbiAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICBzYW1wbGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgZXhjbHVkZWRfY29sdW1uczogbWFza2VkQ29sdW1ucyxcbiAgICAgICAgfTtcblxuICAgICAgICB5aWVsZCB7dGFibGVOYW1lLCBzYW1wbGVzOiB0YWJsZVNhbXBsZXN9O1xuXG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLmNvdW50cy5jb21wbGV0ZWRUYWJsZXMgKz0gMTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdkb25lJztcbiAgICB9KTtcbn07XG4iXX0=
|
package/dist/app/session.d.mts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Pool } from 'pg';
|
|
2
|
-
import type { TStore } from '../store.mjs';
|
|
3
|
-
import type { TDatabaseIntrospection } from '@dbctx/core';
|
|
4
|
-
export declare const checkGate: (token: string, store: TStore) => Promise<boolean>;
|
|
5
|
-
export declare const checkBilling: (token: string, sessionUrl: string, store: TStore) => Promise<void>;
|
|
6
|
-
export declare const connectAccount: (token: string, store: TStore) => Promise<void>;
|
|
7
|
-
export declare const createSession: (pool: Pool, result: TDatabaseIntrospection, store: TStore, token: string | null, device_id: string) => Promise<string>;
|
|
8
|
-
export declare const waitForAuthorization: (sessionId: string, store: TStore) => Promise<void>;
|
|
9
|
-
//# sourceMappingURL=session.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.mts","sourceRoot":"./src/","sources":["app/session.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAG7B,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAqJxD,eAAO,MAAM,SAAS,GAClB,OAAO,MAAM,EACb,OAAO,MAAM,KACd,OAAO,CAAC,OAAO,CAkBjB,CAAC;AAEF,eAAO,MAAM,YAAY,GACrB,OAAO,MAAM,EACb,YAAY,MAAM,EAClB,OAAO,MAAM,KACd,OAAO,CAAC,IAAI,CA+Cd,CAAC;AAEF,eAAO,MAAM,cAAc,GACvB,OAAO,MAAM,EACb,OAAO,MAAM,KACd,OAAO,CAAC,IAAI,CAed,CAAC;AAEF,eAAO,MAAM,aAAa,GACtB,MAAM,IAAI,EACV,QAAQ,sBAAsB,EAC9B,OAAO,MAAM,EACb,OAAO,MAAM,GAAG,IAAI,EACpB,WAAW,MAAM,KAClB,OAAO,CAAC,MAAM,CA0BhB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC7B,WAAW,MAAM,EACjB,OAAO,MAAM,KACd,OAAO,CAAC,IAAI,CAYd,CAAC"}
|
package/dist/app/session.mjs
DELETED
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { runInAction } from 'mobx';
|
|
2
|
-
import { fetchRelationFileStats } from '../db/index.mjs';
|
|
3
|
-
import { trpc, createAuthenticatedTRPCClient } from '../lib/trpc.mjs';
|
|
4
|
-
import { detectAIAssistants, detectDocker, detectOS, detectShell, detectHostname, detectUsername, detectWSL, detectSystemMemory, detectPackageManager, detectProvider, isLocalhost, } from './detect.mjs';
|
|
5
|
-
import { buildSessionURL, openSessionURL } from './open-url.mjs';
|
|
6
|
-
import { writeConfig } from './config.mjs';
|
|
7
|
-
import { CLIENT_VERSION } from '../lib/version.mjs';
|
|
8
|
-
const checkIsReplica = async (pool) => {
|
|
9
|
-
const result = await pool.query('SELECT pg_is_in_recovery() AS is_replica');
|
|
10
|
-
return result.rows[0].is_replica;
|
|
11
|
-
};
|
|
12
|
-
const collectMedianFileAge = async (pool, tableNames, store) => {
|
|
13
|
-
if (tableNames.length === 0) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
try {
|
|
17
|
-
const first = await fetchRelationFileStats(pool, tableNames[0]);
|
|
18
|
-
if (!first?.modification_time) {
|
|
19
|
-
runInAction(() => {
|
|
20
|
-
store.steps.introspection.fileStatsSkipped = true;
|
|
21
|
-
});
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
const times = [first.modification_time];
|
|
25
|
-
const remaining = await Promise.all(tableNames.slice(1).map(async (name) => {
|
|
26
|
-
try {
|
|
27
|
-
const stats = await fetchRelationFileStats(pool, name);
|
|
28
|
-
return stats?.modification_time ?? null;
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
}));
|
|
34
|
-
remaining.forEach((t) => {
|
|
35
|
-
if (t) {
|
|
36
|
-
times.push(t);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
const sorted = [...times].sort((a, b) => a.getTime() - b.getTime());
|
|
40
|
-
const mid = Math.floor(sorted.length / 2);
|
|
41
|
-
const median = sorted.length % 2 === 0
|
|
42
|
-
? new Date((sorted[mid - 1].getTime() + sorted[mid].getTime()) / 2)
|
|
43
|
-
: sorted[mid];
|
|
44
|
-
return median.toISOString();
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
runInAction(() => {
|
|
48
|
-
store.steps.introspection.fileStatsSkipped = true;
|
|
49
|
-
});
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
const buildSessionInput = (result, store, isReplica, medianFileAge) => {
|
|
54
|
-
const relations = Object.values(result.relations);
|
|
55
|
-
return {
|
|
56
|
-
database_name: result.name,
|
|
57
|
-
database_object_statistics: {
|
|
58
|
-
parent_tables: relations.filter((r) => r.kind === 'partitioned_table').length,
|
|
59
|
-
tables: relations.filter((r) => r.kind === 'table').length,
|
|
60
|
-
views: relations.filter((r) => r.kind === 'view').length,
|
|
61
|
-
materialized_views: relations.filter((r) => r.kind === 'materialized_view').length,
|
|
62
|
-
enums: store.steps.introspection.counts.enums,
|
|
63
|
-
indexes: store.steps.introspection.counts.indexes,
|
|
64
|
-
foreign_key_references: store.steps.introspection.counts.foreignKeys,
|
|
65
|
-
},
|
|
66
|
-
is_database_replica: isReplica,
|
|
67
|
-
median_table_file_age: medianFileAge,
|
|
68
|
-
database_type: result.type,
|
|
69
|
-
database_version: result.version.version_number.toString(),
|
|
70
|
-
database_version_string: result.version.version_string,
|
|
71
|
-
database_provider: detectProvider(store.steps.databaseConnection.pickedHostname),
|
|
72
|
-
is_local: isLocalhost(store.steps.databaseConnection.pickedHostname),
|
|
73
|
-
is_docker: detectDocker(),
|
|
74
|
-
is_accessed_over_ssh: store.steps.sshConnection.enabled,
|
|
75
|
-
shell: detectShell(),
|
|
76
|
-
os: detectOS(),
|
|
77
|
-
is_wsl: detectWSL(),
|
|
78
|
-
system_memory: detectSystemMemory(),
|
|
79
|
-
package_manager: detectPackageManager(),
|
|
80
|
-
username: detectUsername(),
|
|
81
|
-
hostname: detectHostname(),
|
|
82
|
-
ai_assistants: detectAIAssistants(),
|
|
83
|
-
};
|
|
84
|
-
};
|
|
85
|
-
const waitForToken = (sessionId) => new Promise((resolve, reject) => {
|
|
86
|
-
const sub = trpc.session.onAuthorization.subscribe({ session_id: sessionId }, {
|
|
87
|
-
onData: (data) => {
|
|
88
|
-
sub.unsubscribe();
|
|
89
|
-
resolve(data.token);
|
|
90
|
-
},
|
|
91
|
-
onError: (err) => {
|
|
92
|
-
sub.unsubscribe();
|
|
93
|
-
reject(err);
|
|
94
|
-
},
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
export const checkGate = async (token, store) => {
|
|
98
|
-
runInAction(() => {
|
|
99
|
-
store.steps.gate.state = 'checking';
|
|
100
|
-
});
|
|
101
|
-
const authClient = createAuthenticatedTRPCClient(() => Promise.resolve(token));
|
|
102
|
-
const result = await authClient.session.shouldContinue.query({
|
|
103
|
-
client_version: CLIENT_VERSION,
|
|
104
|
-
});
|
|
105
|
-
runInAction(() => {
|
|
106
|
-
store.steps.gate.state = result.continue ? 'passed' : 'blocked';
|
|
107
|
-
store.steps.gate.message = result.message;
|
|
108
|
-
});
|
|
109
|
-
return result.continue;
|
|
110
|
-
};
|
|
111
|
-
export const checkBilling = async (token, sessionUrl, store) => {
|
|
112
|
-
runInAction(() => {
|
|
113
|
-
store.steps.billing.state = 'checking';
|
|
114
|
-
});
|
|
115
|
-
const authClient = createAuthenticatedTRPCClient(() => Promise.resolve(token));
|
|
116
|
-
const initial = await authClient.billing.hasBillingForClient.query({});
|
|
117
|
-
// Trial-eligible users (no invoices yet) skip the card-on-file step. The
|
|
118
|
-
// first revision will mint an invoice with a 7-day grace, billed via
|
|
119
|
-
// Stripe's hosted-invoice email rather than an immediate charge.
|
|
120
|
-
if (initial.hasBilling || initial.isTrialEligible) {
|
|
121
|
-
runInAction(() => {
|
|
122
|
-
store.steps.billing.state = 'connected';
|
|
123
|
-
});
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
runInAction(() => {
|
|
127
|
-
store.steps.billing.state = 'waiting';
|
|
128
|
-
store.steps.billing.url = sessionUrl;
|
|
129
|
-
});
|
|
130
|
-
await openSessionURL(sessionUrl);
|
|
131
|
-
await new Promise((resolve, reject) => {
|
|
132
|
-
const tick = async () => {
|
|
133
|
-
try {
|
|
134
|
-
const result = await authClient.billing.hasBillingForClient.query({});
|
|
135
|
-
if (result.hasBilling || result.isTrialEligible) {
|
|
136
|
-
runInAction(() => {
|
|
137
|
-
store.steps.billing.state = 'connected';
|
|
138
|
-
});
|
|
139
|
-
resolve();
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
setTimeout(tick, 2000);
|
|
143
|
-
}
|
|
144
|
-
catch (err) {
|
|
145
|
-
reject(err);
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
setTimeout(tick, 2000);
|
|
149
|
-
});
|
|
150
|
-
};
|
|
151
|
-
export const connectAccount = async (token, store) => {
|
|
152
|
-
runInAction(() => {
|
|
153
|
-
store.steps.account.state = 'fetching-account';
|
|
154
|
-
});
|
|
155
|
-
const authClient = createAuthenticatedTRPCClient(() => Promise.resolve(token));
|
|
156
|
-
const account = await authClient.account.getAccount.query({});
|
|
157
|
-
runInAction(() => {
|
|
158
|
-
store.steps.account.state = 'connected';
|
|
159
|
-
store.steps.account.email = account.emails[0] ?? null;
|
|
160
|
-
store.steps.account.name = account.name;
|
|
161
|
-
});
|
|
162
|
-
};
|
|
163
|
-
export const createSession = async (pool, result, store, token, device_id) => {
|
|
164
|
-
runInAction(() => {
|
|
165
|
-
store.steps.account.state = 'creating-session';
|
|
166
|
-
});
|
|
167
|
-
const tableNames = Object.values(result.relations)
|
|
168
|
-
.filter((r) => r.kind === 'table' || r.kind === 'partitioned_table')
|
|
169
|
-
.map((r) => r.name);
|
|
170
|
-
const [isReplica, medianFileAge] = await Promise.all([
|
|
171
|
-
checkIsReplica(pool),
|
|
172
|
-
collectMedianFileAge(pool, tableNames, store),
|
|
173
|
-
]);
|
|
174
|
-
const input = {
|
|
175
|
-
...buildSessionInput(result, store, isReplica, medianFileAge),
|
|
176
|
-
device_id,
|
|
177
|
-
};
|
|
178
|
-
const client = token
|
|
179
|
-
? createAuthenticatedTRPCClient(() => Promise.resolve(token))
|
|
180
|
-
: trpc;
|
|
181
|
-
const session = await client.session.create.mutate(input);
|
|
182
|
-
return session.id;
|
|
183
|
-
};
|
|
184
|
-
export const waitForAuthorization = async (sessionId, store) => {
|
|
185
|
-
const url = buildSessionURL(sessionId);
|
|
186
|
-
runInAction(() => {
|
|
187
|
-
store.steps.account.state = 'waiting';
|
|
188
|
-
store.steps.account.url = url;
|
|
189
|
-
store.steps.account.sessionId = sessionId;
|
|
190
|
-
});
|
|
191
|
-
const token = await waitForToken(sessionId);
|
|
192
|
-
await writeConfig(token);
|
|
193
|
-
await connectAccount(token, store);
|
|
194
|
-
};
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJhcHAvc2Vzc2lvbi5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUlqQyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsSUFBSSxFQUFFLDZCQUE2QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUNILGtCQUFrQixFQUNsQixZQUFZLEVBQ1osUUFBUSxFQUNSLFdBQVcsRUFDWCxjQUFjLEVBQ2QsY0FBYyxFQUNkLFNBQVMsRUFDVCxrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxXQUFXLEdBQ2QsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFDLGVBQWUsRUFBRSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxNQUFNLGNBQWMsR0FBRyxLQUFLLEVBQUUsSUFBVSxFQUFvQixFQUFFO0lBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDM0IsMENBQTBDLENBQzdDLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUM5QixJQUFVLEVBQ1YsVUFBNkIsRUFDN0IsS0FBYSxFQUNTLEVBQUU7SUFDeEIsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDRCxNQUFNLEtBQUssR0FB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QUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsTUFBTSxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcblxuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtURGF0YWJhc2VJbnRyb3NwZWN0aW9ufSBmcm9tICdAZGJjdHgvY29yZSc7XG5pbXBvcnQge2ZldGNoUmVsYXRpb25GaWxlU3RhdHN9IGZyb20gJy4uL2RiL2luZGV4Lm1qcyc7XG5pbXBvcnQge3RycGMsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50fSBmcm9tICcuLi9saWIvdHJwYy5tanMnO1xuaW1wb3J0IHtcbiAgICBkZXRlY3RBSUFzc2lzdGFudHMsXG4gICAgZGV0ZWN0RG9ja2VyLFxuICAgIGRldGVjdE9TLFxuICAgIGRldGVjdFNoZWxsLFxuICAgIGRldGVjdEhvc3RuYW1lLFxuICAgIGRldGVjdFVzZXJuYW1lLFxuICAgIGRldGVjdFdTTCxcbiAgICBkZXRlY3RTeXN0ZW1NZW1vcnksXG4gICAgZGV0ZWN0UGFja2FnZU1hbmFnZXIsXG4gICAgZGV0ZWN0UHJvdmlkZXIsXG4gICAgaXNMb2NhbGhvc3QsXG59IGZyb20gJy4vZGV0ZWN0Lm1qcyc7XG5pbXBvcnQge2J1aWxkU2Vzc2lvblVSTCwgb3BlblNlc3Npb25VUkx9IGZyb20gJy4vb3Blbi11cmwubWpzJztcbmltcG9ydCB7d3JpdGVDb25maWd9IGZyb20gJy4vY29uZmlnLm1qcyc7XG5pbXBvcnQge0NMSUVOVF9WRVJTSU9OfSBmcm9tICcuLi9saWIvdmVyc2lvbi5tanMnO1xuXG5jb25zdCBjaGVja0lzUmVwbGljYSA9IGFzeW5jIChwb29sOiBQb29sKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTx7aXNfcmVwbGljYTogYm9vbGVhbn0+KFxuICAgICAgICAnU0VMRUNUIHBnX2lzX2luX3JlY292ZXJ5KCkgQVMgaXNfcmVwbGljYScsXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1swXS5pc19yZXBsaWNhO1xufTtcblxuY29uc3QgY29sbGVjdE1lZGlhbkZpbGVBZ2UgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICB0YWJsZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiA9PiB7XG4gICAgaWYgKHRhYmxlTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gYXdhaXQgZmV0Y2hSZWxhdGlvbkZpbGVTdGF0cyhwb29sLCB0YWJsZU5hbWVzWzBdKTtcblxuICAgICAgICBpZiAoIWZpcnN0Py5tb2RpZmljYXRpb25fdGltZSkge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uZmlsZVN0YXRzU2tpcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lczogRGF0ZVtdID0gW2ZpcnN0Lm1vZGlmaWNhdGlvbl90aW1lXTtcblxuICAgICAgICBjb25zdCByZW1haW5pbmcgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHRhYmxlTmFtZXMuc2xpY2UoMSkubWFwKGFzeW5jIChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmZXRjaFJlbGF0aW9uRmlsZVN0YXRzKHBvb2wsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHM/Lm1vZGlmaWNhdGlvbl90aW1lID8/IG51bGw7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHJlbWFpbmluZy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgIHRpbWVzLnB1c2godCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi50aW1lc10uc29ydCgoYSwgYikgPT4gYS5nZXRUaW1lKCkgLSBiLmdldFRpbWUoKSk7XG4gICAgICAgIGNvbnN0IG1pZCA9IE1hdGguZmxvb3Ioc29ydGVkLmxlbmd0aCAvIDIpO1xuICAgICAgICBjb25zdCBtZWRpYW4gPVxuICAgICAgICAgICAgc29ydGVkLmxlbmd0aCAlIDIgPT09IDBcbiAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgIChzb3J0ZWRbbWlkIC0gMV0uZ2V0VGltZSgpICsgc29ydGVkW21pZF0uZ2V0VGltZSgpKSAvIDIsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBzb3J0ZWRbbWlkXTtcblxuICAgICAgICByZXR1cm4gbWVkaWFuLnRvSVNPU3RyaW5nKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uZmlsZVN0YXRzU2tpcHBlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbmNvbnN0IGJ1aWxkU2Vzc2lvbklucHV0ID0gKFxuICAgIHJlc3VsdDogVERhdGFiYXNlSW50cm9zcGVjdGlvbixcbiAgICBzdG9yZTogVFN0b3JlLFxuICAgIGlzUmVwbGljYTogYm9vbGVhbixcbiAgICBtZWRpYW5GaWxlQWdlOiBzdHJpbmcgfCBudWxsLFxuKSA9PiB7XG4gICAgY29uc3QgcmVsYXRpb25zID0gT2JqZWN0LnZhbHVlcyhyZXN1bHQucmVsYXRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGRhdGFiYXNlX25hbWU6IHJlc3VsdC5uYW1lLFxuICAgICAgICBkYXRhYmFzZV9vYmplY3Rfc3RhdGlzdGljczoge1xuICAgICAgICAgICAgcGFyZW50X3RhYmxlczogcmVsYXRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAocikgPT4gci5raW5kID09PSAncGFydGl0aW9uZWRfdGFibGUnLFxuICAgICAgICAgICAgKS5sZW5ndGgsXG4gICAgICAgICAgICB0YWJsZXM6IHJlbGF0aW9ucy5maWx0ZXIoKHIpID0+IHIua2luZCA9PT0gJ3RhYmxlJykubGVuZ3RoLFxuICAgICAgICAgICAgdmlld3M6IHJlbGF0aW9ucy5maWx0ZXIoKHIpID0+IHIua2luZCA9PT0gJ3ZpZXcnKS5sZW5ndGgsXG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRfdmlld3M6IHJlbGF0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHIpID0+IHIua2luZCA9PT0gJ21hdGVyaWFsaXplZF92aWV3JyxcbiAgICAgICAgICAgICkubGVuZ3RoLFxuICAgICAgICAgICAgZW51bXM6IHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uY291bnRzLmVudW1zLFxuICAgICAgICAgICAgaW5kZXhlczogc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5jb3VudHMuaW5kZXhlcyxcbiAgICAgICAgICAgIGZvcmVpZ25fa2V5X3JlZmVyZW5jZXM6XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5jb3VudHMuZm9yZWlnbktleXMsXG4gICAgICAgIH0sXG4gICAgICAgIGlzX2RhdGFiYXNlX3JlcGxpY2E6IGlzUmVwbGljYSxcbiAgICAgICAgbWVkaWFuX3RhYmxlX2ZpbGVfYWdlOiBtZWRpYW5GaWxlQWdlLFxuICAgICAgICBkYXRhYmFzZV90eXBlOiByZXN1bHQudHlwZSxcbiAgICAgICAgZGF0YWJhc2VfdmVyc2lvbjogcmVzdWx0LnZlcnNpb24udmVyc2lvbl9udW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgZGF0YWJhc2VfdmVyc2lvbl9zdHJpbmc6IHJlc3VsdC52ZXJzaW9uLnZlcnNpb25fc3RyaW5nLFxuICAgICAgICBkYXRhYmFzZV9wcm92aWRlcjogZGV0ZWN0UHJvdmlkZXIoXG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGlja2VkSG9zdG5hbWUhLFxuICAgICAgICApLFxuICAgICAgICBpc19sb2NhbDogaXNMb2NhbGhvc3Qoc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBpY2tlZEhvc3RuYW1lISksXG4gICAgICAgIGlzX2RvY2tlcjogZGV0ZWN0RG9ja2VyKCksXG4gICAgICAgIGlzX2FjY2Vzc2VkX292ZXJfc3NoOiBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmVuYWJsZWQsXG4gICAgICAgIHNoZWxsOiBkZXRlY3RTaGVsbCgpLFxuICAgICAgICBvczogZGV0ZWN0T1MoKSxcbiAgICAgICAgaXNfd3NsOiBkZXRlY3RXU0woKSxcbiAgICAgICAgc3lzdGVtX21lbW9yeTogZGV0ZWN0U3lzdGVtTWVtb3J5KCksXG4gICAgICAgIHBhY2thZ2VfbWFuYWdlcjogZGV0ZWN0UGFja2FnZU1hbmFnZXIoKSxcbiAgICAgICAgdXNlcm5hbWU6IGRldGVjdFVzZXJuYW1lKCksXG4gICAgICAgIGhvc3RuYW1lOiBkZXRlY3RIb3N0bmFtZSgpLFxuICAgICAgICBhaV9hc3Npc3RhbnRzOiBkZXRlY3RBSUFzc2lzdGFudHMoKSxcbiAgICB9IGFzIGNvbnN0O1xufTtcblxuY29uc3Qgd2FpdEZvclRva2VuID0gKHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+XG4gICAgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YiA9IHRycGMuc2Vzc2lvbi5vbkF1dGhvcml6YXRpb24uc3Vic2NyaWJlKFxuICAgICAgICAgICAge3Nlc3Npb25faWQ6IHNlc3Npb25JZH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb25EYXRhOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnRva2VuKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uRXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgY2hlY2tHYXRlID0gYXN5bmMgKFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuZ2F0ZS5zdGF0ZSA9ICdjaGVja2luZyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhdXRoQ2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnQoKCkgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRva2VuKSxcbiAgICApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF1dGhDbGllbnQuc2Vzc2lvbi5zaG91bGRDb250aW51ZS5xdWVyeSh7XG4gICAgICAgIGNsaWVudF92ZXJzaW9uOiBDTElFTlRfVkVSU0lPTixcbiAgICB9KTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuZ2F0ZS5zdGF0ZSA9IHJlc3VsdC5jb250aW51ZSA/ICdwYXNzZWQnIDogJ2Jsb2NrZWQnO1xuICAgICAgICBzdG9yZS5zdGVwcy5nYXRlLm1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQuY29udGludWU7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tCaWxsaW5nID0gYXN5bmMgKFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgc2Vzc2lvblVybDogc3RyaW5nLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmJpbGxpbmcuc3RhdGUgPSAnY2hlY2tpbmcnO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYXV0aENsaWVudCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50KCgpID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSh0b2tlbiksXG4gICAgKTtcblxuICAgIGNvbnN0IGluaXRpYWwgPSBhd2FpdCBhdXRoQ2xpZW50LmJpbGxpbmcuaGFzQmlsbGluZ0ZvckNsaWVudC5xdWVyeSh7fSk7XG5cbiAgICAvLyBUcmlhbC1lbGlnaWJsZSB1c2VycyAobm8gaW52b2ljZXMgeWV0KSBza2lwIHRoZSBjYXJkLW9uLWZpbGUgc3RlcC4gVGhlXG4gICAgLy8gZmlyc3QgcmV2aXNpb24gd2lsbCBtaW50IGFuIGludm9pY2Ugd2l0aCBhIDctZGF5IGdyYWNlLCBiaWxsZWQgdmlhXG4gICAgLy8gU3RyaXBlJ3MgaG9zdGVkLWludm9pY2UgZW1haWwgcmF0aGVyIHRoYW4gYW4gaW1tZWRpYXRlIGNoYXJnZS5cbiAgICBpZiAoaW5pdGlhbC5oYXNCaWxsaW5nIHx8IGluaXRpYWwuaXNUcmlhbEVsaWdpYmxlKSB7XG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmJpbGxpbmcuc3RhdGUgPSAnY29ubmVjdGVkJztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmJpbGxpbmcuc3RhdGUgPSAnd2FpdGluZyc7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmJpbGxpbmcudXJsID0gc2Vzc2lvblVybDtcbiAgICB9KTtcblxuICAgIGF3YWl0IG9wZW5TZXNzaW9uVVJMKHNlc3Npb25VcmwpO1xuXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB0aWNrID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhdXRoQ2xpZW50LmJpbGxpbmcuaGFzQmlsbGluZ0ZvckNsaWVudC5xdWVyeSh7fSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNCaWxsaW5nIHx8IHJlc3VsdC5pc1RyaWFsRWxpZ2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuYmlsbGluZy5zdGF0ZSA9ICdjb25uZWN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQodGljaywgMjAwMCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2V0VGltZW91dCh0aWNrLCAyMDAwKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25uZWN0QWNjb3VudCA9IGFzeW5jIChcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmFjY291bnQuc3RhdGUgPSAnZmV0Y2hpbmctYWNjb3VudCc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhdXRoQ2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnQoKCkgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRva2VuKSxcbiAgICApO1xuICAgIGNvbnN0IGFjY291bnQgPSBhd2FpdCBhdXRoQ2xpZW50LmFjY291bnQuZ2V0QWNjb3VudC5xdWVyeSh7fSk7XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmFjY291bnQuc3RhdGUgPSAnY29ubmVjdGVkJztcbiAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5lbWFpbCA9IGFjY291bnQuZW1haWxzWzBdID8/IG51bGw7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmFjY291bnQubmFtZSA9IGFjY291bnQubmFtZTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTZXNzaW9uID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgcmVzdWx0OiBURGF0YWJhc2VJbnRyb3NwZWN0aW9uLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgdG9rZW46IHN0cmluZyB8IG51bGwsXG4gICAgZGV2aWNlX2lkOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5zdGF0ZSA9ICdjcmVhdGluZy1zZXNzaW9uJztcbiAgICB9KTtcblxuICAgIGNvbnN0IHRhYmxlTmFtZXMgPSBPYmplY3QudmFsdWVzKHJlc3VsdC5yZWxhdGlvbnMpXG4gICAgICAgIC5maWx0ZXIoKHIpID0+IHIua2luZCA9PT0gJ3RhYmxlJyB8fCByLmtpbmQgPT09ICdwYXJ0aXRpb25lZF90YWJsZScpXG4gICAgICAgIC5tYXAoKHIpID0+IHIubmFtZSk7XG5cbiAgICBjb25zdCBbaXNSZXBsaWNhLCBtZWRpYW5GaWxlQWdlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgY2hlY2tJc1JlcGxpY2EocG9vbCksXG4gICAgICAgIGNvbGxlY3RNZWRpYW5GaWxlQWdlKHBvb2wsIHRhYmxlTmFtZXMsIHN0b3JlKSxcbiAgICBdKTtcblxuICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgICAuLi5idWlsZFNlc3Npb25JbnB1dChyZXN1bHQsIHN0b3JlLCBpc1JlcGxpY2EsIG1lZGlhbkZpbGVBZ2UpLFxuICAgICAgICBkZXZpY2VfaWQsXG4gICAgfTtcblxuICAgIGNvbnN0IGNsaWVudCA9IHRva2VuXG4gICAgICAgID8gY3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnQoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHRva2VuKSlcbiAgICAgICAgOiB0cnBjO1xuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGNsaWVudC5zZXNzaW9uLmNyZWF0ZS5tdXRhdGUoaW5wdXQpO1xuXG4gICAgcmV0dXJuIHNlc3Npb24uaWQ7XG59O1xuXG5leHBvcnQgY29uc3Qgd2FpdEZvckF1dGhvcml6YXRpb24gPSBhc3luYyAoXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHVybCA9IGJ1aWxkU2Vzc2lvblVSTChzZXNzaW9uSWQpO1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5hY2NvdW50LnN0YXRlID0gJ3dhaXRpbmcnO1xuICAgICAgICBzdG9yZS5zdGVwcy5hY2NvdW50LnVybCA9IHVybDtcbiAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHdhaXRGb3JUb2tlbihzZXNzaW9uSWQpO1xuICAgIGF3YWl0IHdyaXRlQ29uZmlnKHRva2VuKTtcbiAgICBhd2FpdCBjb25uZWN0QWNjb3VudCh0b2tlbiwgc3RvcmUpO1xufTtcbiJdfQ==
|
package/dist/app/ssh.d.mts
DELETED
package/dist/app/ssh.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.d.mts","sourceRoot":"./src/","sources":["app/ssh.mts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AA8DzC,eAAO,MAAM,UAAU,GACnB,OAAO,MAAM,KACd,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CA+MlC,CAAC"}
|