dbctx 1.5.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dist/app/assemble.d.mts.map +1 -1
  2. package/dist/app/assemble.mjs +20 -4
  3. package/dist/app/list.d.mts +4 -0
  4. package/dist/app/list.d.mts.map +1 -0
  5. package/dist/app/list.mjs +93 -0
  6. package/dist/app/load-introspection.d.mts +26 -0
  7. package/dist/app/load-introspection.d.mts.map +1 -0
  8. package/dist/app/load-introspection.mjs +89 -0
  9. package/dist/app/login.d.mts +2 -0
  10. package/dist/app/login.d.mts.map +1 -0
  11. package/dist/app/login.mjs +69 -0
  12. package/dist/app/open-url.d.mts +2 -0
  13. package/dist/app/open-url.d.mts.map +1 -1
  14. package/dist/app/open-url.mjs +8 -3
  15. package/dist/app/sample.d.mts +24 -0
  16. package/dist/app/sample.d.mts.map +1 -0
  17. package/dist/app/sample.mjs +257 -0
  18. package/dist/app/session.d.mts +1 -0
  19. package/dist/app/session.d.mts.map +1 -1
  20. package/dist/app/session.mjs +44 -4
  21. package/dist/app/tail.d.mts +13 -0
  22. package/dist/app/tail.d.mts.map +1 -0
  23. package/dist/app/tail.mjs +168 -0
  24. package/dist/db/check-constraints.d.mts +9 -0
  25. package/dist/db/check-constraints.d.mts.map +1 -0
  26. package/dist/db/check-constraints.mjs +17 -0
  27. package/dist/db/custom-types.d.mts +26 -0
  28. package/dist/db/custom-types.d.mts.map +1 -0
  29. package/dist/db/custom-types.mjs +61 -0
  30. package/dist/db/extensions.d.mts +8 -0
  31. package/dist/db/extensions.d.mts.map +1 -0
  32. package/dist/db/extensions.mjs +14 -0
  33. package/dist/db/functions.d.mts +11 -0
  34. package/dist/db/functions.d.mts.map +1 -0
  35. package/dist/db/functions.mjs +23 -0
  36. package/dist/db/index.d.mts +9 -0
  37. package/dist/db/index.d.mts.map +1 -1
  38. package/dist/db/index.mjs +10 -1
  39. package/dist/db/planner-stats.d.mts +33 -0
  40. package/dist/db/planner-stats.d.mts.map +1 -0
  41. package/dist/db/planner-stats.mjs +103 -0
  42. package/dist/db/rls.d.mts +21 -0
  43. package/dist/db/rls.d.mts.map +1 -0
  44. package/dist/db/rls.mjs +48 -0
  45. package/dist/db/sample.d.mts +16 -0
  46. package/dist/db/sample.d.mts.map +1 -0
  47. package/dist/db/sample.mjs +73 -0
  48. package/dist/db/sequences.d.mts +15 -0
  49. package/dist/db/sequences.d.mts.map +1 -0
  50. package/dist/db/sequences.mjs +31 -0
  51. package/dist/db/triggers.d.mts +11 -0
  52. package/dist/db/triggers.d.mts.map +1 -0
  53. package/dist/db/triggers.mjs +21 -0
  54. package/dist/flow/events.d.mts +115 -0
  55. package/dist/flow/events.d.mts.map +1 -0
  56. package/dist/flow/events.mjs +2 -0
  57. package/dist/flow/interpreter.d.mts +21 -0
  58. package/dist/flow/interpreter.d.mts.map +1 -0
  59. package/dist/flow/interpreter.mjs +605 -0
  60. package/dist/flow/projection.d.mts +17 -0
  61. package/dist/flow/projection.d.mts.map +1 -0
  62. package/dist/flow/projection.mjs +83 -0
  63. package/dist/flow/projection.test.d.mts +2 -0
  64. package/dist/flow/projection.test.d.mts.map +1 -0
  65. package/dist/flow/projection.test.mjs +162 -0
  66. package/dist/flow/reducer.d.mts +5 -0
  67. package/dist/flow/reducer.d.mts.map +1 -0
  68. package/dist/flow/reducer.mjs +306 -0
  69. package/dist/flow/reducer.test.d.mts +2 -0
  70. package/dist/flow/reducer.test.d.mts.map +1 -0
  71. package/dist/flow/reducer.test.mjs +479 -0
  72. package/dist/flow/run.d.mts +3 -0
  73. package/dist/flow/run.d.mts.map +1 -0
  74. package/dist/flow/run.mjs +89 -0
  75. package/dist/flow/states.d.mts +54 -0
  76. package/dist/flow/states.d.mts.map +1 -0
  77. package/dist/flow/states.mjs +39 -0
  78. package/dist/index.d.mts +7 -1
  79. package/dist/index.d.mts.map +1 -1
  80. package/dist/index.mjs +112 -13
  81. package/dist/lib/atomic-write.d.mts +4 -0
  82. package/dist/lib/atomic-write.d.mts.map +1 -0
  83. package/dist/lib/atomic-write.mjs +75 -0
  84. package/dist/lib/stream-job.d.mts +19 -0
  85. package/dist/lib/stream-job.d.mts.map +1 -0
  86. package/dist/lib/stream-job.mjs +55 -0
  87. package/dist/lib/trpc-url.mjs +2 -2
  88. package/dist/lib/trpc.mjs +2 -2
  89. package/dist/logger.d.mts.map +1 -1
  90. package/dist/logger.mjs +6 -3
  91. package/dist/providers/TrpcProvider.js +3 -3
  92. package/dist/store.d.mts +95 -2
  93. package/dist/store.d.mts.map +1 -1
  94. package/dist/store.mjs +64 -1
  95. package/dist/ui/App.d.ts +1 -1
  96. package/dist/ui/App.d.ts.map +1 -1
  97. package/dist/ui/App.js +22 -4
  98. package/dist/ui/components/Analyze.d.ts +10 -0
  99. package/dist/ui/components/Analyze.d.ts.map +1 -0
  100. package/dist/ui/components/Analyze.js +54 -0
  101. package/dist/ui/components/Billing.d.ts +10 -0
  102. package/dist/ui/components/Billing.d.ts.map +1 -0
  103. package/dist/ui/components/Billing.js +40 -0
  104. package/dist/ui/components/DB.d.ts.map +1 -1
  105. package/dist/ui/components/DB.js +2 -2
  106. package/dist/ui/components/DatabasePicker.d.ts +13 -0
  107. package/dist/ui/components/DatabasePicker.d.ts.map +1 -0
  108. package/dist/ui/components/DatabasePicker.js +79 -0
  109. package/dist/ui/components/Enrich.d.ts +10 -0
  110. package/dist/ui/components/Enrich.d.ts.map +1 -0
  111. package/dist/ui/components/Enrich.js +41 -0
  112. package/dist/ui/components/Gate.js +2 -2
  113. package/dist/ui/components/Introspect.d.ts.map +1 -1
  114. package/dist/ui/components/Introspect.js +2 -2
  115. package/dist/ui/components/IntrospectionUpload.d.ts +10 -0
  116. package/dist/ui/components/IntrospectionUpload.d.ts.map +1 -0
  117. package/dist/ui/components/IntrospectionUpload.js +30 -0
  118. package/dist/ui/components/Login.d.ts +19 -0
  119. package/dist/ui/components/Login.d.ts.map +1 -0
  120. package/dist/ui/components/Login.js +38 -0
  121. package/dist/ui/components/OutputJson.d.ts.map +1 -1
  122. package/dist/ui/components/OutputJson.js +2 -2
  123. package/dist/ui/components/SSH.d.ts.map +1 -1
  124. package/dist/ui/components/SSH.js +2 -2
  125. package/dist/ui/components/SamplesUpload.d.ts +10 -0
  126. package/dist/ui/components/SamplesUpload.d.ts.map +1 -0
  127. package/dist/ui/components/SamplesUpload.js +24 -0
  128. package/dist/ui/components/Sampling.d.ts +10 -0
  129. package/dist/ui/components/Sampling.d.ts.map +1 -0
  130. package/dist/ui/components/Sampling.js +58 -0
  131. package/dist/ui/components/Session.d.ts.map +1 -1
  132. package/dist/ui/components/Session.js +4 -4
  133. package/dist/ui/components/Spinner.d.ts.map +1 -1
  134. package/dist/ui/components/Spinner.js +17 -5
  135. package/dist/validatePaths.d.mts +1 -1
  136. package/dist/validatePaths.d.mts.map +1 -1
  137. package/dist/validatePaths.mjs +5 -1
  138. package/package.json +7 -7
  139. package/dist/app/index.d.mts +0 -3
  140. package/dist/app/index.d.mts.map +0 -1
  141. package/dist/app/index.mjs +0 -156
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.d.mts","sourceRoot":"./src/","sources":["app/assemble.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAI7B,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AA4FxD,eAAO,MAAM,gBAAgB,GACzB,MAAM,IAAI,EACV,OAAO,MAAM,KACd,OAAO,CAAC,sBAAsB,CAmIhC,CAAC"}
1
+ {"version":3,"file":"assemble.d.mts","sourceRoot":"./src/","sources":["app/assemble.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAI7B,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAmGxD,eAAO,MAAM,gBAAgB,GACzB,MAAM,IAAI,EACV,OAAO,MAAM,KACd,OAAO,CAAC,sBAAsB,CAuKhC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import PQueue from 'p-queue';
2
2
  import { runInAction } from 'mobx';
3
- import { fetchDatabaseIdentifier, fetchDatabaseComment, fetchPublicRelations, fetchPublicEnums, fetchRelationAttributes, fetchRelationIndexes, fetchRelationForeignKeys, fetchViewDefinition, analyzeRelation, fetchRelationStats, } from '../db/index.mjs';
3
+ import { fetchDatabaseIdentifier, fetchDatabaseComment, fetchPublicRelations, fetchPublicEnums, fetchRelationAttributes, fetchRelationIndexes, fetchRelationForeignKeys, fetchViewDefinition, analyzeRelation, fetchRelationStats, fetchPublicCheckConstraints, fetchInstalledExtensions, fetchPublicSequences, fetchPublicTriggers, fetchPublicFunctions, fetchPublicCustomTypes, fetchPublicRLS, } from '../db/index.mjs';
4
4
  const toRecord = (items, key) => Object.fromEntries(items.map((item) => [key(item), item]));
5
5
  const transformAttribute = (attr) => {
6
6
  const base = {
@@ -73,9 +73,16 @@ export const assembleDatabase = async (pool, store) => {
73
73
  queue.add(() => fetchDatabaseIdentifier(pool)),
74
74
  queue.add(() => fetchDatabaseComment(pool)),
75
75
  ]);
76
- const [grouped, enums] = await Promise.all([
76
+ const [grouped, enums, checkConstraints, extensions, sequences, triggers, functions, customTypes, rls,] = await Promise.all([
77
77
  queue.add(() => fetchPublicRelations(pool)),
78
78
  queue.add(() => fetchPublicEnums(pool)),
79
+ queue.add(() => fetchPublicCheckConstraints(pool)),
80
+ queue.add(() => fetchInstalledExtensions(pool)),
81
+ queue.add(() => fetchPublicSequences(pool)),
82
+ queue.add(() => fetchPublicTriggers(pool)),
83
+ queue.add(() => fetchPublicFunctions(pool)),
84
+ queue.add(() => fetchPublicCustomTypes(pool)),
85
+ queue.add(() => fetchPublicRLS(pool)),
79
86
  ]);
80
87
  const typedGrouped = grouped;
81
88
  const typedEnums = enums;
@@ -95,8 +102,9 @@ export const assembleDatabase = async (pool, store) => {
95
102
  ...(typedGrouped.materialized_view ?? []),
96
103
  ];
97
104
  const isViewKind = (type) => type === 'view' || type === 'materialized_view';
105
+ const skipAnalyze = store.outputOptions.skipAnalyze;
98
106
  const relationEntries = await Promise.all(allRelations.map(async (rel) => {
99
- if (rel.type !== 'view') {
107
+ if (rel.type !== 'view' && !skipAnalyze) {
100
108
  await queue.add(() => analyzeRelation(pool, rel.name));
101
109
  runInAction(() => {
102
110
  counts.analyzed += 1;
@@ -135,6 +143,7 @@ export const assembleDatabase = async (pool, store) => {
135
143
  name: rel.name,
136
144
  comment: rel.comment,
137
145
  kind: rel.type,
146
+ estimated_row_count: relStats.estimated_row_count,
138
147
  attributes: toRecord(transformedAttrs, (a) => a.name),
139
148
  indexes: toRecord(idxs.map(transformIndex), (i) => i.index_name),
140
149
  references: toRecord(fks.map(transformReference), (r) => r.constraint_name),
@@ -161,6 +170,13 @@ export const assembleDatabase = async (pool, store) => {
161
170
  comment: comment ?? null,
162
171
  relations: Object.fromEntries(relationEntries),
163
172
  enums: typedEnums,
173
+ checkConstraints: checkConstraints,
174
+ extensions: extensions,
175
+ sequences: sequences,
176
+ triggers: triggers,
177
+ functions: functions,
178
+ customTypes: customTypes,
179
+ rls: rls,
164
180
  };
165
181
  };
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZW1ibGUubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiYXBwL2Fzc2VtYmxlLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQVFqQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2Ysa0JBQWtCLEdBQ3JCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsTUFBTSxRQUFRLEdBQUcsQ0FDYixLQUFtQixFQUNuQixHQUF3QixFQUNQLEVBQUUsQ0FDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFL0QsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQW9CLEVBQUUsRUFBRTtJQUNoRCxNQUFNLElBQUksR0FBRztRQUNULElBQUksRUFBRSxJQUFJLENBQUMsY0FBYztRQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7UUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1FBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztLQUN4QixDQUFDO0lBRUYsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQzVCLE9BQU87WUFDSCxHQUFHLElBQUk7WUFDUCxJQUFJLEVBQUUsV0FBb0I7WUFDMUIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUEwQztZQUNsRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQXFCO1NBQ25ELENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsV0FBVztRQUNuQixDQUFDLENBQUM7WUFDSSxHQUFHLElBQUk7WUFDUCxJQUFJLEVBQUUsU0FBa0I7WUFDeEIsV0FBVyxFQUFFLElBQWE7WUFDMUIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFtQjtTQUMvQztRQUNILENBQUMsQ0FBQztZQUNJLEdBQUcsSUFBSTtZQUNQLElBQUksRUFBRSxTQUFrQjtZQUN4QixXQUFXLEVBQUUsS0FBYztTQUM5QixDQUFDO0FBQ1osQ0FBQyxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFlLEVBQUUsRUFBRSxDQUN4QyxHQUFHLENBQUMsVUFBVTtJQUNWLENBQUMsQ0FBRSxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQVc7SUFDcEMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTO1FBQ2IsQ0FBQyxDQUFFLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBVztRQUNuQyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVk7WUFDaEIsQ0FBQyxDQUFFO2dCQUNHLFVBQVUsRUFBRSxXQUFXO2dCQUN2QixtQkFBbUIsRUFBRSxHQUFHLENBQUMsbUJBQW9CO2FBQ3RDO1lBQ2IsQ0FBQyxDQUFFLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBVyxDQUFDO0FBRS9DLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtJQUMxQixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7SUFDaEMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO0lBQzFCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtJQUMxQixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87SUFDcEIsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDO0lBQ3ZCLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVTtRQUNkLENBQUMsQ0FBRTtZQUNHLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxpQkFBa0I7U0FDbEM7UUFDYixDQUFDLENBQUUsRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFXLENBQUM7Q0FDeEMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEVBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakQsZUFBZSxFQUFFLEVBQUUsQ0FBQyxlQUFlO0lBQ25DLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVTtJQUN6QixtQkFBbUIsRUFBRSxFQUFFLENBQUMsbUJBQW1CO0lBQzNDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxxQkFBcUI7SUFDL0MsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTO0lBQ3ZCLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUztJQUN2QixPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU87Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxFQUNqQyxJQUFVLEVBQ1YsS0FBYSxFQUNrQixFQUFFO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDM0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBRWhELFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDYixLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDNUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ3ZDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxQyxDQUFDLENBQUM7SUFFSCxNQUFNLFlBQVksR0FBRyxPQUVwQixDQUFDO0lBQ0YsTUFBTSxVQUFVLEdBQUcsS0FBcUQsQ0FBQztJQUV6RSxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxDQUFDLE1BQU07WUFDVCxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztnQkFDakMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxLQUFLO1lBQ1IsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxZQUFZLEdBQUc7UUFDakIsR0FBRyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7UUFDekMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixHQUFHLENBQUMsWUFBWSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztLQUM1QyxDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUNoQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxtQkFBbUIsQ0FBQztJQUVwRCxNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3JDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQzNCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN0QixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN2RCxXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUNiLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLEdBQzNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNkLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuRCxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsQ0FBQyxDQUFDLFNBQVM7U0FDbEIsQ0FBQyxDQUFDO1FBRVAsTUFBTSxLQUFLLEdBQUcsVUFBOEIsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxPQUF1QixDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLFdBQWdDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsS0FBdUIsQ0FBQztRQUV6QyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FDMUIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxjQUFjO1lBQ2hCLENBQUMsQ0FBQyxrQkFBa0I7U0FDdkIsQ0FBQyxDQUNMLENBQUM7UUFFRixXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2IsTUFBTSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM5QixNQUFNLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4QyxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN6RCxPQUFPLFFBQVEsS0FBSyxTQUFTO2dCQUN6QixDQUFDLENBQUMsRUFBQyxHQUFHLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sV0FBVyxHQUFHO1lBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtZQUNkLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDZCxVQUFVLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JELE9BQU8sRUFBRSxRQUFRLENBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFDeEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQ3RCO1lBQ0QsVUFBVSxFQUFFLFFBQVEsQ0FDaEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUMzQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FDM0I7WUFDRCxHQUFHLENBQUMsY0FBYztnQkFDZCxDQUFDLENBQUMsRUFBQyxjQUFjLEVBQUUsY0FBd0IsRUFBQztnQkFDNUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNaLENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLENBQVUsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBRUYsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNiLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0gsSUFBSSxFQUFFLFlBQVk7UUFDbEIsT0FBTyxFQUFFO1lBQ0wsY0FBYyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsZUFBZ0I7WUFDL0QsY0FBYyxFQUNWLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMscUJBQXNCO1NBQzVEO1FBQ0QsVUFBVSxFQUFFO1lBQ1IsaUJBQWlCLEVBQUUsVUFBVyxDQUFDLGlCQUFpQjtZQUNoRCxZQUFZLEVBQUUsVUFBVyxDQUFDLFlBQVk7U0FDekM7UUFDRCxJQUFJLEVBQUUsVUFBVyxDQUFDLGFBQWE7UUFDL0IsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJO1FBQ3hCLFNBQVMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUM5QyxLQUFLLEVBQUUsVUFBVTtLQUNwQixDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcbmltcG9ydCBQUXVldWUgZnJvbSAncC1xdWV1ZSc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcblxuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtURGF0YWJhc2VJbnRyb3NwZWN0aW9ufSBmcm9tICdAZGJjdHgvY29yZSc7XG5pbXBvcnQgdHlwZSB7VEF0dHJpYnV0ZUluZm99IGZyb20gJy4uL2RiL2F0dHJpYnV0ZXMubWpzJztcbmltcG9ydCB0eXBlIHtUSW5kZXhJbmZvfSBmcm9tICcuLi9kYi9pbmRleGVzLm1qcyc7XG5pbXBvcnQgdHlwZSB7VEZvcmVpZ25LZXlJbmZvfSBmcm9tICcuLi9kYi9mb3JlaWduLWtleXMubWpzJztcbmltcG9ydCB0eXBlIHtUUmVsYXRpb25TdGF0c30gZnJvbSAnLi4vZGIvc3RhdHMubWpzJztcbmltcG9ydCB7XG4gICAgZmV0Y2hEYXRhYmFzZUlkZW50aWZpZXIsXG4gICAgZmV0Y2hEYXRhYmFzZUNvbW1lbnQsXG4gICAgZmV0Y2hQdWJsaWNSZWxhdGlvbnMsXG4gICAgZmV0Y2hQdWJsaWNFbnVtcyxcbiAgICBmZXRjaFJlbGF0aW9uQXR0cmlidXRlcyxcbiAgICBmZXRjaFJlbGF0aW9uSW5kZXhlcyxcbiAgICBmZXRjaFJlbGF0aW9uRm9yZWlnbktleXMsXG4gICAgZmV0Y2hWaWV3RGVmaW5pdGlvbixcbiAgICBhbmFseXplUmVsYXRpb24sXG4gICAgZmV0Y2hSZWxhdGlvblN0YXRzLFxufSBmcm9tICcuLi9kYi9pbmRleC5tanMnO1xuXG5jb25zdCB0b1JlY29yZCA9IDxUIGV4dGVuZHMgdW5rbm93bj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBrZXk6IChpdGVtOiBUKSA9PiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCBUPiA9PlxuICAgIE9iamVjdC5mcm9tRW50cmllcyhpdGVtcy5tYXAoKGl0ZW0pID0+IFtrZXkoaXRlbSksIGl0ZW1dKSk7XG5cbmNvbnN0IHRyYW5zZm9ybUF0dHJpYnV0ZSA9IChhdHRyOiBUQXR0cmlidXRlSW5mbykgPT4ge1xuICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICAgIG5hbWU6IGF0dHIuYXR0cmlidXRlX25hbWUsXG4gICAgICAgIGRhdGFfdHlwZTogYXR0ci5kYXRhX3R5cGUsXG4gICAgICAgIGlzX251bGxhYmxlOiBhdHRyLmlzX251bGxhYmxlLFxuICAgICAgICBjb21tZW50OiBhdHRyLmNvbW1lbnQsXG4gICAgfTtcblxuICAgIGlmIChhdHRyLmtpbmQgPT09ICdnZW5lcmF0ZWQnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgICAga2luZDogJ2dlbmVyYXRlZCcgYXMgY29uc3QsXG4gICAgICAgICAgICBnZW5lcmF0ZWRfc3RvcmFnZTogYXR0ci5nZW5lcmF0ZWRfc3RvcmFnZSEgYXMgJ3N0b3JlZCcgfCAndmlydHVhbCcsXG4gICAgICAgICAgICBnZW5lcmF0ZWRfZXhwcmVzc2lvbjogYXR0ci5nZW5lcmF0ZWRfZXhwcmVzc2lvbiEsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHIuaGFzX2RlZmF1bHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgICAgIGtpbmQ6ICdyZWd1bGFyJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgaGFzX2RlZmF1bHQ6IHRydWUgYXMgY29uc3QsXG4gICAgICAgICAgICAgIGRlZmF1bHRfZXhwcmVzc2lvbjogYXR0ci5kZWZhdWx0X2V4cHJlc3Npb24hLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgICAgIGtpbmQ6ICdyZWd1bGFyJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgaGFzX2RlZmF1bHQ6IGZhbHNlIGFzIGNvbnN0LFxuICAgICAgICAgIH07XG59O1xuXG5jb25zdCBkZXJpdmVJbmRleEtpbmQgPSAoaWR4OiBUSW5kZXhJbmZvKSA9PlxuICAgIGlkeC5pc19wcmltYXJ5XG4gICAgICAgID8gKHtpbmRleF9raW5kOiAncHJpbWFyeSd9IGFzIGNvbnN0KVxuICAgICAgICA6IGlkeC5pc191bmlxdWVcbiAgICAgICAgICA/ICh7aW5kZXhfa2luZDogJ3VuaXF1ZSd9IGFzIGNvbnN0KVxuICAgICAgICAgIDogaWR4LmlzX2V4Y2x1c2lvblxuICAgICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICAgICAgaW5kZXhfa2luZDogJ2V4Y2x1c2lvbicsXG4gICAgICAgICAgICAgICAgICBleGNsdXNpb25fb3BlcmF0b3JzOiBpZHguZXhjbHVzaW9uX29wZXJhdG9ycyEsXG4gICAgICAgICAgICAgIH0gYXMgY29uc3QpXG4gICAgICAgICAgICA6ICh7aW5kZXhfa2luZDogJ3BsYWluJ30gYXMgY29uc3QpO1xuXG5jb25zdCB0cmFuc2Zvcm1JbmRleCA9IChpZHg6IFRJbmRleEluZm8pID0+ICh7XG4gICAgaW5kZXhfbmFtZTogaWR4LmluZGV4X25hbWUsXG4gICAgcmVsYXRpb25fbmFtZTogaWR4LnJlbGF0aW9uX25hbWUsXG4gICAgYXR0cmlidXRlczogaWR4LmF0dHJpYnV0ZXMsXG4gICAgZGVmaW5pdGlvbjogaWR4LmRlZmluaXRpb24sXG4gICAgY29tbWVudDogaWR4LmNvbW1lbnQsXG4gICAgLi4uZGVyaXZlSW5kZXhLaW5kKGlkeCksXG4gICAgLi4uKGlkeC5pc19wYXJ0aWFsXG4gICAgICAgID8gKHtcbiAgICAgICAgICAgICAgaXNfcGFydGlhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGFydGlhbF9wcmVkaWNhdGU6IGlkeC5wYXJ0aWFsX3ByZWRpY2F0ZSEsXG4gICAgICAgICAgfSBhcyBjb25zdClcbiAgICAgICAgOiAoe2lzX3BhcnRpYWw6IGZhbHNlfSBhcyBjb25zdCkpLFxufSk7XG5cbmNvbnN0IHRyYW5zZm9ybVJlZmVyZW5jZSA9IChmazogVEZvcmVpZ25LZXlJbmZvKSA9PiAoe1xuICAgIGNvbnN0cmFpbnRfbmFtZTogZmsuY29uc3RyYWludF9uYW1lLFxuICAgIGF0dHJpYnV0ZXM6IGZrLmF0dHJpYnV0ZXMsXG4gICAgcmVmZXJlbmNlZF9yZWxhdGlvbjogZmsucmVmZXJlbmNlZF9yZWxhdGlvbixcbiAgICByZWZlcmVuY2VkX2F0dHJpYnV0ZXM6IGZrLnJlZmVyZW5jZWRfYXR0cmlidXRlcyxcbiAgICBvbl91cGRhdGU6IGZrLm9uX3VwZGF0ZSxcbiAgICBvbl9kZWxldGU6IGZrLm9uX2RlbGV0ZSxcbiAgICBjb21tZW50OiBmay5jb21tZW50LFxufSk7XG5cbmV4cG9ydCBjb25zdCBhc3NlbWJsZURhdGFiYXNlID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8VERhdGFiYXNlSW50cm9zcGVjdGlvbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXVlID0gbmV3IFBRdWV1ZSh7Y29uY3VycmVuY3k6IDN9KTtcbiAgICBjb25zdCBjb3VudHMgPSBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLmNvdW50cztcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdmZXRjaGluZyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBbaWRlbnRpZmllciwgY29tbWVudF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaERhdGFiYXNlSWRlbnRpZmllcihwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaERhdGFiYXNlQ29tbWVudChwb29sKSksXG4gICAgXSk7XG5cbiAgICBjb25zdCBbZ3JvdXBlZCwgZW51bXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNSZWxhdGlvbnMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNFbnVtcyhwb29sKSksXG4gICAgXSk7XG5cbiAgICBjb25zdCB0eXBlZEdyb3VwZWQgPSBncm91cGVkIGFzIEF3YWl0ZWQ8XG4gICAgICAgIFJldHVyblR5cGU8dHlwZW9mIGZldGNoUHVibGljUmVsYXRpb25zPlxuICAgID47XG4gICAgY29uc3QgdHlwZWRFbnVtcyA9IGVudW1zIGFzIEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hQdWJsaWNFbnVtcz4+O1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBjb3VudHMudGFibGVzID1cbiAgICAgICAgICAgICh0eXBlZEdyb3VwZWQudGFibGU/Lmxlbmd0aCA/PyAwKSArXG4gICAgICAgICAgICAodHlwZWRHcm91cGVkLnBhcnRpdGlvbmVkX3RhYmxlPy5sZW5ndGggPz8gMCk7XG4gICAgICAgIGNvdW50cy52aWV3cyA9XG4gICAgICAgICAgICAodHlwZWRHcm91cGVkLnZpZXc/Lmxlbmd0aCA/PyAwKSArXG4gICAgICAgICAgICAodHlwZWRHcm91cGVkLm1hdGVyaWFsaXplZF92aWV3Py5sZW5ndGggPz8gMCk7XG4gICAgICAgIGNvdW50cy5lbnVtcyA9IE9iamVjdC5rZXlzKHR5cGVkRW51bXMpLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFsbFJlbGF0aW9ucyA9IFtcbiAgICAgICAgLi4uKHR5cGVkR3JvdXBlZC5wYXJ0aXRpb25lZF90YWJsZSA/PyBbXSksXG4gICAgICAgIC4uLih0eXBlZEdyb3VwZWQudGFibGUgPz8gW10pLFxuICAgICAgICAuLi4odHlwZWRHcm91cGVkLnZpZXcgPz8gW10pLFxuICAgICAgICAuLi4odHlwZWRHcm91cGVkLm1hdGVyaWFsaXplZF92aWV3ID8/IFtdKSxcbiAgICBdO1xuXG4gICAgY29uc3QgaXNWaWV3S2luZCA9ICh0eXBlOiBzdHJpbmcpID0+XG4gICAgICAgIHR5cGUgPT09ICd2aWV3JyB8fCB0eXBlID09PSAnbWF0ZXJpYWxpemVkX3ZpZXcnO1xuXG4gICAgY29uc3QgcmVsYXRpb25FbnRyaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGFsbFJlbGF0aW9ucy5tYXAoYXN5bmMgKHJlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlbC50eXBlICE9PSAndmlldycpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBxdWV1ZS5hZGQoKCkgPT4gYW5hbHl6ZVJlbGF0aW9uKHBvb2wsIHJlbC5uYW1lKSk7XG4gICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb3VudHMuYW5hbHl6ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgW2F0dHJpYnV0ZXMsIGluZGV4ZXMsIGZvcmVpZ25LZXlzLCBzdGF0cywgdmlld0RlZmluaXRpb25dID1cbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFJlbGF0aW9uQXR0cmlidXRlcyhwb29sLCByZWwubmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hSZWxhdGlvbkluZGV4ZXMocG9vbCwgcmVsLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUmVsYXRpb25Gb3JlaWduS2V5cyhwb29sLCByZWwubmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hSZWxhdGlvblN0YXRzKHBvb2wsIHJlbC5uYW1lKSksXG4gICAgICAgICAgICAgICAgICAgIGlzVmlld0tpbmQocmVsLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFZpZXdEZWZpbml0aW9uKHBvb2wsIHJlbC5uYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCBhdHRycyA9IGF0dHJpYnV0ZXMgYXMgVEF0dHJpYnV0ZUluZm9bXTtcbiAgICAgICAgICAgIGNvbnN0IGlkeHMgPSBpbmRleGVzIGFzIFRJbmRleEluZm9bXTtcbiAgICAgICAgICAgIGNvbnN0IGZrcyA9IGZvcmVpZ25LZXlzIGFzIFRGb3JlaWduS2V5SW5mb1tdO1xuICAgICAgICAgICAgY29uc3QgcmVsU3RhdHMgPSBzdGF0cyBhcyBUUmVsYXRpb25TdGF0cztcblxuICAgICAgICAgICAgY29uc3QgZGlzdGluY3RMb29rdXAgPSBuZXcgTWFwKFxuICAgICAgICAgICAgICAgIHJlbFN0YXRzLmF0dHJpYnV0ZXMubWFwKChhKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIGEuYXR0cmlidXRlX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIGEuZXN0aW1hdGVkX2Rpc3RpbmN0LFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50cy5jb2x1bW5zICs9IGF0dHJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb3VudHMuaW5kZXhlcyArPSBpZHhzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb3VudHMuZm9yZWlnbktleXMgKz0gZmtzLmxlbmd0aDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZEF0dHJzID0gYXR0cnMubWFwKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IHRyYW5zZm9ybUF0dHJpYnV0ZShhdHRyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0aW5jdCA9IGRpc3RpbmN0TG9va3VwLmdldChhdHRyLmF0dHJpYnV0ZV9uYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlzdGluY3QgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHsuLi5iYXNlLCBlc3RpbWF0ZWRfZGlzdGluY3Q6IGRpc3RpbmN0fVxuICAgICAgICAgICAgICAgICAgICA6IGJhc2U7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcmVsYXRpb25PYmogPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogcmVsLm5hbWUsXG4gICAgICAgICAgICAgICAgY29tbWVudDogcmVsLmNvbW1lbnQsXG4gICAgICAgICAgICAgICAga2luZDogcmVsLnR5cGUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdG9SZWNvcmQodHJhbnNmb3JtZWRBdHRycywgKGEpID0+IGEubmFtZSksXG4gICAgICAgICAgICAgICAgaW5kZXhlczogdG9SZWNvcmQoXG4gICAgICAgICAgICAgICAgICAgIGlkeHMubWFwKHRyYW5zZm9ybUluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgKGkpID0+IGkuaW5kZXhfbmFtZSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IHRvUmVjb3JkKFxuICAgICAgICAgICAgICAgICAgICBma3MubWFwKHRyYW5zZm9ybVJlZmVyZW5jZSksXG4gICAgICAgICAgICAgICAgICAgIChyKSA9PiByLmNvbnN0cmFpbnRfbmFtZSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIC4uLih2aWV3RGVmaW5pdGlvblxuICAgICAgICAgICAgICAgICAgICA/IHt2aWV3RGVmaW5pdGlvbjogdmlld0RlZmluaXRpb24gYXMgc3RyaW5nfVxuICAgICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBbcmVsLm5hbWUsIHJlbGF0aW9uT2JqXSBhcyBjb25zdDtcbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdkb25lJztcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdwb3N0Z3Jlc3FsJyxcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgdmVyc2lvbl9zdHJpbmc6IHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wb3N0Z3Jlc1ZlcnNpb24hLFxuICAgICAgICAgICAgdmVyc2lvbl9udW1iZXI6XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBvc3RncmVzVmVyc2lvbk51bWJlciEsXG4gICAgICAgIH0sXG4gICAgICAgIGlkZW50aWZpZXI6IHtcbiAgICAgICAgICAgIHN5c3RlbV9pZGVudGlmaWVyOiBpZGVudGlmaWVyIS5zeXN0ZW1faWRlbnRpZmllcixcbiAgICAgICAgICAgIGRhdGFiYXNlX29pZDogaWRlbnRpZmllciEuZGF0YWJhc2Vfb2lkLFxuICAgICAgICB9LFxuICAgICAgICBuYW1lOiBpZGVudGlmaWVyIS5kYXRhYmFzZV9uYW1lLFxuICAgICAgICBjb21tZW50OiBjb21tZW50ID8/IG51bGwsXG4gICAgICAgIHJlbGF0aW9uczogT2JqZWN0LmZyb21FbnRyaWVzKHJlbGF0aW9uRW50cmllcyksXG4gICAgICAgIGVudW1zOiB0eXBlZEVudW1zLFxuICAgIH07XG59O1xuIl19
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZW1ibGUubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiYXBwL2Fzc2VtYmxlLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQVFqQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLGNBQWMsR0FDakIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLFFBQVEsR0FBRyxDQUNiLEtBQW1CLEVBQ25CLEdBQXdCLEVBQ1AsRUFBRSxDQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUUvRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBb0IsRUFBRSxFQUFFO0lBQ2hELE1BQU0sSUFBSSxHQUFHO1FBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjO1FBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztRQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7UUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO0tBQ3hCLENBQUM7SUFFRixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDNUIsT0FBTztZQUNILEdBQUcsSUFBSTtZQUNQLElBQUksRUFBRSxXQUFv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RCxVQUFVLEVBQUUsVUFFWDtRQUNELFNBQVMsRUFBRSxTQUVWO1FBQ0QsUUFBUSxFQUFFLFFBQTJEO1FBQ3JFLFNBQVMsRUFBRSxTQUVWO1FBQ0QsV0FBVyxFQUNQLFdBQStEO1FBQ25FLEdBQUcsRUFBRSxHQUErQztLQUN2RCxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcbmltcG9ydCBQUXVldWUgZnJvbSAncC1xdWV1ZSc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcblxuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtURGF0YWJhc2VJbnRyb3NwZWN0aW9ufSBmcm9tICdAZGJjdHgvY29yZSc7XG5pbXBvcnQgdHlwZSB7VEF0dHJpYnV0ZUluZm99IGZyb20gJy4uL2RiL2F0dHJpYnV0ZXMubWpzJztcbmltcG9ydCB0eXBlIHtUSW5kZXhJbmZvfSBmcm9tICcuLi9kYi9pbmRleGVzLm1qcyc7XG5pbXBvcnQgdHlwZSB7VEZvcmVpZ25LZXlJbmZvfSBmcm9tICcuLi9kYi9mb3JlaWduLWtleXMubWpzJztcbmltcG9ydCB0eXBlIHtUUmVsYXRpb25TdGF0c30gZnJvbSAnLi4vZGIvc3RhdHMubWpzJztcbmltcG9ydCB7XG4gICAgZmV0Y2hEYXRhYmFzZUlkZW50aWZpZXIsXG4gICAgZmV0Y2hEYXRhYmFzZUNvbW1lbnQsXG4gICAgZmV0Y2hQdWJsaWNSZWxhdGlvbnMsXG4gICAgZmV0Y2hQdWJsaWNFbnVtcyxcbiAgICBmZXRjaFJlbGF0aW9uQXR0cmlidXRlcyxcbiAgICBmZXRjaFJlbGF0aW9uSW5kZXhlcyxcbiAgICBmZXRjaFJlbGF0aW9uRm9yZWlnbktleXMsXG4gICAgZmV0Y2hWaWV3RGVmaW5pdGlvbixcbiAgICBhbmFseXplUmVsYXRpb24sXG4gICAgZmV0Y2hSZWxhdGlvblN0YXRzLFxuICAgIGZldGNoUHVibGljQ2hlY2tDb25zdHJhaW50cyxcbiAgICBmZXRjaEluc3RhbGxlZEV4dGVuc2lvbnMsXG4gICAgZmV0Y2hQdWJsaWNTZXF1ZW5jZXMsXG4gICAgZmV0Y2hQdWJsaWNUcmlnZ2VycyxcbiAgICBmZXRjaFB1YmxpY0Z1bmN0aW9ucyxcbiAgICBmZXRjaFB1YmxpY0N1c3RvbVR5cGVzLFxuICAgIGZldGNoUHVibGljUkxTLFxufSBmcm9tICcuLi9kYi9pbmRleC5tanMnO1xuXG5jb25zdCB0b1JlY29yZCA9IDxUIGV4dGVuZHMgdW5rbm93bj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBrZXk6IChpdGVtOiBUKSA9PiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCBUPiA9PlxuICAgIE9iamVjdC5mcm9tRW50cmllcyhpdGVtcy5tYXAoKGl0ZW0pID0+IFtrZXkoaXRlbSksIGl0ZW1dKSk7XG5cbmNvbnN0IHRyYW5zZm9ybUF0dHJpYnV0ZSA9IChhdHRyOiBUQXR0cmlidXRlSW5mbykgPT4ge1xuICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICAgIG5hbWU6IGF0dHIuYXR0cmlidXRlX25hbWUsXG4gICAgICAgIGRhdGFfdHlwZTogYXR0ci5kYXRhX3R5cGUsXG4gICAgICAgIGlzX251bGxhYmxlOiBhdHRyLmlzX251bGxhYmxlLFxuICAgICAgICBjb21tZW50OiBhdHRyLmNvbW1lbnQsXG4gICAgfTtcblxuICAgIGlmIChhdHRyLmtpbmQgPT09ICdnZW5lcmF0ZWQnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgICAga2luZDogJ2dlbmVyYXRlZCcgYXMgY29uc3QsXG4gICAgICAgICAgICBnZW5lcmF0ZWRfc3RvcmFnZTogYXR0ci5nZW5lcmF0ZWRfc3RvcmFnZSEgYXMgJ3N0b3JlZCcgfCAndmlydHVhbCcsXG4gICAgICAgICAgICBnZW5lcmF0ZWRfZXhwcmVzc2lvbjogYXR0ci5nZW5lcmF0ZWRfZXhwcmVzc2lvbiEsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHIuaGFzX2RlZmF1bHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgICAgIGtpbmQ6ICdyZWd1bGFyJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgaGFzX2RlZmF1bHQ6IHRydWUgYXMgY29uc3QsXG4gICAgICAgICAgICAgIGRlZmF1bHRfZXhwcmVzc2lvbjogYXR0ci5kZWZhdWx0X2V4cHJlc3Npb24hLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgICAgIGtpbmQ6ICdyZWd1bGFyJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgaGFzX2RlZmF1bHQ6IGZhbHNlIGFzIGNvbnN0LFxuICAgICAgICAgIH07XG59O1xuXG5jb25zdCBkZXJpdmVJbmRleEtpbmQgPSAoaWR4OiBUSW5kZXhJbmZvKSA9PlxuICAgIGlkeC5pc19wcmltYXJ5XG4gICAgICAgID8gKHtpbmRleF9raW5kOiAncHJpbWFyeSd9IGFzIGNvbnN0KVxuICAgICAgICA6IGlkeC5pc191bmlxdWVcbiAgICAgICAgICA/ICh7aW5kZXhfa2luZDogJ3VuaXF1ZSd9IGFzIGNvbnN0KVxuICAgICAgICAgIDogaWR4LmlzX2V4Y2x1c2lvblxuICAgICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICAgICAgaW5kZXhfa2luZDogJ2V4Y2x1c2lvbicsXG4gICAgICAgICAgICAgICAgICBleGNsdXNpb25fb3BlcmF0b3JzOiBpZHguZXhjbHVzaW9uX29wZXJhdG9ycyEsXG4gICAgICAgICAgICAgIH0gYXMgY29uc3QpXG4gICAgICAgICAgICA6ICh7aW5kZXhfa2luZDogJ3BsYWluJ30gYXMgY29uc3QpO1xuXG5jb25zdCB0cmFuc2Zvcm1JbmRleCA9IChpZHg6IFRJbmRleEluZm8pID0+ICh7XG4gICAgaW5kZXhfbmFtZTogaWR4LmluZGV4X25hbWUsXG4gICAgcmVsYXRpb25fbmFtZTogaWR4LnJlbGF0aW9uX25hbWUsXG4gICAgYXR0cmlidXRlczogaWR4LmF0dHJpYnV0ZXMsXG4gICAgZGVmaW5pdGlvbjogaWR4LmRlZmluaXRpb24sXG4gICAgY29tbWVudDogaWR4LmNvbW1lbnQsXG4gICAgLi4uZGVyaXZlSW5kZXhLaW5kKGlkeCksXG4gICAgLi4uKGlkeC5pc19wYXJ0aWFsXG4gICAgICAgID8gKHtcbiAgICAgICAgICAgICAgaXNfcGFydGlhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGFydGlhbF9wcmVkaWNhdGU6IGlkeC5wYXJ0aWFsX3ByZWRpY2F0ZSEsXG4gICAgICAgICAgfSBhcyBjb25zdClcbiAgICAgICAgOiAoe2lzX3BhcnRpYWw6IGZhbHNlfSBhcyBjb25zdCkpLFxufSk7XG5cbmNvbnN0IHRyYW5zZm9ybVJlZmVyZW5jZSA9IChmazogVEZvcmVpZ25LZXlJbmZvKSA9PiAoe1xuICAgIGNvbnN0cmFpbnRfbmFtZTogZmsuY29uc3RyYWludF9uYW1lLFxuICAgIGF0dHJpYnV0ZXM6IGZrLmF0dHJpYnV0ZXMsXG4gICAgcmVmZXJlbmNlZF9yZWxhdGlvbjogZmsucmVmZXJlbmNlZF9yZWxhdGlvbixcbiAgICByZWZlcmVuY2VkX2F0dHJpYnV0ZXM6IGZrLnJlZmVyZW5jZWRfYXR0cmlidXRlcyxcbiAgICBvbl91cGRhdGU6IGZrLm9uX3VwZGF0ZSxcbiAgICBvbl9kZWxldGU6IGZrLm9uX2RlbGV0ZSxcbiAgICBjb21tZW50OiBmay5jb21tZW50LFxufSk7XG5cbmV4cG9ydCBjb25zdCBhc3NlbWJsZURhdGFiYXNlID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8VERhdGFiYXNlSW50cm9zcGVjdGlvbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXVlID0gbmV3IFBRdWV1ZSh7Y29uY3VycmVuY3k6IDN9KTtcbiAgICBjb25zdCBjb3VudHMgPSBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLmNvdW50cztcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdmZXRjaGluZyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBbaWRlbnRpZmllciwgY29tbWVudF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaERhdGFiYXNlSWRlbnRpZmllcihwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaERhdGFiYXNlQ29tbWVudChwb29sKSksXG4gICAgXSk7XG5cbiAgICBjb25zdCBbXG4gICAgICAgIGdyb3VwZWQsXG4gICAgICAgIGVudW1zLFxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzLFxuICAgICAgICBleHRlbnNpb25zLFxuICAgICAgICBzZXF1ZW5jZXMsXG4gICAgICAgIHRyaWdnZXJzLFxuICAgICAgICBmdW5jdGlvbnMsXG4gICAgICAgIGN1c3RvbVR5cGVzLFxuICAgICAgICBybHMsXG4gICAgXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljUmVsYXRpb25zKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljRW51bXMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNDaGVja0NvbnN0cmFpbnRzKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoSW5zdGFsbGVkRXh0ZW5zaW9ucyhwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFB1YmxpY1NlcXVlbmNlcyhwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFB1YmxpY1RyaWdnZXJzKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljRnVuY3Rpb25zKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljQ3VzdG9tVHlwZXMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNSTFMocG9vbCkpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgdHlwZWRHcm91cGVkID0gZ3JvdXBlZCBhcyBBd2FpdGVkPFxuICAgICAgICBSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaFB1YmxpY1JlbGF0aW9ucz5cbiAgICA+O1xuICAgIGNvbnN0IHR5cGVkRW51bXMgPSBlbnVtcyBhcyBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGZldGNoUHVibGljRW51bXM+PjtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgY291bnRzLnRhYmxlcyA9XG4gICAgICAgICAgICAodHlwZWRHcm91cGVkLnRhYmxlPy5sZW5ndGggPz8gMCkgK1xuICAgICAgICAgICAgKHR5cGVkR3JvdXBlZC5wYXJ0aXRpb25lZF90YWJsZT8ubGVuZ3RoID8/IDApO1xuICAgICAgICBjb3VudHMudmlld3MgPVxuICAgICAgICAgICAgKHR5cGVkR3JvdXBlZC52aWV3Py5sZW5ndGggPz8gMCkgK1xuICAgICAgICAgICAgKHR5cGVkR3JvdXBlZC5tYXRlcmlhbGl6ZWRfdmlldz8ubGVuZ3RoID8/IDApO1xuICAgICAgICBjb3VudHMuZW51bXMgPSBPYmplY3Qua2V5cyh0eXBlZEVudW1zKS5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhbGxSZWxhdGlvbnMgPSBbXG4gICAgICAgIC4uLih0eXBlZEdyb3VwZWQucGFydGl0aW9uZWRfdGFibGUgPz8gW10pLFxuICAgICAgICAuLi4odHlwZWRHcm91cGVkLnRhYmxlID8/IFtdKSxcbiAgICAgICAgLi4uKHR5cGVkR3JvdXBlZC52aWV3ID8/IFtdKSxcbiAgICAgICAgLi4uKHR5cGVkR3JvdXBlZC5tYXRlcmlhbGl6ZWRfdmlldyA/PyBbXSksXG4gICAgXTtcblxuICAgIGNvbnN0IGlzVmlld0tpbmQgPSAodHlwZTogc3RyaW5nKSA9PlxuICAgICAgICB0eXBlID09PSAndmlldycgfHwgdHlwZSA9PT0gJ21hdGVyaWFsaXplZF92aWV3JztcblxuICAgIGNvbnN0IHNraXBBbmFseXplID0gc3RvcmUub3V0cHV0T3B0aW9ucy5za2lwQW5hbHl6ZTtcblxuICAgIGNvbnN0IHJlbGF0aW9uRW50cmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBhbGxSZWxhdGlvbnMubWFwKGFzeW5jIChyZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChyZWwudHlwZSAhPT0gJ3ZpZXcnICYmICFza2lwQW5hbHl6ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHF1ZXVlLmFkZCgoKSA9PiBhbmFseXplUmVsYXRpb24ocG9vbCwgcmVsLm5hbWUpKTtcbiAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50cy5hbmFseXplZCArPSAxO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBbYXR0cmlidXRlcywgaW5kZXhlcywgZm9yZWlnbktleXMsIHN0YXRzLCB2aWV3RGVmaW5pdGlvbl0gPVxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUmVsYXRpb25BdHRyaWJ1dGVzKHBvb2wsIHJlbC5uYW1lKSksXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFJlbGF0aW9uSW5kZXhlcyhwb29sLCByZWwubmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hSZWxhdGlvbkZvcmVpZ25LZXlzKHBvb2wsIHJlbC5uYW1lKSksXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFJlbGF0aW9uU3RhdHMocG9vbCwgcmVsLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgaXNWaWV3S2luZChyZWwudHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcXVldWUuYWRkKCgpID0+IGZldGNoVmlld0RlZmluaXRpb24ocG9vbCwgcmVsLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gYXR0cmlidXRlcyBhcyBUQXR0cmlidXRlSW5mb1tdO1xuICAgICAgICAgICAgY29uc3QgaWR4cyA9IGluZGV4ZXMgYXMgVEluZGV4SW5mb1tdO1xuICAgICAgICAgICAgY29uc3QgZmtzID0gZm9yZWlnbktleXMgYXMgVEZvcmVpZ25LZXlJbmZvW107XG4gICAgICAgICAgICBjb25zdCByZWxTdGF0cyA9IHN0YXRzIGFzIFRSZWxhdGlvblN0YXRzO1xuXG4gICAgICAgICAgICBjb25zdCBkaXN0aW5jdExvb2t1cCA9IG5ldyBNYXAoXG4gICAgICAgICAgICAgICAgcmVsU3RhdHMuYXR0cmlidXRlcy5tYXAoKGEpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgYS5hdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYS5lc3RpbWF0ZWRfZGlzdGluY3QsXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY291bnRzLmNvbHVtbnMgKz0gYXR0cnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvdW50cy5pbmRleGVzICs9IGlkeHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvdW50cy5mb3JlaWduS2V5cyArPSBma3MubGVuZ3RoO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkQXR0cnMgPSBhdHRycy5tYXAoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gdHJhbnNmb3JtQXR0cmlidXRlKGF0dHIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RpbmN0ID0gZGlzdGluY3RMb29rdXAuZ2V0KGF0dHIuYXR0cmlidXRlX25hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkaXN0aW5jdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gey4uLmJhc2UsIGVzdGltYXRlZF9kaXN0aW5jdDogZGlzdGluY3R9XG4gICAgICAgICAgICAgICAgICAgIDogYmFzZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbk9iaiA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiByZWwubmFtZSxcbiAgICAgICAgICAgICAgICBjb21tZW50OiByZWwuY29tbWVudCxcbiAgICAgICAgICAgICAgICBraW5kOiByZWwudHlwZSxcbiAgICAgICAgICAgICAgICBlc3RpbWF0ZWRfcm93X2NvdW50OiByZWxTdGF0cy5lc3RpbWF0ZWRfcm93X2NvdW50LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRvUmVjb3JkKHRyYW5zZm9ybWVkQXR0cnMsIChhKSA9PiBhLm5hbWUpLFxuICAgICAgICAgICAgICAgIGluZGV4ZXM6IHRvUmVjb3JkKFxuICAgICAgICAgICAgICAgICAgICBpZHhzLm1hcCh0cmFuc2Zvcm1JbmRleCksXG4gICAgICAgICAgICAgICAgICAgIChpKSA9PiBpLmluZGV4X25hbWUsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiB0b1JlY29yZChcbiAgICAgICAgICAgICAgICAgICAgZmtzLm1hcCh0cmFuc2Zvcm1SZWZlcmVuY2UpLFxuICAgICAgICAgICAgICAgICAgICAocikgPT4gci5jb25zdHJhaW50X25hbWUsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAuLi4odmlld0RlZmluaXRpb25cbiAgICAgICAgICAgICAgICAgICAgPyB7dmlld0RlZmluaXRpb246IHZpZXdEZWZpbml0aW9uIGFzIHN0cmluZ31cbiAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gW3JlbC5uYW1lLCByZWxhdGlvbk9ial0gYXMgY29uc3Q7XG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uc3RhdGUgPSAnZG9uZSc7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAncG9zdGdyZXNxbCcgYXMgY29uc3QsXG4gICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgIHZlcnNpb25fc3RyaW5nOiBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucG9zdGdyZXNWZXJzaW9uISxcbiAgICAgICAgICAgIHZlcnNpb25fbnVtYmVyOlxuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wb3N0Z3Jlc1ZlcnNpb25OdW1iZXIhLFxuICAgICAgICB9LFxuICAgICAgICBpZGVudGlmaWVyOiB7XG4gICAgICAgICAgICBzeXN0ZW1faWRlbnRpZmllcjogaWRlbnRpZmllciEuc3lzdGVtX2lkZW50aWZpZXIsXG4gICAgICAgICAgICBkYXRhYmFzZV9vaWQ6IGlkZW50aWZpZXIhLmRhdGFiYXNlX29pZCxcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogaWRlbnRpZmllciEuZGF0YWJhc2VfbmFtZSxcbiAgICAgICAgY29tbWVudDogY29tbWVudCA/PyBudWxsLFxuICAgICAgICByZWxhdGlvbnM6IE9iamVjdC5mcm9tRW50cmllcyhyZWxhdGlvbkVudHJpZXMpLFxuICAgICAgICBlbnVtczogdHlwZWRFbnVtcyxcbiAgICAgICAgY2hlY2tDb25zdHJhaW50czogY2hlY2tDb25zdHJhaW50cyBhcyBBd2FpdGVkPFxuICAgICAgICAgICAgUmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hQdWJsaWNDaGVja0NvbnN0cmFpbnRzPlxuICAgICAgICA+LFxuICAgICAgICBleHRlbnNpb25zOiBleHRlbnNpb25zIGFzIEF3YWl0ZWQ8XG4gICAgICAgICAgICBSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaEluc3RhbGxlZEV4dGVuc2lvbnM+XG4gICAgICAgID4sXG4gICAgICAgIHNlcXVlbmNlczogc2VxdWVuY2VzIGFzIEF3YWl0ZWQ8XG4gICAgICAgICAgICBSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaFB1YmxpY1NlcXVlbmNlcz5cbiAgICAgICAgPixcbiAgICAgICAgdHJpZ2dlcnM6IHRyaWdnZXJzIGFzIEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hQdWJsaWNUcmlnZ2Vycz4+LFxuICAgICAgICBmdW5jdGlvbnM6IGZ1bmN0aW9ucyBhcyBBd2FpdGVkPFxuICAgICAgICAgICAgUmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hQdWJsaWNGdW5jdGlvbnM+XG4gICAgICAgID4sXG4gICAgICAgIGN1c3RvbVR5cGVzOlxuICAgICAgICAgICAgY3VzdG9tVHlwZXMgYXMgdW5rbm93biBhcyBURGF0YWJhc2VJbnRyb3NwZWN0aW9uWydjdXN0b21UeXBlcyddLFxuICAgICAgICBybHM6IHJscyBhcyB1bmtub3duIGFzIFREYXRhYmFzZUludHJvc3BlY3Rpb25bJ3JscyddLFxuICAgIH07XG59O1xuIl19
@@ -0,0 +1,4 @@
1
+ import type { Instance } from 'ink';
2
+ import type { TStore } from '../store.mjs';
3
+ export declare const runList: (store: TStore, inkApp: Instance) => Promise<void>;
4
+ //# sourceMappingURL=list.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.mts","sourceRoot":"./src/","sources":["app/list.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,KAAK,CAAC;AAElC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAOzC,eAAO,MAAM,OAAO,GAChB,OAAO,MAAM,EACb,QAAQ,QAAQ,KACjB,OAAO,CAAC,IAAI,CA2Gd,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { runInAction, when } from 'mobx';
2
+ import { readConfig } from './config.mjs';
3
+ import { createAuthenticatedTRPCClient } from '../lib/trpc.mjs';
4
+ import { connectAccount } from './session.mjs';
5
+ import { tailRevision } from './tail.mjs';
6
+ import { logger } from '../logger.mjs';
7
+ export const runList = async (store, inkApp) => {
8
+ try {
9
+ const config = await readConfig();
10
+ if (!config.token) {
11
+ inkApp.unmount();
12
+ console.log('no auth token found. run `dbctx login` to authenticate.');
13
+ process.exit(1);
14
+ }
15
+ const authed = createAuthenticatedTRPCClient(() => Promise.resolve(config.token));
16
+ await connectAccount(config.token, store);
17
+ const items = await authed.databases.listForUser.query();
18
+ if (items.length === 0) {
19
+ inkApp.unmount();
20
+ console.log('no databases yet. run `dbctx` against a database to get started.');
21
+ process.exit(0);
22
+ }
23
+ runInAction(() => {
24
+ store.mode = 'list-picking';
25
+ store.listPicker = {
26
+ items,
27
+ focusedIndex: 0,
28
+ selectedIndex: null,
29
+ };
30
+ });
31
+ await when(() => store.listPicker?.selectedIndex !== null);
32
+ const picker = store.listPicker;
33
+ if (picker === null || picker.selectedIndex === null) {
34
+ return;
35
+ }
36
+ // Synthetic "exit" row sentinel — selectedIndex === items.length means
37
+ // the user picked the bottom "exit" entry. Unmount and quit.
38
+ if (picker.selectedIndex === picker.items.length) {
39
+ inkApp.unmount();
40
+ process.exit(0);
41
+ }
42
+ const picked = picker.items[picker.selectedIndex];
43
+ if (picked === undefined) {
44
+ return;
45
+ }
46
+ const needsLocalRerun = !picked.samplesIngested ||
47
+ (!picked.postIntrospection.done &&
48
+ picked.postIntrospection.jobStatus === null);
49
+ if (needsLocalRerun) {
50
+ inkApp.unmount();
51
+ const reason = !picked.samplesIngested
52
+ ? 'samples for this database have not been uploaded yet.'
53
+ : 'post-introspection enrichment is stuck (no live job and not complete).';
54
+ console.log(`"${picked.name}": ${reason}`);
55
+ console.log('rerun `dbctx` against the same database to pick up where you left off.');
56
+ process.exit(0);
57
+ }
58
+ // Tail-able: pre-fill upstream steps to mirror a hash-hit-then-tail
59
+ // outcome and flip mode so the regular cascade renders. Phase-0 done
60
+ // can be pre-set (no extra info to fetch); post-sampling is left to
61
+ // dispatchAndStreamPostSampling so the relations/foreign-keys counts come
62
+ // back from the server.s runPostSampling response.
63
+ runInAction(() => {
64
+ store.mode = 'list-tailing';
65
+ store.steps.ingestion.introspection.state = 'skipped';
66
+ store.steps.sampling.state = 'skipped';
67
+ store.steps.sampling.reused = true;
68
+ store.steps.ingestion.samples.state = 'skipped';
69
+ store.steps.ingestion.samples.reused = true;
70
+ if (picked.postIntrospection.done) {
71
+ store.steps.ingestion.postIntrospection.state = 'done';
72
+ store.steps.ingestion.postIntrospection.reused = true;
73
+ }
74
+ });
75
+ await tailRevision({
76
+ authed,
77
+ revisionId: picked.latestRevisionId,
78
+ store,
79
+ postIntrospectionDone: picked.postIntrospection.done,
80
+ });
81
+ runInAction(() => {
82
+ store.exitRequested = true;
83
+ });
84
+ }
85
+ catch (err) {
86
+ const msg = err instanceof Error ? err.message : String(err);
87
+ logger.error(`list: ${msg}`);
88
+ inkApp.unmount();
89
+ console.log(`error: ${msg}`);
90
+ process.exit(1);
91
+ }
92
+ };
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJhcHAvbGlzdC5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUN4QixLQUFhLEVBQ2IsTUFBZ0IsRUFDSCxFQUFFO0lBQ2YsSUFBSSxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsR0FBRyxDQUNQLHlEQUF5RCxDQUM1RCxDQUFDO1lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsNkJBQTZCLENBQUMsR0FBRyxFQUFFLENBQzlDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQU0sQ0FBQyxDQUNqQyxDQUFDO1FBRUYsTUFBTSxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUxQyxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpELElBQUksS0FBSyxDQUFDLE1B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QUFpQixDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBQ3ZELEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDMUQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLENBQUM7WUFDZixNQUFNO1lBQ04sVUFBVSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDbkMsS0FBSztZQUNMLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJO1NBQ3ZELENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDYixLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ1gsTUFBTSxHQUFHLEdBQUcsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7SW5zdGFuY2V9IGZyb20gJ2luayc7XG5pbXBvcnQge3J1bkluQWN0aW9uLCB3aGVufSBmcm9tICdtb2J4JztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge3JlYWRDb25maWd9IGZyb20gJy4vY29uZmlnLm1qcyc7XG5pbXBvcnQge2NyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50fSBmcm9tICcuLi9saWIvdHJwYy5tanMnO1xuaW1wb3J0IHtjb25uZWN0QWNjb3VudH0gZnJvbSAnLi9zZXNzaW9uLm1qcyc7XG5pbXBvcnQge3RhaWxSZXZpc2lvbn0gZnJvbSAnLi90YWlsLm1qcyc7XG5pbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyLm1qcyc7XG5cbmV4cG9ydCBjb25zdCBydW5MaXN0ID0gYXN5bmMgKFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgaW5rQXBwOiBJbnN0YW5jZSxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKTtcbiAgICAgICAgaWYgKCFjb25maWcudG9rZW4pIHtcbiAgICAgICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnbm8gYXV0aCB0b2tlbiBmb3VuZC4gcnVuIGBkYmN0eCBsb2dpbmAgdG8gYXV0aGVudGljYXRlLicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXV0aGVkID0gY3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnQoKCkgPT5cbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShjb25maWcudG9rZW4hKSxcbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBjb25uZWN0QWNjb3VudChjb25maWcudG9rZW4sIHN0b3JlKTtcblxuICAgICAgICBjb25zdCBpdGVtcyA9IGF3YWl0IGF1dGhlZC5kYXRhYmFzZXMubGlzdEZvclVzZXIucXVlcnkoKTtcblxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpbmtBcHAudW5tb3VudCgpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ25vIGRhdGFiYXNlcyB5ZXQuIHJ1biBgZGJjdHhgIGFnYWluc3QgYSBkYXRhYmFzZSB0byBnZXQgc3RhcnRlZC4nLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLm1vZGUgPSAnbGlzdC1waWNraW5nJztcbiAgICAgICAgICAgIHN0b3JlLmxpc3RQaWNrZXIgPSB7XG4gICAgICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICAgICAgZm9jdXNlZEluZGV4OiAwLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXg6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB3aGVuKCgpID0+IHN0b3JlLmxpc3RQaWNrZXI/LnNlbGVjdGVkSW5kZXggIT09IG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHBpY2tlciA9IHN0b3JlLmxpc3RQaWNrZXI7XG4gICAgICAgIGlmIChwaWNrZXIgPT09IG51bGwgfHwgcGlja2VyLnNlbGVjdGVkSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN5bnRoZXRpYyBcImV4aXRcIiByb3cgc2VudGluZWwg4oCUIHNlbGVjdGVkSW5kZXggPT09IGl0ZW1zLmxlbmd0aCBtZWFuc1xuICAgICAgICAvLyB0aGUgdXNlciBwaWNrZWQgdGhlIGJvdHRvbSBcImV4aXRcIiBlbnRyeS4gVW5tb3VudCBhbmQgcXVpdC5cbiAgICAgICAgaWYgKHBpY2tlci5zZWxlY3RlZEluZGV4ID09PSBwaWNrZXIuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbmtBcHAudW5tb3VudCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGlja2VkID0gcGlja2VyLml0ZW1zW3BpY2tlci5zZWxlY3RlZEluZGV4XTtcbiAgICAgICAgaWYgKHBpY2tlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZWVkc0xvY2FsUmVydW4gPVxuICAgICAgICAgICAgIXBpY2tlZC5zYW1wbGVzSW5nZXN0ZWQgfHxcbiAgICAgICAgICAgICghcGlja2VkLnBvc3RJbnRyb3NwZWN0aW9uLmRvbmUgJiZcbiAgICAgICAgICAgICAgICBwaWNrZWQucG9zdEludHJvc3BlY3Rpb24uam9iU3RhdHVzID09PSBudWxsKTtcblxuICAgICAgICBpZiAobmVlZHNMb2NhbFJlcnVuKSB7XG4gICAgICAgICAgICBpbmtBcHAudW5tb3VudCgpO1xuICAgICAgICAgICAgY29uc3QgcmVhc29uID0gIXBpY2tlZC5zYW1wbGVzSW5nZXN0ZWRcbiAgICAgICAgICAgICAgICA/ICdzYW1wbGVzIGZvciB0aGlzIGRhdGFiYXNlIGhhdmUgbm90IGJlZW4gdXBsb2FkZWQgeWV0LidcbiAgICAgICAgICAgICAgICA6ICdwb3N0LWludHJvc3BlY3Rpb24gZW5yaWNobWVudCBpcyBzdHVjayAobm8gbGl2ZSBqb2IgYW5kIG5vdCBjb21wbGV0ZSkuJztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcIiR7cGlja2VkLm5hbWV9XCI6ICR7cmVhc29ufWApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ3JlcnVuIGBkYmN0eGAgYWdhaW5zdCB0aGUgc2FtZSBkYXRhYmFzZSB0byBwaWNrIHVwIHdoZXJlIHlvdSBsZWZ0IG9mZi4nLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRhaWwtYWJsZTogcHJlLWZpbGwgdXBzdHJlYW0gc3RlcHMgdG8gbWlycm9yIGEgaGFzaC1oaXQtdGhlbi10YWlsXG4gICAgICAgIC8vIG91dGNvbWUgYW5kIGZsaXAgbW9kZSBzbyB0aGUgcmVndWxhciBjYXNjYWRlIHJlbmRlcnMuIFBoYXNlLTAgZG9uZVxuICAgICAgICAvLyBjYW4gYmUgcHJlLXNldCAobm8gZXh0cmEgaW5mbyB0byBmZXRjaCk7IHBvc3Qtc2FtcGxpbmcgaXMgbGVmdCB0b1xuICAgICAgICAvLyBkaXNwYXRjaEFuZFN0cmVhbVBvc3RTYW1wbGluZyBzbyB0aGUgcmVsYXRpb25zL2ZvcmVpZ24ta2V5cyBjb3VudHMgY29tZVxuICAgICAgICAvLyBiYWNrIGZyb20gdGhlIHNlcnZlci5zIHJ1blBvc3RTYW1wbGluZyByZXNwb25zZS5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUubW9kZSA9ICdsaXN0LXRhaWxpbmcnO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLmludHJvc3BlY3Rpb24uc3RhdGUgPSAnc2tpcHBlZCc7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdza2lwcGVkJztcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnJldXNlZCA9IHRydWU7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uc2FtcGxlcy5zdGF0ZSA9ICdza2lwcGVkJztcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnJldXNlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocGlja2VkLnBvc3RJbnRyb3NwZWN0aW9uLmRvbmUpIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnJldXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRhaWxSZXZpc2lvbih7XG4gICAgICAgICAgICBhdXRoZWQsXG4gICAgICAgICAgICByZXZpc2lvbklkOiBwaWNrZWQubGF0ZXN0UmV2aXNpb25JZCxcbiAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb25Eb25lOiBwaWNrZWQucG9zdEludHJvc3BlY3Rpb24uZG9uZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuZXhpdFJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBtc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgbGlzdDogJHttc2d9YCk7XG4gICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBlcnJvcjogJHttc2d9YCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG59O1xuIl19
@@ -0,0 +1,26 @@
1
+ import type { Pool } from 'pg';
2
+ import type { TDatabaseIntrospection } from '@dbctx/core';
3
+ import type { TStore } from '../store.mjs';
4
+ export type TLoadIntrospectionError = {
5
+ kind: 'read';
6
+ message: string;
7
+ } | {
8
+ kind: 'parse';
9
+ message: string;
10
+ } | {
11
+ kind: 'schema';
12
+ message: string;
13
+ } | {
14
+ kind: 'mismatch';
15
+ message: string;
16
+ };
17
+ export type TLoadIntrospectionResult = {
18
+ ok: true;
19
+ result: TDatabaseIntrospection;
20
+ } | {
21
+ ok: false;
22
+ error: TLoadIntrospectionError;
23
+ };
24
+ export declare const loadIntrospectionFromFile: (path: string, pool: Pool) => Promise<TLoadIntrospectionResult>;
25
+ export declare const populateIntrospectionCounts: (store: TStore, introspection: TDatabaseIntrospection) => void;
26
+ //# sourceMappingURL=load-introspection.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-introspection.d.mts","sourceRoot":"./src/","sources":["app/load-introspection.mts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAG7B,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAGzC,MAAM,MAAM,uBAAuB,GAC7B;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GAC/B;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GAChC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GACjC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC;AAE1C,MAAM,MAAM,wBAAwB,GAC9B;IAAC,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAC,GAC1C;IAAC,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAC,CAAC;AAKlD,eAAO,MAAM,yBAAyB,GAClC,MAAM,MAAM,EACZ,MAAM,IAAI,KACX,OAAO,CAAC,wBAAwB,CAuElC,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACpC,OAAO,MAAM,EACb,eAAe,sBAAsB,KACtC,IAoCF,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { runInAction } from 'mobx';
3
+ import { databaseIntrospectionSchema } from '@dbctx/core/schemas/introspection';
4
+ import { fetchDatabaseIdentifier } from '../db/version.mjs';
5
+ const errMessage = (err) => err instanceof Error ? err.message : String(err);
6
+ export const loadIntrospectionFromFile = async (path, pool) => {
7
+ const raw = await (async () => {
8
+ try {
9
+ return { ok: true, value: await readFile(path, 'utf8') };
10
+ }
11
+ catch (err) {
12
+ return {
13
+ ok: false,
14
+ error: {
15
+ kind: 'read',
16
+ message: `Failed to read introspection file at ${path}: ${errMessage(err)}`,
17
+ },
18
+ };
19
+ }
20
+ })();
21
+ if (!raw.ok) {
22
+ return { ok: false, error: raw.error };
23
+ }
24
+ const parsed = (() => {
25
+ try {
26
+ return { ok: true, value: JSON.parse(raw.value) };
27
+ }
28
+ catch (err) {
29
+ return {
30
+ ok: false,
31
+ error: {
32
+ kind: 'parse',
33
+ message: `Failed to parse introspection JSON at ${path}: ${errMessage(err)}`,
34
+ },
35
+ };
36
+ }
37
+ })();
38
+ if (!parsed.ok) {
39
+ return { ok: false, error: parsed.error };
40
+ }
41
+ const validated = databaseIntrospectionSchema.safeParse(parsed.value);
42
+ if (!validated.success) {
43
+ return {
44
+ ok: false,
45
+ error: {
46
+ kind: 'schema',
47
+ message: `Introspection JSON at ${path} does not match the expected schema: ${validated.error.message}`,
48
+ },
49
+ };
50
+ }
51
+ const loaded = validated.data;
52
+ const live = await fetchDatabaseIdentifier(pool);
53
+ const matches = loaded.identifier.system_identifier === live.system_identifier &&
54
+ loaded.identifier.database_oid === live.database_oid &&
55
+ loaded.name === live.database_name;
56
+ if (!matches) {
57
+ return {
58
+ ok: false,
59
+ error: {
60
+ kind: 'mismatch',
61
+ message: `Introspection JSON does not match the connected database.\n` +
62
+ ` loaded: name=${loaded.name} system_identifier=${loaded.identifier.system_identifier} database_oid=${loaded.identifier.database_oid}\n` +
63
+ ` live: name=${live.database_name} system_identifier=${live.system_identifier} database_oid=${live.database_oid}`,
64
+ },
65
+ };
66
+ }
67
+ return { ok: true, result: loaded };
68
+ };
69
+ export const populateIntrospectionCounts = (store, introspection) => {
70
+ const counts = store.steps.introspection.counts;
71
+ const relations = Object.values(introspection.relations);
72
+ const tables = relations.filter((r) => r.kind === 'table' || r.kind === 'partitioned_table').length;
73
+ const views = relations.filter((r) => r.kind === 'view').length;
74
+ const materializedViews = relations.filter((r) => r.kind === 'materialized_view').length;
75
+ const columns = relations.reduce((acc, r) => acc + Object.keys(r.attributes).length, 0);
76
+ const indexes = relations.reduce((acc, r) => acc + Object.keys(r.indexes).length, 0);
77
+ const foreignKeys = relations.reduce((acc, r) => acc + Object.keys(r.references).length, 0);
78
+ runInAction(() => {
79
+ counts.tables = tables;
80
+ counts.views = views;
81
+ counts.materializedViews = materializedViews;
82
+ counts.columns = columns;
83
+ counts.indexes = indexes;
84
+ counts.foreignKeys = foreignKeys;
85
+ counts.enums = Object.keys(introspection.enums).length;
86
+ counts.analyzed = 0;
87
+ });
88
+ };
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1pbnRyb3NwZWN0aW9uLm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImFwcC9sb2FkLWludHJvc3BlY3Rpb24ubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBSTlFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBWTFELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBWSxFQUFVLEVBQUUsQ0FDeEMsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLEtBQUssRUFDMUMsSUFBWSxFQUNaLElBQVUsRUFDdUIsRUFBRTtJQUNuQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDMUIsSUFBSSxDQUFDO1lBQ0QsT0FBTyxFQUFDLEVBQUUsRUFBRSxJQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBQyxDQUFDO1FBQ3BFLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ1gsT0FBTztnQkFDSCxFQUFFLEVBQUUsS0FBYztnQkFDbEIsS0FBSyxFQUFFO29CQUNILElBQUksRUFBRSxNQUFlO29CQUNyQixPQUFPLEVBQUUsd0NBQXdDLElBQUksS0FBSyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7aUJBQzlFO2FBQ0osQ0FBQztRQUNOLENBQUM7SUFDTCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRUwsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ2pCLElBQUksQ0FBQztZQUNELE9BQU8sRUFBQyxFQUFFLEVBQUUsSUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQVksRUFBQyxDQUFDO1FBQ3hFLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ1gsT0FBTztnQkFDSCxFQUFFLEVBQUUsS0FBYztnQkFDbEIsS0FBSyxFQUFFO29CQUNILElBQUksRUFBRSxPQUFnQjtvQkFDdEIsT0FBTyxFQUFFLHlDQUF5QyxJQUFJLEtBQUssVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2lCQUMvRTthQUNKLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVMLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDYixPQUFPLEVBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsT0FBTztZQUNILEVBQUUsRUFBRSxLQUFLO1lBQ1QsS0FBSyxFQUFFO2dCQUNILElBQUksRUFBRSxRQUFRO2dCQUNkLE9BQU8sRUFBRSx5QkFBeUIsSUFBSSx3Q0FBd0MsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7YUFDMUc7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqRCxNQUFNLE9BQU8sR0FDVCxNQUFNLENBQUMsVUFBVSxDQUFDLGlCQUFpQixLQUFLLElBQUksQ0FBQyxpQkFBaUI7UUFDOUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLFlBQVk7UUFDcEQsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBRXZDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNYLE9BQU87WUFDSCxFQUFFLEVBQUUsS0FBSztZQUNULEtBQUssRUFBRTtnQkFDSCxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsT0FBTyxFQUNILDZEQUE2RDtvQkFDN0Qsa0JBQWtCLE1BQU0sQ0FBQyxJQUFJLHNCQUFzQixNQUFNLENBQUMsVUFBVSxDQUFDLGlCQUFpQixpQkFBaUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLElBQUk7b0JBQ3pJLGtCQUFrQixJQUFJLENBQUMsYUFBYSxzQkFBc0IsSUFBSSxDQUFDLGlCQUFpQixpQkFBaUIsSUFBSSxDQUFDLFlBQVksRUFBRTthQUMzSDtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTyxFQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQ3ZDLEtBQWEsRUFDYixhQUFxQyxFQUNqQyxFQUFFO0lBQ04sTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBRWhELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXpELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQzNCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUM5RCxDQUFDLE1BQU0sQ0FBQztJQUNULE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2hFLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FDdEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQ3hDLENBQUMsTUFBTSxDQUFDO0lBRVQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FDNUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUNsRCxDQUFDLENBQ0osQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQzVCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFDL0MsQ0FBQyxDQUNKLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUNoQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEVBQ2xELENBQUMsQ0FDSixDQUFDO0lBRUYsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNiLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUM3QyxNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN6QixNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN6QixNQUFNLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUNqQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN2RCxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cmVhZEZpbGV9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcbmltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuaW1wb3J0IHtkYXRhYmFzZUludHJvc3BlY3Rpb25TY2hlbWF9IGZyb20gJ0BkYmN0eC9jb3JlL3NjaGVtYXMvaW50cm9zcGVjdGlvbic7XG5pbXBvcnQgdHlwZSB7VERhdGFiYXNlSW50cm9zcGVjdGlvbn0gZnJvbSAnQGRiY3R4L2NvcmUnO1xuXG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtmZXRjaERhdGFiYXNlSWRlbnRpZmllcn0gZnJvbSAnLi4vZGIvdmVyc2lvbi5tanMnO1xuXG5leHBvcnQgdHlwZSBUTG9hZEludHJvc3BlY3Rpb25FcnJvciA9XG4gICAgfCB7a2luZDogJ3JlYWQnOyBtZXNzYWdlOiBzdHJpbmd9XG4gICAgfCB7a2luZDogJ3BhcnNlJzsgbWVzc2FnZTogc3RyaW5nfVxuICAgIHwge2tpbmQ6ICdzY2hlbWEnOyBtZXNzYWdlOiBzdHJpbmd9XG4gICAgfCB7a2luZDogJ21pc21hdGNoJzsgbWVzc2FnZTogc3RyaW5nfTtcblxuZXhwb3J0IHR5cGUgVExvYWRJbnRyb3NwZWN0aW9uUmVzdWx0ID1cbiAgICB8IHtvazogdHJ1ZTsgcmVzdWx0OiBURGF0YWJhc2VJbnRyb3NwZWN0aW9ufVxuICAgIHwge29rOiBmYWxzZTsgZXJyb3I6IFRMb2FkSW50cm9zcGVjdGlvbkVycm9yfTtcblxuY29uc3QgZXJyTWVzc2FnZSA9IChlcnI6IHVua25vd24pOiBzdHJpbmcgPT5cbiAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cbmV4cG9ydCBjb25zdCBsb2FkSW50cm9zcGVjdGlvbkZyb21GaWxlID0gYXN5bmMgKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUTG9hZEludHJvc3BlY3Rpb25SZXN1bHQ+ID0+IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHtvazogdHJ1ZSBhcyBjb25zdCwgdmFsdWU6IGF3YWl0IHJlYWRGaWxlKHBhdGgsICd1dGY4Jyl9O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb2s6IGZhbHNlIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdyZWFkJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byByZWFkIGludHJvc3BlY3Rpb24gZmlsZSBhdCAke3BhdGh9OiAke2Vyck1lc3NhZ2UoZXJyKX1gLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSkoKTtcblxuICAgIGlmICghcmF3Lm9rKSB7XG4gICAgICAgIHJldHVybiB7b2s6IGZhbHNlLCBlcnJvcjogcmF3LmVycm9yfTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWQgPSAoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHtvazogdHJ1ZSBhcyBjb25zdCwgdmFsdWU6IEpTT04ucGFyc2UocmF3LnZhbHVlKSBhcyB1bmtub3dufTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9rOiBmYWxzZSBhcyBjb25zdCxcbiAgICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAncGFyc2UnIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIHBhcnNlIGludHJvc3BlY3Rpb24gSlNPTiBhdCAke3BhdGh9OiAke2Vyck1lc3NhZ2UoZXJyKX1gLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSkoKTtcblxuICAgIGlmICghcGFyc2VkLm9rKSB7XG4gICAgICAgIHJldHVybiB7b2s6IGZhbHNlLCBlcnJvcjogcGFyc2VkLmVycm9yfTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBkYXRhYmFzZUludHJvc3BlY3Rpb25TY2hlbWEuc2FmZVBhcnNlKHBhcnNlZC52YWx1ZSk7XG5cbiAgICBpZiAoIXZhbGlkYXRlZC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdzY2hlbWEnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBJbnRyb3NwZWN0aW9uIEpTT04gYXQgJHtwYXRofSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgc2NoZW1hOiAke3ZhbGlkYXRlZC5lcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlZCA9IHZhbGlkYXRlZC5kYXRhO1xuICAgIGNvbnN0IGxpdmUgPSBhd2FpdCBmZXRjaERhdGFiYXNlSWRlbnRpZmllcihwb29sKTtcblxuICAgIGNvbnN0IG1hdGNoZXMgPVxuICAgICAgICBsb2FkZWQuaWRlbnRpZmllci5zeXN0ZW1faWRlbnRpZmllciA9PT0gbGl2ZS5zeXN0ZW1faWRlbnRpZmllciAmJlxuICAgICAgICBsb2FkZWQuaWRlbnRpZmllci5kYXRhYmFzZV9vaWQgPT09IGxpdmUuZGF0YWJhc2Vfb2lkICYmXG4gICAgICAgIGxvYWRlZC5uYW1lID09PSBsaXZlLmRhdGFiYXNlX25hbWU7XG5cbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAga2luZDogJ21pc21hdGNoJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICAgICBgSW50cm9zcGVjdGlvbiBKU09OIGRvZXMgbm90IG1hdGNoIHRoZSBjb25uZWN0ZWQgZGF0YWJhc2UuXFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAgIGxvYWRlZDogbmFtZT0ke2xvYWRlZC5uYW1lfSBzeXN0ZW1faWRlbnRpZmllcj0ke2xvYWRlZC5pZGVudGlmaWVyLnN5c3RlbV9pZGVudGlmaWVyfSBkYXRhYmFzZV9vaWQ9JHtsb2FkZWQuaWRlbnRpZmllci5kYXRhYmFzZV9vaWR9XFxuYCArXG4gICAgICAgICAgICAgICAgICAgIGAgIGxpdmU6ICAgbmFtZT0ke2xpdmUuZGF0YWJhc2VfbmFtZX0gc3lzdGVtX2lkZW50aWZpZXI9JHtsaXZlLnN5c3RlbV9pZGVudGlmaWVyfSBkYXRhYmFzZV9vaWQ9JHtsaXZlLmRhdGFiYXNlX29pZH1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge29rOiB0cnVlLCByZXN1bHQ6IGxvYWRlZH07XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdWxhdGVJbnRyb3NwZWN0aW9uQ291bnRzID0gKFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgaW50cm9zcGVjdGlvbjogVERhdGFiYXNlSW50cm9zcGVjdGlvbixcbik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGNvdW50cyA9IHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uY291bnRzO1xuXG4gICAgY29uc3QgcmVsYXRpb25zID0gT2JqZWN0LnZhbHVlcyhpbnRyb3NwZWN0aW9uLnJlbGF0aW9ucyk7XG5cbiAgICBjb25zdCB0YWJsZXMgPSByZWxhdGlvbnMuZmlsdGVyKFxuICAgICAgICAocikgPT4gci5raW5kID09PSAndGFibGUnIHx8IHIua2luZCA9PT0gJ3BhcnRpdGlvbmVkX3RhYmxlJyxcbiAgICApLmxlbmd0aDtcbiAgICBjb25zdCB2aWV3cyA9IHJlbGF0aW9ucy5maWx0ZXIoKHIpID0+IHIua2luZCA9PT0gJ3ZpZXcnKS5sZW5ndGg7XG4gICAgY29uc3QgbWF0ZXJpYWxpemVkVmlld3MgPSByZWxhdGlvbnMuZmlsdGVyKFxuICAgICAgICAocikgPT4gci5raW5kID09PSAnbWF0ZXJpYWxpemVkX3ZpZXcnLFxuICAgICkubGVuZ3RoO1xuXG4gICAgY29uc3QgY29sdW1ucyA9IHJlbGF0aW9ucy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHIpID0+IGFjYyArIE9iamVjdC5rZXlzKHIuYXR0cmlidXRlcykubGVuZ3RoLFxuICAgICAgICAwLFxuICAgICk7XG4gICAgY29uc3QgaW5kZXhlcyA9IHJlbGF0aW9ucy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHIpID0+IGFjYyArIE9iamVjdC5rZXlzKHIuaW5kZXhlcykubGVuZ3RoLFxuICAgICAgICAwLFxuICAgICk7XG4gICAgY29uc3QgZm9yZWlnbktleXMgPSByZWxhdGlvbnMucmVkdWNlKFxuICAgICAgICAoYWNjLCByKSA9PiBhY2MgKyBPYmplY3Qua2V5cyhyLnJlZmVyZW5jZXMpLmxlbmd0aCxcbiAgICAgICAgMCxcbiAgICApO1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBjb3VudHMudGFibGVzID0gdGFibGVzO1xuICAgICAgICBjb3VudHMudmlld3MgPSB2aWV3cztcbiAgICAgICAgY291bnRzLm1hdGVyaWFsaXplZFZpZXdzID0gbWF0ZXJpYWxpemVkVmlld3M7XG4gICAgICAgIGNvdW50cy5jb2x1bW5zID0gY29sdW1ucztcbiAgICAgICAgY291bnRzLmluZGV4ZXMgPSBpbmRleGVzO1xuICAgICAgICBjb3VudHMuZm9yZWlnbktleXMgPSBmb3JlaWduS2V5cztcbiAgICAgICAgY291bnRzLmVudW1zID0gT2JqZWN0LmtleXMoaW50cm9zcGVjdGlvbi5lbnVtcykubGVuZ3RoO1xuICAgICAgICBjb3VudHMuYW5hbHl6ZWQgPSAwO1xuICAgIH0pO1xufTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export declare const runLogin: () => Promise<void>;
2
+ //# sourceMappingURL=login.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.mts","sourceRoot":"./src/","sources":["app/login.mts"],"names":[],"mappings":"AAgDA,eAAO,MAAM,QAAQ,QAAa,OAAO,CAAC,IAAI,CAsD7C,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { render } from 'ink';
2
+ import { createElement, useState, useEffect } from 'react';
3
+ import { trpc, createAuthenticatedTRPCClient } from '../lib/trpc.mjs';
4
+ import { readConfig, writeConfig } from './config.mjs';
5
+ import { buildConnectURL } from './open-url.mjs';
6
+ import { detectHostname, detectOS, detectShell, detectUsername, } from './detect.mjs';
7
+ import { LoginView } from '../ui/components/Login.js';
8
+ import { logger } from '../logger.mjs';
9
+ const waitForToken = (loginId) => new Promise((resolve, reject) => {
10
+ const sub = trpc.cliLogin.onAuthorization.subscribe({ login_id: loginId }, {
11
+ onData: (data) => {
12
+ sub.unsubscribe();
13
+ resolve(data.token);
14
+ },
15
+ onError: (err) => {
16
+ sub.unsubscribe();
17
+ reject(err);
18
+ },
19
+ });
20
+ });
21
+ const LoginApp = ({ initialState, subscribe }) => {
22
+ const [state, setState] = useState(initialState);
23
+ useEffect(() => {
24
+ subscribe(setState);
25
+ }, [subscribe]);
26
+ return createElement(LoginView, { state });
27
+ };
28
+ export const runLogin = async () => {
29
+ let setState = () => { };
30
+ const subscribe = async (update) => {
31
+ setState = update;
32
+ };
33
+ const inkApp = render(createElement(LoginApp, {
34
+ initialState: { kind: 'creating' },
35
+ subscribe,
36
+ }));
37
+ try {
38
+ const config = await readConfig();
39
+ const { login_id } = await trpc.cliLogin.create.mutate({
40
+ username: detectUsername(),
41
+ hostname: detectHostname(),
42
+ os: detectOS(),
43
+ shell: detectShell(),
44
+ device_id: config.device_id,
45
+ });
46
+ const url = buildConnectURL(login_id);
47
+ setState({ kind: 'waiting', url });
48
+ const token = await waitForToken(login_id);
49
+ await writeConfig(token);
50
+ const authed = createAuthenticatedTRPCClient(() => Promise.resolve(token));
51
+ const account = await authed.account.getAccount.query({});
52
+ setState({
53
+ kind: 'connected',
54
+ email: account.emails[0] ?? null,
55
+ });
56
+ await new Promise((r) => setTimeout(r, 200));
57
+ inkApp.unmount();
58
+ process.exit(0);
59
+ }
60
+ catch (err) {
61
+ const message = err instanceof Error ? err.message : String(err);
62
+ logger.error(`login: ${message}`);
63
+ setState({ kind: 'error', message });
64
+ await new Promise((r) => setTimeout(r, 200));
65
+ inkApp.unmount();
66
+ process.exit(1);
67
+ }
68
+ };
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4ubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiYXBwL2xvZ2luLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sS0FBSyxDQUFDO0FBQzNCLE9BQU8sRUFBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUN6RCxPQUFPLEVBQUMsSUFBSSxFQUFFLDZCQUE2QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDckQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxjQUFjLEVBQ2QsUUFBUSxFQUNSLFdBQVcsRUFDWCxjQUFjLEdBQ2pCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBQyxTQUFTLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDdEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWUsRUFBbUIsRUFBRSxDQUN0RCxJQUFJLE9BQU8sQ0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtJQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQy9DLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxFQUNuQjtRQUNJLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2IsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxHQUFH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LEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cmVuZGVyfSBmcm9tICdpbmsnO1xuaW1wb3J0IHtjcmVhdGVFbGVtZW50LCB1c2VTdGF0ZSwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3RycGMsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50fSBmcm9tICcuLi9saWIvdHJwYy5tanMnO1xuaW1wb3J0IHtyZWFkQ29uZmlnLCB3cml0ZUNvbmZpZ30gZnJvbSAnLi9jb25maWcubWpzJztcbmltcG9ydCB7YnVpbGRDb25uZWN0VVJMfSBmcm9tICcuL29wZW4tdXJsLm1qcyc7XG5pbXBvcnQge1xuICAgIGRldGVjdEhvc3RuYW1lLFxuICAgIGRldGVjdE9TLFxuICAgIGRldGVjdFNoZWxsLFxuICAgIGRldGVjdFVzZXJuYW1lLFxufSBmcm9tICcuL2RldGVjdC5tanMnO1xuaW1wb3J0IHtMb2dpblZpZXcsIHR5cGUgVExvZ2luU3RhdGV9IGZyb20gJy4uL3VpL2NvbXBvbmVudHMvTG9naW4uanMnO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci5tanMnO1xuXG5jb25zdCB3YWl0Rm9yVG9rZW4gPSAobG9naW5JZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+XG4gICAgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YiA9IHRycGMuY2xpTG9naW4ub25BdXRob3JpemF0aW9uLnN1YnNjcmliZShcbiAgICAgICAgICAgIHtsb2dpbl9pZDogbG9naW5JZH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb25EYXRhOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnRva2VuKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uRXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH0pO1xuXG50eXBlIFRMb2dpbkFwcFByb3BzID0ge1xuICAgIHJlYWRvbmx5IGluaXRpYWxTdGF0ZTogVExvZ2luU3RhdGU7XG4gICAgcmVhZG9ubHkgc3Vic2NyaWJlOiAoXG4gICAgICAgIHNldFN0YXRlOiAobmV4dDogVExvZ2luU3RhdGUpID0+IHZvaWQsXG4gICAgKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuY29uc3QgTG9naW5BcHAgPSAoe2luaXRpYWxTdGF0ZSwgc3Vic2NyaWJlfTogVExvZ2luQXBwUHJvcHMpID0+IHtcbiAgICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlPFRMb2dpblN0YXRlPihpbml0aWFsU3RhdGUpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc3Vic2NyaWJlKHNldFN0YXRlKTtcbiAgICB9LCBbc3Vic2NyaWJlXSk7XG5cbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChMb2dpblZpZXcsIHtzdGF0ZX0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJ1bkxvZ2luID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGxldCBzZXRTdGF0ZTogKG5leHQ6IFRMb2dpblN0YXRlKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICBjb25zdCBzdWJzY3JpYmUgPSBhc3luYyAoXG4gICAgICAgIHVwZGF0ZTogKG5leHQ6IFRMb2dpblN0YXRlKSA9PiB2b2lkLFxuICAgICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBzZXRTdGF0ZSA9IHVwZGF0ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5rQXBwID0gcmVuZGVyKFxuICAgICAgICBjcmVhdGVFbGVtZW50KExvZ2luQXBwLCB7XG4gICAgICAgICAgICBpbml0aWFsU3RhdGU6IHtraW5kOiAnY3JlYXRpbmcnfSxcbiAgICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKTtcblxuICAgICAgICBjb25zdCB7bG9naW5faWR9ID0gYXdhaXQgdHJwYy5jbGlMb2dpbi5jcmVhdGUubXV0YXRlKHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiBkZXRlY3RVc2VybmFtZSgpLFxuICAgICAgICAgICAgaG9zdG5hbWU6IGRldGVjdEhvc3RuYW1lKCksXG4gICAgICAgICAgICBvczogZGV0ZWN0T1MoKSxcbiAgICAgICAgICAgIHNoZWxsOiBkZXRlY3RTaGVsbCgpLFxuICAgICAgICAgICAgZGV2aWNlX2lkOiBjb25maWcuZGV2aWNlX2lkLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cmwgPSBidWlsZENvbm5lY3RVUkwobG9naW5faWQpO1xuICAgICAgICBzZXRTdGF0ZSh7a2luZDogJ3dhaXRpbmcnLCB1cmx9KTtcblxuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHdhaXRGb3JUb2tlbihsb2dpbl9pZCk7XG4gICAgICAgIGF3YWl0IHdyaXRlQ29uZmlnKHRva2VuKTtcblxuICAgICAgICBjb25zdCBhdXRoZWQgPSBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCgoKSA9PlxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRva2VuKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IGF3YWl0IGF1dGhlZC5hY2NvdW50LmdldEFjY291bnQucXVlcnkoe30pO1xuXG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb25uZWN0ZWQnLFxuICAgICAgICAgICAgZW1haWw6IGFjY291bnQuZW1haWxzWzBdID8/IG51bGwsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDIwMCkpO1xuICAgICAgICBpbmtBcHAudW5tb3VudCgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgbG9naW46ICR7bWVzc2FnZX1gKTtcbiAgICAgICAgc2V0U3RhdGUoe2tpbmQ6ICdlcnJvcicsIG1lc3NhZ2V9KTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMjAwKSk7XG4gICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG59O1xuIl19
@@ -1,4 +1,6 @@
1
1
  export declare const shouldOpenBrowser: () => boolean;
2
2
  export declare const buildSessionURL: (sessionId: string) => string;
3
+ export declare const buildConnectURL: (loginId: string) => string;
4
+ export declare const openURL: (url: string) => Promise<void>;
3
5
  export declare const openSessionURL: (url: string) => Promise<void>;
4
6
  //# sourceMappingURL=open-url.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"open-url.d.mts","sourceRoot":"./src/","sources":["app/open-url.mts"],"names":[],"mappings":"AAQA,eAAO,MAAM,iBAAiB,QAAO,OAQpC,CAAC;AAMF,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,MACH,CAAC;AAElD,eAAO,MAAM,cAAc,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,IAAI,CAW9D,CAAC"}
1
+ {"version":3,"file":"open-url.d.mts","sourceRoot":"./src/","sources":["app/open-url.mts"],"names":[],"mappings":"AAQA,eAAO,MAAM,iBAAiB,QAAO,OAQpC,CAAC;AAUF,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,MACH,CAAC;AAElD,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,KAAG,MACL,CAAC;AAE9C,eAAO,MAAM,OAAO,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,IAAI,CAWvD,CAAC;AAEF,eAAO,MAAM,cAAc,QAbQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAanB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { env } from 'process';
2
- import { DBCTX_DEV } from '#client/lib/env.mjs';
2
+ import { DBCTX_DEV } from '../lib/env.mjs';
3
3
  const SKIP_VALUES = new Set(['none', 'false', '0']);
4
4
  const isDocker = () => !!(env.DOCKER || env.container || env.DOCKER_CONTAINER);
5
5
  export const shouldOpenBrowser = () => {
@@ -12,8 +12,12 @@ export const shouldOpenBrowser = () => {
12
12
  const SESSION_BASE_URL = !DBCTX_DEV
13
13
  ? 'https://dbctx.io/authorize/session'
14
14
  : 'http://localhost:12002/authorize/session';
15
+ const CONNECT_BASE_URL = !DBCTX_DEV
16
+ ? 'https://dbctx.io/connect'
17
+ : 'http://localhost:12002/connect';
15
18
  export const buildSessionURL = (sessionId) => `${SESSION_BASE_URL}?session-id=${sessionId}`;
16
- export const openSessionURL = async (url) => {
19
+ export const buildConnectURL = (loginId) => `${CONNECT_BASE_URL}?login-id=${loginId}`;
20
+ export const openURL = async (url) => {
17
21
  if (!shouldOpenBrowser()) {
18
22
  return;
19
23
  }
@@ -25,4 +29,5 @@ export const openSessionURL = async (url) => {
25
29
  // Browser opening is best-effort — no-op on failure
26
30
  }
27
31
  };
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi11cmwubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiYXBwL29wZW4tdXJsLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUU5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUVwRCxNQUFNLFFBQVEsR0FBRyxHQUFZLEVBQUUsQ0FDM0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQVksRUFBRTtJQUMzQyxJQUFJLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDYixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUUzQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBUztJQUMvQixDQUFDLENBQUMsb0NBQW9DO0lBQ3RDLENBQUMsQ0FBQywwQ0FBMEMsQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxTQUFpQixFQUFVLEVBQUUsQ0FDekQsR0FBRyxnQkFBZ0IsZUFBZSxTQUFTLEVBQUUsQ0FBQztBQUVsRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLEdBQVcsRUFBaUIsRUFBRTtJQUMvRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLE9BQU87SUFDWCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0QsTUFBTSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ0wsb0RBQW9EO0lBQ3hELENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Vudn0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQge0RCQ1RYX0RFVn0gZnJvbSAnI2NsaWVudC9saWIvZW52Lm1qcyc7XG5cbmNvbnN0IFNLSVBfVkFMVUVTID0gbmV3IFNldChbJ25vbmUnLCAnZmFsc2UnLCAnMCddKTtcblxuY29uc3QgaXNEb2NrZXIgPSAoKTogYm9vbGVhbiA9PlxuICAgICEhKGVudi5ET0NLRVIgfHwgZW52LmNvbnRhaW5lciB8fCBlbnYuRE9DS0VSX0NPTlRBSU5FUik7XG5cbmV4cG9ydCBjb25zdCBzaG91bGRPcGVuQnJvd3NlciA9ICgpOiBib29sZWFuID0+IHtcbiAgICBpZiAoaXNEb2NrZXIoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlciA9IGVudi5CUk9XU0VSPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuICFicm93c2VyIHx8ICFTS0lQX1ZBTFVFUy5oYXMoYnJvd3Nlcik7XG59O1xuXG5jb25zdCBTRVNTSU9OX0JBU0VfVVJMID0gIURCQ1RYX0RFVlxuICAgID8gJ2h0dHBzOi8vZGJjdHguaW8vYXV0aG9yaXplL3Nlc3Npb24nXG4gICAgOiAnaHR0cDovL2xvY2FsaG9zdDoxMjAwMi9hdXRob3JpemUvc2Vzc2lvbic7XG5cbmV4cG9ydCBjb25zdCBidWlsZFNlc3Npb25VUkwgPSAoc2Vzc2lvbklkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICBgJHtTRVNTSU9OX0JBU0VfVVJMfT9zZXNzaW9uLWlkPSR7c2Vzc2lvbklkfWA7XG5cbmV4cG9ydCBjb25zdCBvcGVuU2Vzc2lvblVSTCA9IGFzeW5jICh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghc2hvdWxkT3BlbkJyb3dzZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2RlZmF1bHQ6IG9wZW59ID0gYXdhaXQgaW1wb3J0KCdvcGVuJyk7XG4gICAgICAgIGF3YWl0IG9wZW4odXJsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQnJvd3NlciBvcGVuaW5nIGlzIGJlc3QtZWZmb3J0IOKAlCBuby1vcCBvbiBmYWlsdXJlXG4gICAgfVxufTtcbiJdfQ==
32
+ export const openSessionURL = openURL;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3Blbi11cmwubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiYXBwL29wZW4tdXJsLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzVCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUVwRCxNQUFNLFFBQVEsR0FBRyxHQUFZLEVBQUUsQ0FDM0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQVksRUFBRTtJQUMzQyxJQUFJLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDYixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUUzQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBUztJQUMvQixDQUFDLENBQUMsb0NBQW9DO0lBQ3RDLENBQUMsQ0FBQywwQ0FBMEMsQ0FBQztBQUVqRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBUztJQUMvQixDQUFDLENBQUMsMEJBQTBCO0lBQzVCLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQztBQUV2QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxTQUFpQixFQUFVLEVBQUUsQ0FDekQsR0FBRyxnQkFBZ0IsZUFBZSxTQUFTLEVBQUUsQ0FBQztBQUVsRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUFlLEVBQVUsRUFBRSxDQUN2RCxHQUFHLGdCQUFnQixhQUFhLE9BQU8sRUFBRSxDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsR0FBVyxFQUFpQixFQUFFO0lBQ3hELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDdkIsT0FBTztJQUNYLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDRCxNQUFNLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDTCxvREFBb0Q7SUFDeEQsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Vudn0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQge0RCQ1RYX0RFVn0gZnJvbSAnLi4vbGliL2Vudi5tanMnO1xuXG5jb25zdCBTS0lQX1ZBTFVFUyA9IG5ldyBTZXQoWydub25lJywgJ2ZhbHNlJywgJzAnXSk7XG5cbmNvbnN0IGlzRG9ja2VyID0gKCk6IGJvb2xlYW4gPT5cbiAgICAhIShlbnYuRE9DS0VSIHx8IGVudi5jb250YWluZXIgfHwgZW52LkRPQ0tFUl9DT05UQUlORVIpO1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkT3BlbkJyb3dzZXIgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKGlzRG9ja2VyKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXIgPSBlbnYuQlJPV1NFUj8udG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiAhYnJvd3NlciB8fCAhU0tJUF9WQUxVRVMuaGFzKGJyb3dzZXIpO1xufTtcblxuY29uc3QgU0VTU0lPTl9CQVNFX1VSTCA9ICFEQkNUWF9ERVZcbiAgICA/ICdodHRwczovL2RiY3R4LmlvL2F1dGhvcml6ZS9zZXNzaW9uJ1xuICAgIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MTIwMDIvYXV0aG9yaXplL3Nlc3Npb24nO1xuXG5jb25zdCBDT05ORUNUX0JBU0VfVVJMID0gIURCQ1RYX0RFVlxuICAgID8gJ2h0dHBzOi8vZGJjdHguaW8vY29ubmVjdCdcbiAgICA6ICdodHRwOi8vbG9jYWxob3N0OjEyMDAyL2Nvbm5lY3QnO1xuXG5leHBvcnQgY29uc3QgYnVpbGRTZXNzaW9uVVJMID0gKHNlc3Npb25JZDogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgYCR7U0VTU0lPTl9CQVNFX1VSTH0/c2Vzc2lvbi1pZD0ke3Nlc3Npb25JZH1gO1xuXG5leHBvcnQgY29uc3QgYnVpbGRDb25uZWN0VVJMID0gKGxvZ2luSWQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIGAke0NPTk5FQ1RfQkFTRV9VUkx9P2xvZ2luLWlkPSR7bG9naW5JZH1gO1xuXG5leHBvcnQgY29uc3Qgb3BlblVSTCA9IGFzeW5jICh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghc2hvdWxkT3BlbkJyb3dzZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2RlZmF1bHQ6IG9wZW59ID0gYXdhaXQgaW1wb3J0KCdvcGVuJyk7XG4gICAgICAgIGF3YWl0IG9wZW4odXJsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQnJvd3NlciBvcGVuaW5nIGlzIGJlc3QtZWZmb3J0IOKAlCBuby1vcCBvbiBmYWlsdXJlXG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG9wZW5TZXNzaW9uVVJMID0gb3BlblVSTDtcbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import type { Pool } from 'pg';
2
+ import type { TDatabaseIntrospection } from '@dbctx/core';
3
+ import type { TStore } from '../store.mjs';
4
+ export type TSensitiveMask = Readonly<Record<string, readonly string[]>>;
5
+ export type TTableSampleColumn = {
6
+ readonly strategy: 'distinct' | 'random';
7
+ readonly count: number;
8
+ readonly values: readonly string[];
9
+ };
10
+ export type TTableSamples = {
11
+ readonly table: string;
12
+ readonly sampled_at: string;
13
+ readonly columns: Readonly<Record<string, TTableSampleColumn>>;
14
+ readonly excluded_columns: readonly string[];
15
+ };
16
+ export type TTableSampleEvent = {
17
+ readonly tableName: string;
18
+ readonly samples: TTableSamples;
19
+ };
20
+ export declare const loadSensitiveMask: (path: string) => Promise<TSensitiveMask>;
21
+ export declare const prepareOutputDir: (dirPath: string, allowOverwrite: boolean, store: TStore) => Promise<boolean>;
22
+ export declare const persistTableSamplesToDir: (outputDir: string, event: TTableSampleEvent, indexAccumulator: Record<string, string>) => Promise<void>;
23
+ export declare const runSampling: (pool: Pool, introspection: TDatabaseIntrospection, store: TStore, mask: TSensitiveMask, tableFilter?: ReadonlySet<string>) => AsyncGenerator<TTableSampleEvent>;
24
+ //# sourceMappingURL=sample.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sample.d.mts","sourceRoot":"./src/","sources":["app/sample.mts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAC7B,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAazC,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;AAEzE,MAAM,MAAM,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,QAAQ,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC/D,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACnC,CAAC;AAkFF,eAAO,MAAM,iBAAiB,GAC1B,MAAM,MAAM,KACb,OAAO,CAAC,cAAc,CAIxB,CAAC;AAmBF,eAAO,MAAM,gBAAgB,GACzB,SAAS,MAAM,EACf,gBAAgB,OAAO,EACvB,OAAO,MAAM,KACd,OAAO,CAAC,OAAO,CAsDjB,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACjC,WAAW,MAAM,EACjB,OAAO,iBAAiB,EACxB,kBAAkB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACzC,OAAO,CAAC,IAAI,CAcd,CAAC;AAEF,eAAO,MAAM,WAAW,GACpB,MAAM,IAAI,EACV,eAAe,sBAAsB,EACrC,OAAO,MAAM,EACb,MAAM,cAAc,EACpB,cAAc,WAAW,CAAC,MAAM,CAAC,KAClC,cAAc,CAAC,iBAAiB,CA0LlC,CAAC"}