devcache-hub 0.1.3 → 0.3.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.
- package/dist/analyzers/ArchitectureAnalyzer.d.ts +17 -0
- package/dist/analyzers/ArchitectureAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/ArchitectureAnalyzer.js +217 -0
- package/dist/analyzers/ArchitectureAnalyzer.js.map +1 -0
- package/dist/analyzers/FeaturesAnalyzer.d.ts +18 -0
- package/dist/analyzers/FeaturesAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/FeaturesAnalyzer.js +258 -0
- package/dist/analyzers/FeaturesAnalyzer.js.map +1 -0
- package/dist/analyzers/ImpactAnalyzer.d.ts +16 -0
- package/dist/analyzers/ImpactAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/ImpactAnalyzer.js +165 -0
- package/dist/analyzers/ImpactAnalyzer.js.map +1 -0
- package/dist/analyzers/ProjectAnalyzer.d.ts +14 -0
- package/dist/analyzers/ProjectAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/ProjectAnalyzer.js +142 -0
- package/dist/analyzers/ProjectAnalyzer.js.map +1 -0
- package/dist/analyzers/StackAnalyzer.d.ts +28 -0
- package/dist/analyzers/StackAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/StackAnalyzer.js +320 -0
- package/dist/analyzers/StackAnalyzer.js.map +1 -0
- package/dist/analyzers/base/BaseAnalyzer.d.ts +39 -0
- package/dist/analyzers/base/BaseAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/base/BaseAnalyzer.js +64 -0
- package/dist/analyzers/base/BaseAnalyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +7 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +23 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +32 -19
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +89 -19
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +81 -10
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/orchestrator/FileSystemHandler.d.ts +35 -0
- package/dist/orchestrator/FileSystemHandler.d.ts.map +1 -0
- package/dist/orchestrator/FileSystemHandler.js +138 -0
- package/dist/orchestrator/FileSystemHandler.js.map +1 -0
- package/dist/orchestrator/Orchestrator.d.ts +31 -0
- package/dist/orchestrator/Orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/Orchestrator.js +141 -0
- package/dist/orchestrator/Orchestrator.js.map +1 -0
- package/dist/orchestrator/TemplateManager.d.ts +35 -0
- package/dist/orchestrator/TemplateManager.d.ts.map +1 -0
- package/dist/orchestrator/TemplateManager.js +116 -0
- package/dist/orchestrator/TemplateManager.js.map +1 -0
- package/dist/orchestrator/index.d.ts +4 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +20 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/supabase/client.d.ts +54 -0
- package/dist/supabase/client.d.ts.map +1 -0
- package/dist/supabase/client.js +181 -0
- package/dist/supabase/client.js.map +1 -0
- package/dist/supabase/index.d.ts +3 -0
- package/dist/supabase/index.d.ts.map +1 -0
- package/dist/supabase/index.js +19 -0
- package/dist/supabase/index.js.map +1 -0
- package/dist/supabase/oauth.d.ts +25 -0
- package/dist/supabase/oauth.d.ts.map +1 -0
- package/dist/supabase/oauth.js +218 -0
- package/dist/supabase/oauth.js.map +1 -0
- package/dist/supabase/storage.d.ts +46 -0
- package/dist/supabase/storage.d.ts.map +1 -0
- package/dist/supabase/storage.js +179 -0
- package/dist/supabase/storage.js.map +1 -0
- package/dist/types/analyzers.d.ts +51 -0
- package/dist/types/analyzers.d.ts.map +1 -0
- package/dist/types/analyzers.js +3 -0
- package/dist/types/analyzers.js.map +1 -0
- package/dist/types/config.d.ts +27 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/templates.d.ts +18 -0
- package/dist/types/templates.d.ts.map +1 -0
- package/dist/types/templates.js +3 -0
- package/dist/types/templates.js.map +1 -0
- package/dist/utils/config.d.ts +17 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +46 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/fileParser.d.ts +28 -0
- package/dist/utils/fileParser.d.ts.map +1 -0
- package/dist/utils/fileParser.js +111 -0
- package/dist/utils/fileParser.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +31 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +13 -12
- package/templates/general/project-impact.yaml +34 -0
- package/templates/general/project-overview.yaml +34 -0
- package/templates/tech/architecture-project.yaml +42 -0
- package/templates/tech/features.yaml +38 -0
- package/templates/tech/stack-project.yaml +42 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Orchestrator = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const TemplateManager_1 = require("./TemplateManager");
|
|
9
|
+
const FileSystemHandler_1 = require("./FileSystemHandler");
|
|
10
|
+
const utils_1 = require("../utils");
|
|
11
|
+
class Orchestrator {
|
|
12
|
+
constructor(rootPath = process.cwd()) {
|
|
13
|
+
this.analyzers = new Map();
|
|
14
|
+
this.rootPath = rootPath;
|
|
15
|
+
this.templateManager = new TemplateManager_1.TemplateManager();
|
|
16
|
+
this.fsHandler = new FileSystemHandler_1.FileSystemHandler();
|
|
17
|
+
this.config = {}; // Will be loaded in initialize()
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Initialize orchestrator
|
|
21
|
+
*/
|
|
22
|
+
async initialize() {
|
|
23
|
+
utils_1.Logger.debug('Initializing orchestrator...');
|
|
24
|
+
// Load configuration
|
|
25
|
+
this.config = await utils_1.ConfigManager.readConfig(this.rootPath);
|
|
26
|
+
// Load templates
|
|
27
|
+
await this.templateManager.loadTemplates();
|
|
28
|
+
utils_1.Logger.debug('Orchestrator initialized');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register an analyzer
|
|
32
|
+
*/
|
|
33
|
+
registerAnalyzer(analyzer) {
|
|
34
|
+
this.analyzers.set(analyzer.name, analyzer);
|
|
35
|
+
utils_1.Logger.debug(`Registered analyzer: ${analyzer.name}`);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Main analysis workflow
|
|
39
|
+
*/
|
|
40
|
+
async analyze() {
|
|
41
|
+
utils_1.Logger.section('🔍 Analyzing Project');
|
|
42
|
+
// Step 1: Scan project
|
|
43
|
+
const context = await this.scanProject();
|
|
44
|
+
utils_1.Logger.success(`Scanned ${context.files.length} files`);
|
|
45
|
+
// Step 2: Create output directory with project name
|
|
46
|
+
const outputPath = path_1.default.join(this.rootPath, this.config.outputDir);
|
|
47
|
+
await this.fsHandler.createOutputDirectory(outputPath, this.config.projectName);
|
|
48
|
+
// Step 3: Run analyzers
|
|
49
|
+
const results = [];
|
|
50
|
+
const fileDescriptions = [];
|
|
51
|
+
for (const [name, analyzer] of this.analyzers) {
|
|
52
|
+
try {
|
|
53
|
+
utils_1.Logger.info(`Running ${name}...`);
|
|
54
|
+
const output = await analyzer.analyze(context);
|
|
55
|
+
const template = this.templateManager.getTemplate(name);
|
|
56
|
+
if (!template) {
|
|
57
|
+
throw new Error(`Template not found for analyzer: ${name}`);
|
|
58
|
+
}
|
|
59
|
+
// Render markdown
|
|
60
|
+
const markdown = this.templateManager.renderTemplate(template, output);
|
|
61
|
+
// Write to file (now includes project name in path)
|
|
62
|
+
await this.fsHandler.writeDocumentation(outputPath, this.config.projectName, analyzer.category, template.outputFile, markdown);
|
|
63
|
+
// Store file description for index
|
|
64
|
+
fileDescriptions.push({
|
|
65
|
+
category: analyzer.category,
|
|
66
|
+
filename: template.outputFile,
|
|
67
|
+
description: template.description,
|
|
68
|
+
});
|
|
69
|
+
results.push({
|
|
70
|
+
analyzer: name,
|
|
71
|
+
outputPath: path_1.default.join(outputPath, this.config.projectName, analyzer.category, template.outputFile),
|
|
72
|
+
category: analyzer.category,
|
|
73
|
+
content: markdown,
|
|
74
|
+
success: true,
|
|
75
|
+
});
|
|
76
|
+
utils_1.Logger.success(`Generated ${template.outputFile}`);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
utils_1.Logger.error(`Failed to run ${name}: ${error}`);
|
|
80
|
+
results.push({
|
|
81
|
+
analyzer: name,
|
|
82
|
+
outputPath: '',
|
|
83
|
+
category: analyzer.category,
|
|
84
|
+
content: '',
|
|
85
|
+
success: false,
|
|
86
|
+
error: String(error),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Step 4: Create index.md file
|
|
91
|
+
const projectDescription = this.config.description ||
|
|
92
|
+
`Comprehensive documentation for ${this.config.projectName} project.`;
|
|
93
|
+
await this.fsHandler.writeIndexFile(outputPath, this.config.projectName, projectDescription, fileDescriptions);
|
|
94
|
+
utils_1.Logger.success('Created index.md');
|
|
95
|
+
return results;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Scan project and build context
|
|
99
|
+
*/
|
|
100
|
+
async scanProject() {
|
|
101
|
+
utils_1.Logger.debug('Scanning project structure...');
|
|
102
|
+
// Scan files
|
|
103
|
+
const files = await utils_1.FileParser.scanProject(this.rootPath, this.config.analysis.includePatterns, this.config.analysis.excludePatterns);
|
|
104
|
+
// Read package.json
|
|
105
|
+
const packageJson = await utils_1.FileParser.readPackageJson(this.rootPath);
|
|
106
|
+
// Read README
|
|
107
|
+
const readme = await utils_1.FileParser.readReadme(this.rootPath);
|
|
108
|
+
// Detect framework
|
|
109
|
+
const framework = utils_1.FileParser.detectFramework(packageJson);
|
|
110
|
+
return {
|
|
111
|
+
rootPath: this.rootPath,
|
|
112
|
+
config: this.config,
|
|
113
|
+
files,
|
|
114
|
+
packageJson: packageJson || undefined,
|
|
115
|
+
readme: readme || undefined,
|
|
116
|
+
framework,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get analysis summary
|
|
121
|
+
*/
|
|
122
|
+
getSummary(results) {
|
|
123
|
+
const successful = results.filter((r) => r.success).length;
|
|
124
|
+
const failed = results.filter((r) => !r.success).length;
|
|
125
|
+
let summary = '\n📊 Analysis Summary\n\n';
|
|
126
|
+
summary += `✓ Successful: ${successful}\n`;
|
|
127
|
+
summary += `✗ Failed: ${failed}\n\n`;
|
|
128
|
+
summary += 'Generated files:\n';
|
|
129
|
+
for (const result of results) {
|
|
130
|
+
if (result.success) {
|
|
131
|
+
summary += ` ✓ ${result.outputPath}\n`;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
summary += ` ✗ ${result.analyzer} - ${result.error}\n`;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return summary;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.Orchestrator = Orchestrator;
|
|
141
|
+
//# sourceMappingURL=Orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Orchestrator.js","sourceRoot":"","sources":["../../src/orchestrator/Orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Template } from '../types';
|
|
2
|
+
export declare class TemplateManager {
|
|
3
|
+
private templates;
|
|
4
|
+
private templatesPath;
|
|
5
|
+
constructor(templatesPath?: string);
|
|
6
|
+
/**
|
|
7
|
+
* Load all template definitions
|
|
8
|
+
*/
|
|
9
|
+
loadTemplates(): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Get template by name
|
|
12
|
+
*/
|
|
13
|
+
getTemplate(name: string): Template | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Get all templates
|
|
16
|
+
*/
|
|
17
|
+
getAllTemplates(): Template[];
|
|
18
|
+
/**
|
|
19
|
+
* Get templates by category
|
|
20
|
+
*/
|
|
21
|
+
getTemplatesByCategory(category: 'general' | 'tech'): Template[];
|
|
22
|
+
/**
|
|
23
|
+
* Render template to markdown
|
|
24
|
+
*/
|
|
25
|
+
renderTemplate(template: Template, data: any): string;
|
|
26
|
+
/**
|
|
27
|
+
* Render a section recursively
|
|
28
|
+
*/
|
|
29
|
+
private renderSection;
|
|
30
|
+
/**
|
|
31
|
+
* Validate template structure
|
|
32
|
+
*/
|
|
33
|
+
validateTemplate(template: Template): boolean;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=TemplateManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateManager.d.ts","sourceRoot":"","sources":["../../src/orchestrator/TemplateManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAoB,MAAM,UAAU,CAAC;AAGtD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,CAAC,EAAE,MAAM;IAKlC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BpC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI/C;;OAEG;IACH,eAAe,IAAI,QAAQ,EAAE;IAI7B;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,EAAE;IAIhE;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM;IAcrD;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;CAe9C"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TemplateManager = void 0;
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
10
|
+
const utils_1 = require("../utils");
|
|
11
|
+
class TemplateManager {
|
|
12
|
+
constructor(templatesPath) {
|
|
13
|
+
this.templates = {};
|
|
14
|
+
// Default to templates directory in package
|
|
15
|
+
this.templatesPath = templatesPath || path_1.default.join(__dirname, '../../templates');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Load all template definitions
|
|
19
|
+
*/
|
|
20
|
+
async loadTemplates() {
|
|
21
|
+
try {
|
|
22
|
+
const categories = ['general', 'tech'];
|
|
23
|
+
for (const category of categories) {
|
|
24
|
+
const categoryPath = path_1.default.join(this.templatesPath, category);
|
|
25
|
+
try {
|
|
26
|
+
const files = await promises_1.default.readdir(categoryPath);
|
|
27
|
+
for (const file of files) {
|
|
28
|
+
if (file.endsWith('.yaml') || file.endsWith('.yml')) {
|
|
29
|
+
const filePath = path_1.default.join(categoryPath, file);
|
|
30
|
+
const content = await promises_1.default.readFile(filePath, 'utf-8');
|
|
31
|
+
const template = yaml_1.default.parse(content);
|
|
32
|
+
this.templates[template.name] = template;
|
|
33
|
+
utils_1.Logger.debug(`Loaded template: ${template.name}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
utils_1.Logger.warn(`Could not load templates from ${categoryPath}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
utils_1.Logger.debug(`Loaded ${Object.keys(this.templates).length} templates`);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
throw new Error(`Failed to load templates: ${error}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get template by name
|
|
49
|
+
*/
|
|
50
|
+
getTemplate(name) {
|
|
51
|
+
return this.templates[name];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get all templates
|
|
55
|
+
*/
|
|
56
|
+
getAllTemplates() {
|
|
57
|
+
return Object.values(this.templates);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get templates by category
|
|
61
|
+
*/
|
|
62
|
+
getTemplatesByCategory(category) {
|
|
63
|
+
return Object.values(this.templates).filter((t) => t.category === category);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Render template to markdown
|
|
67
|
+
*/
|
|
68
|
+
renderTemplate(template, data) {
|
|
69
|
+
let markdown = `# ${data.title || template.description}\n\n`;
|
|
70
|
+
for (const section of template.sections) {
|
|
71
|
+
markdown += this.renderSection(section, data, 2);
|
|
72
|
+
}
|
|
73
|
+
// Add metadata footer
|
|
74
|
+
markdown += '\n---\n\n';
|
|
75
|
+
markdown += `*Generated by DevCache on ${new Date().toISOString()}*\n`;
|
|
76
|
+
return markdown;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Render a section recursively
|
|
80
|
+
*/
|
|
81
|
+
renderSection(section, data, level) {
|
|
82
|
+
let markdown = '';
|
|
83
|
+
const heading = '#'.repeat(level);
|
|
84
|
+
// Add section heading
|
|
85
|
+
markdown += `${heading} ${section.heading}\n\n`;
|
|
86
|
+
// Add section content if available
|
|
87
|
+
const sectionData = data.sections?.find((s) => s.heading === section.heading);
|
|
88
|
+
if (sectionData?.content) {
|
|
89
|
+
markdown += `${sectionData.content}\n\n`;
|
|
90
|
+
}
|
|
91
|
+
// Render subsections
|
|
92
|
+
if (section.subsections) {
|
|
93
|
+
for (const subsection of section.subsections) {
|
|
94
|
+
markdown += this.renderSection(subsection, data, level + 1);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return markdown;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Validate template structure
|
|
101
|
+
*/
|
|
102
|
+
validateTemplate(template) {
|
|
103
|
+
if (!template.name || !template.category || !template.outputFile) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
if (!['general', 'tech'].includes(template.category)) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
if (!template.sections || template.sections.length === 0) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.TemplateManager = TemplateManager;
|
|
116
|
+
//# sourceMappingURL=TemplateManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateManager.js","sourceRoot":"","sources":["../../src/orchestrator/TemplateManager.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA6B;AAC7B,gDAAwB;AACxB,gDAAwB;AAExB,oCAAkC;AAElC,MAAa,eAAe;IAI1B,YAAY,aAAsB;QAH1B,cAAS,GAAqB,EAAE,CAAC;QAIvC,4CAA4C;QAC5C,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAEvC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;gBAClC,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBAE7D,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;4BACpD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;4BAC/C,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;4BACrD,MAAM,QAAQ,GAAG,cAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;4BAEjD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;4BACzC,cAAM,CAAC,KAAK,CAAC,oBAAoB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;wBACpD,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,cAAM,CAAC,IAAI,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;YAED,cAAM,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,QAA4B;QACjD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAkB,EAAE,IAAS;QAC1C,IAAI,QAAQ,GAAG,KAAK,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,WAAW,MAAM,CAAC;QAE7D,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,sBAAsB;QACtB,QAAQ,IAAI,WAAW,CAAC;QACxB,QAAQ,IAAI,6BAA6B,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC;QAEvE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,OAAY,EAAE,IAAS,EAAE,KAAa;QAC1D,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAElC,sBAAsB;QACtB,QAAQ,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC,OAAO,MAAM,CAAC;QAEhD,mCAAmC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CACrC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAC1C,CAAC;QAEF,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;YACzB,QAAQ,IAAI,GAAG,WAAW,CAAC,OAAO,MAAM,CAAC;QAC3C,CAAC;QAED,qBAAqB;QACrB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC7C,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAkB;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAhID,0CAgIC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./Orchestrator"), exports);
|
|
18
|
+
__exportStar(require("./TemplateManager"), exports);
|
|
19
|
+
__exportStar(require("./FileSystemHandler"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,oDAAkC;AAClC,sDAAoC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { SupabaseClient } from '@supabase/supabase-js';
|
|
2
|
+
export interface SessionData {
|
|
3
|
+
access_token: string;
|
|
4
|
+
refresh_token: string;
|
|
5
|
+
user_id: string;
|
|
6
|
+
email: string;
|
|
7
|
+
expires_at: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class DevCacheSupabaseClient {
|
|
10
|
+
private client;
|
|
11
|
+
private session;
|
|
12
|
+
/**
|
|
13
|
+
* Initialize Supabase client with environment variables
|
|
14
|
+
*/
|
|
15
|
+
initialize(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Authenticate user with email and password
|
|
18
|
+
*/
|
|
19
|
+
login(email: string, password: string): Promise<SessionData>;
|
|
20
|
+
/**
|
|
21
|
+
* Get current session
|
|
22
|
+
*/
|
|
23
|
+
getSession(): Promise<SessionData | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Refresh session token
|
|
26
|
+
*/
|
|
27
|
+
private refreshSession;
|
|
28
|
+
/**
|
|
29
|
+
* Save OAuth session (public method for OAuth flow)
|
|
30
|
+
*/
|
|
31
|
+
saveOAuthSession(session: SessionData): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Save session to file
|
|
34
|
+
*/
|
|
35
|
+
private saveSession;
|
|
36
|
+
/**
|
|
37
|
+
* Load session from file
|
|
38
|
+
*/
|
|
39
|
+
private loadSession;
|
|
40
|
+
/**
|
|
41
|
+
* Clear session
|
|
42
|
+
*/
|
|
43
|
+
clearSession(): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Get Supabase client
|
|
46
|
+
*/
|
|
47
|
+
getClient(): SupabaseClient;
|
|
48
|
+
/**
|
|
49
|
+
* Check if user is authenticated
|
|
50
|
+
*/
|
|
51
|
+
isAuthenticated(): boolean;
|
|
52
|
+
}
|
|
53
|
+
export declare function getSupabaseClient(): DevCacheSupabaseClient;
|
|
54
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/supabase/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOrE,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,OAAO,CAA4B;IAE3C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgClE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAa/C;;OAEG;YACW,cAAc;IA2B5B;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3D;;OAEG;YACW,WAAW;IAQzB;;OAEG;YACW,WAAW;IAkBzB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAcnC;;OAEG;IACH,SAAS,IAAI,cAAc;IAQ3B;;OAEG;IACH,eAAe,IAAI,OAAO;CAG3B;AAKD,wBAAgB,iBAAiB,IAAI,sBAAsB,CAK1D"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DevCacheSupabaseClient = void 0;
|
|
7
|
+
exports.getSupabaseClient = getSupabaseClient;
|
|
8
|
+
const supabase_js_1 = require("@supabase/supabase-js");
|
|
9
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const os_1 = __importDefault(require("os"));
|
|
12
|
+
const SESSION_FILE = path_1.default.join(os_1.default.homedir(), '.devcache', 'session.json');
|
|
13
|
+
class DevCacheSupabaseClient {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.client = null;
|
|
16
|
+
this.session = null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Initialize Supabase client with environment variables
|
|
20
|
+
*/
|
|
21
|
+
async initialize() {
|
|
22
|
+
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL;
|
|
23
|
+
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;
|
|
24
|
+
if (!supabaseUrl || !supabaseKey) {
|
|
25
|
+
throw new Error('Supabase credentials not found. Please set NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY environment variables.');
|
|
26
|
+
}
|
|
27
|
+
this.client = (0, supabase_js_1.createClient)(supabaseUrl, supabaseKey);
|
|
28
|
+
// Try to load existing session
|
|
29
|
+
await this.loadSession();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Authenticate user with email and password
|
|
33
|
+
*/
|
|
34
|
+
async login(email, password) {
|
|
35
|
+
if (!this.client) {
|
|
36
|
+
throw new Error('Supabase client not initialized');
|
|
37
|
+
}
|
|
38
|
+
const { data, error } = await this.client.auth.signInWithPassword({
|
|
39
|
+
email,
|
|
40
|
+
password,
|
|
41
|
+
});
|
|
42
|
+
if (error) {
|
|
43
|
+
throw new Error(`Authentication failed: ${error.message}`);
|
|
44
|
+
}
|
|
45
|
+
if (!data.session || !data.user) {
|
|
46
|
+
throw new Error('No session data returned from authentication');
|
|
47
|
+
}
|
|
48
|
+
// Store session
|
|
49
|
+
this.session = {
|
|
50
|
+
access_token: data.session.access_token,
|
|
51
|
+
refresh_token: data.session.refresh_token,
|
|
52
|
+
user_id: data.user.id,
|
|
53
|
+
email: data.user.email,
|
|
54
|
+
expires_at: data.session.expires_at || 0,
|
|
55
|
+
};
|
|
56
|
+
await this.saveSession();
|
|
57
|
+
return this.session;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get current session
|
|
61
|
+
*/
|
|
62
|
+
async getSession() {
|
|
63
|
+
if (!this.session) {
|
|
64
|
+
await this.loadSession();
|
|
65
|
+
}
|
|
66
|
+
// Check if session is expired
|
|
67
|
+
if (this.session && this.session.expires_at < Date.now() / 1000) {
|
|
68
|
+
await this.refreshSession();
|
|
69
|
+
}
|
|
70
|
+
return this.session;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Refresh session token
|
|
74
|
+
*/
|
|
75
|
+
async refreshSession() {
|
|
76
|
+
if (!this.client || !this.session) {
|
|
77
|
+
throw new Error('No session to refresh');
|
|
78
|
+
}
|
|
79
|
+
const { data, error } = await this.client.auth.refreshSession({
|
|
80
|
+
refresh_token: this.session.refresh_token,
|
|
81
|
+
});
|
|
82
|
+
if (error || !data.session) {
|
|
83
|
+
// Session expired, clear it
|
|
84
|
+
this.session = null;
|
|
85
|
+
await this.clearSession();
|
|
86
|
+
throw new Error('Session expired. Please login again.');
|
|
87
|
+
}
|
|
88
|
+
this.session = {
|
|
89
|
+
access_token: data.session.access_token,
|
|
90
|
+
refresh_token: data.session.refresh_token,
|
|
91
|
+
user_id: data.session.user.id,
|
|
92
|
+
email: data.session.user.email,
|
|
93
|
+
expires_at: data.session.expires_at || 0,
|
|
94
|
+
};
|
|
95
|
+
await this.saveSession();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Save OAuth session (public method for OAuth flow)
|
|
99
|
+
*/
|
|
100
|
+
async saveOAuthSession(session) {
|
|
101
|
+
this.session = session;
|
|
102
|
+
// Set session in Supabase client
|
|
103
|
+
if (this.client) {
|
|
104
|
+
await this.client.auth.setSession({
|
|
105
|
+
access_token: session.access_token,
|
|
106
|
+
refresh_token: session.refresh_token,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
await this.saveSession();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Save session to file
|
|
113
|
+
*/
|
|
114
|
+
async saveSession() {
|
|
115
|
+
if (!this.session)
|
|
116
|
+
return;
|
|
117
|
+
const sessionDir = path_1.default.dirname(SESSION_FILE);
|
|
118
|
+
await promises_1.default.mkdir(sessionDir, { recursive: true });
|
|
119
|
+
await promises_1.default.writeFile(SESSION_FILE, JSON.stringify(this.session, null, 2), 'utf-8');
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Load session from file
|
|
123
|
+
*/
|
|
124
|
+
async loadSession() {
|
|
125
|
+
try {
|
|
126
|
+
const content = await promises_1.default.readFile(SESSION_FILE, 'utf-8');
|
|
127
|
+
this.session = JSON.parse(content);
|
|
128
|
+
// Set session in Supabase client
|
|
129
|
+
if (this.client && this.session) {
|
|
130
|
+
await this.client.auth.setSession({
|
|
131
|
+
access_token: this.session.access_token,
|
|
132
|
+
refresh_token: this.session.refresh_token,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
// Session file doesn't exist or is invalid
|
|
138
|
+
this.session = null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Clear session
|
|
143
|
+
*/
|
|
144
|
+
async clearSession() {
|
|
145
|
+
this.session = null;
|
|
146
|
+
try {
|
|
147
|
+
await promises_1.default.unlink(SESSION_FILE);
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
// File doesn't exist, ignore
|
|
151
|
+
}
|
|
152
|
+
if (this.client) {
|
|
153
|
+
await this.client.auth.signOut();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get Supabase client
|
|
158
|
+
*/
|
|
159
|
+
getClient() {
|
|
160
|
+
if (!this.client) {
|
|
161
|
+
throw new Error('Supabase client not initialized. Call initialize() first.');
|
|
162
|
+
}
|
|
163
|
+
return this.client;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if user is authenticated
|
|
167
|
+
*/
|
|
168
|
+
isAuthenticated() {
|
|
169
|
+
return this.session !== null;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.DevCacheSupabaseClient = DevCacheSupabaseClient;
|
|
173
|
+
// Singleton instance
|
|
174
|
+
let instance = null;
|
|
175
|
+
function getSupabaseClient() {
|
|
176
|
+
if (!instance) {
|
|
177
|
+
instance = new DevCacheSupabaseClient();
|
|
178
|
+
}
|
|
179
|
+
return instance;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/supabase/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/supabase/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./client"), exports);
|
|
18
|
+
__exportStar(require("./storage"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/supabase/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface OAuthResult {
|
|
2
|
+
access_token: string;
|
|
3
|
+
refresh_token: string;
|
|
4
|
+
user_id: string;
|
|
5
|
+
email: string;
|
|
6
|
+
expires_at: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class OAuthFlow {
|
|
9
|
+
private server;
|
|
10
|
+
private resolve;
|
|
11
|
+
private reject;
|
|
12
|
+
/**
|
|
13
|
+
* Start OAuth flow
|
|
14
|
+
*/
|
|
15
|
+
startFlow(appUrl: string): Promise<OAuthResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Handle callback request
|
|
18
|
+
*/
|
|
19
|
+
private handleRequest;
|
|
20
|
+
/**
|
|
21
|
+
* Cleanup server
|
|
22
|
+
*/
|
|
23
|
+
private cleanup;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/supabase/oauth.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,MAAM,CAAyC;IAEvD;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgCrD;;OAEG;IACH,OAAO,CAAC,aAAa;IAqKrB;;OAEG;IACH,OAAO,CAAC,OAAO;CAQhB"}
|