@mathrunet/masamune_firebase_workflow_marketing 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +361 -0
- package/LICENSE +21 -0
- package/README.md +70 -0
- package/assets/fonts/NotoSans-Bold.ttf +1439 -0
- package/assets/fonts/NotoSans-Regular.ttf +1439 -0
- package/assets/fonts/NotoSans.ttf +0 -0
- package/assets/fonts/NotoSansJP-Bold.ttf +0 -0
- package/assets/fonts/NotoSansJP-Regular.ttf +0 -0
- package/assets/fonts/NotoSansKR-Bold.ttf +1439 -0
- package/assets/fonts/NotoSansKR-Regular.ttf +1439 -0
- package/assets/fonts/NotoSansKR.ttf +0 -0
- package/assets/fonts/NotoSansSC-Bold.ttf +1439 -0
- package/assets/fonts/NotoSansSC-Regular.ttf +1439 -0
- package/assets/fonts/NotoSansSC.ttf +0 -0
- package/dist/clients/app_store_client.d.ts +54 -0
- package/dist/clients/app_store_client.js +280 -0
- package/dist/clients/app_store_client.js.map +1 -0
- package/dist/clients/firebase_analytics_client.d.ts +67 -0
- package/dist/clients/firebase_analytics_client.js +411 -0
- package/dist/clients/firebase_analytics_client.js.map +1 -0
- package/dist/clients/github_content_client.d.ts +83 -0
- package/dist/clients/github_content_client.js +443 -0
- package/dist/clients/github_content_client.js.map +1 -0
- package/dist/clients/google_play_client.d.ts +49 -0
- package/dist/clients/google_play_client.js +275 -0
- package/dist/clients/google_play_client.js.map +1 -0
- package/dist/functions/analyze_github_init.d.ts +37 -0
- package/dist/functions/analyze_github_init.js +299 -0
- package/dist/functions/analyze_github_init.js.map +1 -0
- package/dist/functions/analyze_github_process.d.ts +25 -0
- package/dist/functions/analyze_github_process.js +268 -0
- package/dist/functions/analyze_github_process.js.map +1 -0
- package/dist/functions/analyze_github_summary.d.ts +32 -0
- package/dist/functions/analyze_github_summary.js +270 -0
- package/dist/functions/analyze_github_summary.js.map +1 -0
- package/dist/functions/analyze_market_research.d.ts +40 -0
- package/dist/functions/analyze_market_research.js +346 -0
- package/dist/functions/analyze_market_research.js.map +1 -0
- package/dist/functions/analyze_marketing_data.d.ts +96 -0
- package/dist/functions/analyze_marketing_data.js +990 -0
- package/dist/functions/analyze_marketing_data.js.map +1 -0
- package/dist/functions/collect_from_app_store.d.ts +25 -0
- package/dist/functions/collect_from_app_store.js +148 -0
- package/dist/functions/collect_from_app_store.js.map +1 -0
- package/dist/functions/collect_from_firebase_analytics.d.ts +25 -0
- package/dist/functions/collect_from_firebase_analytics.js +142 -0
- package/dist/functions/collect_from_firebase_analytics.js.map +1 -0
- package/dist/functions/collect_from_google_play_console.d.ts +25 -0
- package/dist/functions/collect_from_google_play_console.js +142 -0
- package/dist/functions/collect_from_google_play_console.js.map +1 -0
- package/dist/functions/generate_marketing_markdown.d.ts +89 -0
- package/dist/functions/generate_marketing_markdown.js +653 -0
- package/dist/functions/generate_marketing_markdown.js.map +1 -0
- package/dist/functions/generate_marketing_pdf.d.ts +25 -0
- package/dist/functions/generate_marketing_pdf.js +175 -0
- package/dist/functions/generate_marketing_pdf.js.map +1 -0
- package/dist/functions/research_market.d.ts +56 -0
- package/dist/functions/research_market.js +434 -0
- package/dist/functions/research_market.js.map +1 -0
- package/dist/functions.d.ts +571 -0
- package/dist/functions.js +648 -0
- package/dist/functions.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/locales/de_DE.d.ts +5 -0
- package/dist/locales/de_DE.js +111 -0
- package/dist/locales/de_DE.js.map +1 -0
- package/dist/locales/en.d.ts +5 -0
- package/dist/locales/en.js +111 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/locales/es_ES.d.ts +5 -0
- package/dist/locales/es_ES.js +111 -0
- package/dist/locales/es_ES.js.map +1 -0
- package/dist/locales/fr_FR.d.ts +5 -0
- package/dist/locales/fr_FR.js +111 -0
- package/dist/locales/fr_FR.js.map +1 -0
- package/dist/locales/id_ID.d.ts +5 -0
- package/dist/locales/id_ID.js +111 -0
- package/dist/locales/id_ID.js.map +1 -0
- package/dist/locales/index.d.ts +59 -0
- package/dist/locales/index.js +155 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/locales/ja.d.ts +5 -0
- package/dist/locales/ja.js +111 -0
- package/dist/locales/ja.js.map +1 -0
- package/dist/locales/ko_KR.d.ts +5 -0
- package/dist/locales/ko_KR.js +111 -0
- package/dist/locales/ko_KR.js.map +1 -0
- package/dist/locales/pt_PT.d.ts +5 -0
- package/dist/locales/pt_PT.js +111 -0
- package/dist/locales/pt_PT.js.map +1 -0
- package/dist/locales/ru_RU.d.ts +5 -0
- package/dist/locales/ru_RU.js +111 -0
- package/dist/locales/ru_RU.js.map +1 -0
- package/dist/locales/types.d.ts +105 -0
- package/dist/locales/types.js +8 -0
- package/dist/locales/types.js.map +1 -0
- package/dist/locales/zh_CN.d.ts +5 -0
- package/dist/locales/zh_CN.js +111 -0
- package/dist/locales/zh_CN.js.map +1 -0
- package/dist/models/app_store_data.d.ts +87 -0
- package/dist/models/app_store_data.js +8 -0
- package/dist/models/app_store_data.js.map +1 -0
- package/dist/models/chart_data.d.ts +104 -0
- package/dist/models/chart_data.js +8 -0
- package/dist/models/chart_data.js.map +1 -0
- package/dist/models/common.d.ts +42 -0
- package/dist/models/common.js +8 -0
- package/dist/models/common.js.map +1 -0
- package/dist/models/firebase_analytics_data.d.ts +134 -0
- package/dist/models/firebase_analytics_data.js +8 -0
- package/dist/models/firebase_analytics_data.js.map +1 -0
- package/dist/models/github_analysis_data.d.ts +266 -0
- package/dist/models/github_analysis_data.js +101 -0
- package/dist/models/github_analysis_data.js.map +1 -0
- package/dist/models/google_play_data.d.ts +115 -0
- package/dist/models/google_play_data.js +8 -0
- package/dist/models/google_play_data.js.map +1 -0
- package/dist/models/index.d.ts +14 -0
- package/dist/models/index.js +36 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/market_research_data.d.ts +259 -0
- package/dist/models/market_research_data.js +8 -0
- package/dist/models/market_research_data.js.map +1 -0
- package/dist/models/marketing_analysis_data.d.ts +200 -0
- package/dist/models/marketing_analysis_data.js +8 -0
- package/dist/models/marketing_analysis_data.js.map +1 -0
- package/dist/models/pdf_data.d.ts +112 -0
- package/dist/models/pdf_data.js +8 -0
- package/dist/models/pdf_data.js.map +1 -0
- package/dist/services/chart_service.d.ts +54 -0
- package/dist/services/chart_service.js +436 -0
- package/dist/services/chart_service.js.map +1 -0
- package/dist/services/github_analysis_service.d.ts +73 -0
- package/dist/services/github_analysis_service.js +488 -0
- package/dist/services/github_analysis_service.js.map +1 -0
- package/dist/services/pdf_service.d.ts +112 -0
- package/dist/services/pdf_service.js +1397 -0
- package/dist/services/pdf_service.js.map +1 -0
- package/dist/utils/github_analysis_storage.d.ts +88 -0
- package/dist/utils/github_analysis_storage.js +154 -0
- package/dist/utils/github_analysis_storage.js.map +1 -0
- package/package.json +64 -0
- package/scripts/cleanup_test_data.ts +304 -0
- package/scripts/list_test_data.ts +85 -0
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Content API Client
|
|
4
|
+
*
|
|
5
|
+
* Fetches repository contents for code analysis:
|
|
6
|
+
* - Directory listings
|
|
7
|
+
* - File contents
|
|
8
|
+
* - Repository tree structure
|
|
9
|
+
*
|
|
10
|
+
* @see https://docs.github.com/en/rest/repos/contents
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.GitHubContentClient = void 0;
|
|
14
|
+
const models_1 = require("../models");
|
|
15
|
+
/**
|
|
16
|
+
* Maximum retries for API calls.
|
|
17
|
+
*/
|
|
18
|
+
const MAX_RETRIES = 3;
|
|
19
|
+
/**
|
|
20
|
+
* Initial retry delay in milliseconds.
|
|
21
|
+
*/
|
|
22
|
+
const INITIAL_RETRY_DELAY = 1000;
|
|
23
|
+
/**
|
|
24
|
+
* GitHub API base URL.
|
|
25
|
+
*/
|
|
26
|
+
const GITHUB_API_BASE = "https://api.github.com";
|
|
27
|
+
/**
|
|
28
|
+
* GitHub API error class.
|
|
29
|
+
*/
|
|
30
|
+
class GitHubApiError extends Error {
|
|
31
|
+
status;
|
|
32
|
+
headers;
|
|
33
|
+
constructor(message, status, headers) {
|
|
34
|
+
super(message);
|
|
35
|
+
this.status = status;
|
|
36
|
+
this.headers = headers;
|
|
37
|
+
this.name = "GitHubApiError";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* GitHub Content API Client for repository analysis.
|
|
42
|
+
*/
|
|
43
|
+
class GitHubContentClient {
|
|
44
|
+
token;
|
|
45
|
+
owner;
|
|
46
|
+
repo;
|
|
47
|
+
constructor(config) {
|
|
48
|
+
this.token = config.token;
|
|
49
|
+
const [owner, repo] = config.repo.split("/");
|
|
50
|
+
if (!owner || !repo) {
|
|
51
|
+
throw new Error(`Invalid repository format: ${config.repo}. Expected "owner/repo"`);
|
|
52
|
+
}
|
|
53
|
+
this.owner = owner;
|
|
54
|
+
this.repo = repo;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Make a GitHub API request.
|
|
58
|
+
*/
|
|
59
|
+
async request(endpoint) {
|
|
60
|
+
const response = await fetch(`${GITHUB_API_BASE}${endpoint}`, {
|
|
61
|
+
headers: {
|
|
62
|
+
"Authorization": `Bearer ${this.token}`,
|
|
63
|
+
"Accept": "application/vnd.github.v3+json",
|
|
64
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
if (!response.ok) {
|
|
68
|
+
throw new GitHubApiError(`GitHub API error: ${response.status} ${response.statusText}`, response.status, response.headers);
|
|
69
|
+
}
|
|
70
|
+
return response.json();
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Execute with retry logic.
|
|
74
|
+
*/
|
|
75
|
+
async withRetry(operation, retries = MAX_RETRIES) {
|
|
76
|
+
let lastError = null;
|
|
77
|
+
for (let i = 0; i < retries; i++) {
|
|
78
|
+
try {
|
|
79
|
+
return await operation();
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
lastError = error;
|
|
83
|
+
// Don't retry on 404 (not found)
|
|
84
|
+
if (error.status === 404) {
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
// Rate limit - wait longer
|
|
88
|
+
if (error.status === 403 && error.headers?.get?.("x-ratelimit-remaining") === "0") {
|
|
89
|
+
const resetTime = parseInt(error.headers?.get?.("x-ratelimit-reset") || "0", 10);
|
|
90
|
+
const waitTime = resetTime ? (resetTime * 1000 - Date.now()) : 60000;
|
|
91
|
+
console.warn(`Rate limited. Waiting ${Math.ceil(waitTime / 1000)}s before retry...`);
|
|
92
|
+
await new Promise(resolve => setTimeout(resolve, Math.min(waitTime, 60000)));
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
// Exponential backoff for other errors
|
|
96
|
+
if (i < retries - 1) {
|
|
97
|
+
const delay = INITIAL_RETRY_DELAY * Math.pow(2, i);
|
|
98
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
throw lastError || new Error("Operation failed after retries");
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get repository information.
|
|
106
|
+
*/
|
|
107
|
+
async getRepositoryInfo() {
|
|
108
|
+
return this.withRetry(async () => {
|
|
109
|
+
const data = await this.request(`/repos/${this.owner}/${this.repo}`);
|
|
110
|
+
return {
|
|
111
|
+
defaultBranch: data.default_branch,
|
|
112
|
+
fullName: data.full_name,
|
|
113
|
+
description: data.description,
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get directory contents at a specific path.
|
|
119
|
+
*/
|
|
120
|
+
async getDirectoryContents(path = "") {
|
|
121
|
+
return this.withRetry(async () => {
|
|
122
|
+
const endpoint = path
|
|
123
|
+
? `/repos/${this.owner}/${this.repo}/contents/${path}`
|
|
124
|
+
: `/repos/${this.owner}/${this.repo}/contents`;
|
|
125
|
+
const data = await this.request(endpoint);
|
|
126
|
+
if (!Array.isArray(data)) {
|
|
127
|
+
throw new Error(`Path is not a directory: ${path}`);
|
|
128
|
+
}
|
|
129
|
+
return data.map(item => ({
|
|
130
|
+
name: item.name,
|
|
131
|
+
path: item.path,
|
|
132
|
+
sha: item.sha,
|
|
133
|
+
size: item.size || 0,
|
|
134
|
+
type: item.type,
|
|
135
|
+
url: item.url,
|
|
136
|
+
downloadUrl: item.download_url || undefined,
|
|
137
|
+
}));
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get file content (for files under 1MB).
|
|
142
|
+
*/
|
|
143
|
+
async getFileContent(path) {
|
|
144
|
+
return this.withRetry(async () => {
|
|
145
|
+
const data = await this.request(`/repos/${this.owner}/${this.repo}/contents/${path}`);
|
|
146
|
+
if (Array.isArray(data)) {
|
|
147
|
+
throw new Error(`Path is a directory: ${path}`);
|
|
148
|
+
}
|
|
149
|
+
if (data.type !== "file") {
|
|
150
|
+
throw new Error(`Path is not a file: ${path} (type: ${data.type})`);
|
|
151
|
+
}
|
|
152
|
+
if (!data.content) {
|
|
153
|
+
throw new Error(`No content available for: ${path}`);
|
|
154
|
+
}
|
|
155
|
+
// Content is base64 encoded
|
|
156
|
+
return Buffer.from(data.content, "base64").toString("utf-8");
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get file content via Blob API (for larger files).
|
|
161
|
+
*/
|
|
162
|
+
async getFileContentViaBlob(sha) {
|
|
163
|
+
return this.withRetry(async () => {
|
|
164
|
+
const data = await this.request(`/repos/${this.owner}/${this.repo}/git/blobs/${sha}`);
|
|
165
|
+
if (data.encoding === "base64") {
|
|
166
|
+
return Buffer.from(data.content, "base64").toString("utf-8");
|
|
167
|
+
}
|
|
168
|
+
return data.content;
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get repository tree recursively.
|
|
173
|
+
*/
|
|
174
|
+
async getRepositoryTree(basePath = "") {
|
|
175
|
+
return this.withRetry(async () => {
|
|
176
|
+
const repoInfo = await this.getRepositoryInfo();
|
|
177
|
+
const data = await this.request(`/repos/${this.owner}/${this.repo}/git/trees/${repoInfo.defaultBranch}?recursive=1`);
|
|
178
|
+
let items = data.tree.map(item => ({
|
|
179
|
+
path: item.path || "",
|
|
180
|
+
mode: item.mode || "",
|
|
181
|
+
type: item.type,
|
|
182
|
+
sha: item.sha || "",
|
|
183
|
+
size: item.size,
|
|
184
|
+
url: item.url || "",
|
|
185
|
+
}));
|
|
186
|
+
// Filter by base path if specified
|
|
187
|
+
if (basePath) {
|
|
188
|
+
const normalizedBase = basePath.endsWith("/") ? basePath : basePath + "/";
|
|
189
|
+
items = items.filter(item => item.path.startsWith(normalizedBase) || item.path === basePath);
|
|
190
|
+
}
|
|
191
|
+
return items;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get filtered file list for analysis.
|
|
196
|
+
* Excludes binary files, generated files, and common non-source directories.
|
|
197
|
+
*/
|
|
198
|
+
async getFilteredFileList(basePath = "") {
|
|
199
|
+
const tree = await this.getRepositoryTree(basePath);
|
|
200
|
+
return tree
|
|
201
|
+
.filter(item => item.type === "blob")
|
|
202
|
+
.map(item => item.path)
|
|
203
|
+
.filter(path => this.shouldIncludeFile(path));
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Check if a file should be included in analysis.
|
|
207
|
+
*/
|
|
208
|
+
shouldIncludeFile(path) {
|
|
209
|
+
const parts = path.split("/");
|
|
210
|
+
// Check excluded directories
|
|
211
|
+
for (const part of parts) {
|
|
212
|
+
if (models_1.EXCLUDED_PATHS.includes(part)) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Check excluded patterns
|
|
217
|
+
for (const pattern of models_1.EXCLUDED_PATTERNS) {
|
|
218
|
+
if (pattern.test(path)) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Check binary extensions
|
|
223
|
+
const ext = this.getExtension(path);
|
|
224
|
+
if (models_1.BINARY_EXTENSIONS.includes(ext.toLowerCase())) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Get file extension.
|
|
231
|
+
*/
|
|
232
|
+
getExtension(path) {
|
|
233
|
+
const lastDot = path.lastIndexOf(".");
|
|
234
|
+
if (lastDot === -1)
|
|
235
|
+
return "";
|
|
236
|
+
return path.substring(lastDot);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get folder paths from file list.
|
|
240
|
+
*/
|
|
241
|
+
getFolderPaths(filePaths) {
|
|
242
|
+
const folders = new Set();
|
|
243
|
+
for (const filePath of filePaths) {
|
|
244
|
+
const parts = filePath.split("/");
|
|
245
|
+
// Build all parent folder paths
|
|
246
|
+
for (let i = 1; i < parts.length; i++) {
|
|
247
|
+
folders.add(parts.slice(0, i).join("/"));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Sort by depth (deepest first for bottom-up processing)
|
|
251
|
+
return Array.from(folders).sort((a, b) => {
|
|
252
|
+
const depthA = a.split("/").length;
|
|
253
|
+
const depthB = b.split("/").length;
|
|
254
|
+
return depthB - depthA;
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get files in a specific folder.
|
|
259
|
+
*/
|
|
260
|
+
getFilesInFolder(filePaths, folderPath) {
|
|
261
|
+
const prefix = folderPath ? folderPath + "/" : "";
|
|
262
|
+
return filePaths.filter(path => {
|
|
263
|
+
if (!path.startsWith(prefix))
|
|
264
|
+
return false;
|
|
265
|
+
// Only direct children (no nested folders)
|
|
266
|
+
const relativePath = path.substring(prefix.length);
|
|
267
|
+
return !relativePath.includes("/");
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Detect framework from repository.
|
|
272
|
+
*/
|
|
273
|
+
async detectFramework(basePath = "") {
|
|
274
|
+
const tree = await this.getRepositoryTree(basePath);
|
|
275
|
+
const files = tree.filter(t => t.type === "blob").map(t => t.path);
|
|
276
|
+
const dirs = tree.filter(t => t.type === "tree").map(t => t.path);
|
|
277
|
+
const prefix = basePath ? basePath + "/" : "";
|
|
278
|
+
// Check for Flutter (pubspec.yaml)
|
|
279
|
+
const pubspecPath = files.find(f => f === prefix + "pubspec.yaml" || f === "pubspec.yaml");
|
|
280
|
+
if (pubspecPath) {
|
|
281
|
+
const platforms = [];
|
|
282
|
+
if (dirs.some(d => d === prefix + "android" || d === "android"))
|
|
283
|
+
platforms.push("android");
|
|
284
|
+
if (dirs.some(d => d === prefix + "ios" || d === "ios"))
|
|
285
|
+
platforms.push("ios");
|
|
286
|
+
if (dirs.some(d => d === prefix + "web" || d === "web"))
|
|
287
|
+
platforms.push("web");
|
|
288
|
+
if (dirs.some(d => d === prefix + "macos" || d === "macos"))
|
|
289
|
+
platforms.push("macos");
|
|
290
|
+
if (dirs.some(d => d === prefix + "windows" || d === "windows"))
|
|
291
|
+
platforms.push("windows");
|
|
292
|
+
if (dirs.some(d => d === prefix + "linux" || d === "linux"))
|
|
293
|
+
platforms.push("linux");
|
|
294
|
+
try {
|
|
295
|
+
const content = await this.getFileContent(pubspecPath);
|
|
296
|
+
return {
|
|
297
|
+
framework: "flutter",
|
|
298
|
+
platforms: platforms.length > 0 ? platforms : ["android", "ios"],
|
|
299
|
+
configFile: pubspecPath,
|
|
300
|
+
configContent: content,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
return {
|
|
305
|
+
framework: "flutter",
|
|
306
|
+
platforms: platforms.length > 0 ? platforms : ["android", "ios"],
|
|
307
|
+
configFile: pubspecPath,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// Check for Node.js (package.json)
|
|
312
|
+
const packagePath = files.find(f => f === prefix + "package.json" || f === "package.json");
|
|
313
|
+
if (packagePath) {
|
|
314
|
+
try {
|
|
315
|
+
const content = await this.getFileContent(packagePath);
|
|
316
|
+
const pkg = JSON.parse(content);
|
|
317
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
318
|
+
// React Native / Expo
|
|
319
|
+
if (deps["react-native"] || deps["expo"]) {
|
|
320
|
+
return {
|
|
321
|
+
framework: deps["expo"] ? "expo" : "react-native",
|
|
322
|
+
platforms: ["android", "ios"],
|
|
323
|
+
configFile: packagePath,
|
|
324
|
+
configContent: content,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
// Next.js
|
|
328
|
+
if (deps["next"]) {
|
|
329
|
+
return {
|
|
330
|
+
framework: "nextjs",
|
|
331
|
+
platforms: ["web"],
|
|
332
|
+
configFile: packagePath,
|
|
333
|
+
configContent: content,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
// React
|
|
337
|
+
if (deps["react"]) {
|
|
338
|
+
return {
|
|
339
|
+
framework: "react",
|
|
340
|
+
platforms: ["web"],
|
|
341
|
+
configFile: packagePath,
|
|
342
|
+
configContent: content,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
// Vue
|
|
346
|
+
if (deps["vue"]) {
|
|
347
|
+
return {
|
|
348
|
+
framework: "vue",
|
|
349
|
+
platforms: ["web"],
|
|
350
|
+
configFile: packagePath,
|
|
351
|
+
configContent: content,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
// Generic Node.js
|
|
355
|
+
return {
|
|
356
|
+
framework: "nodejs",
|
|
357
|
+
platforms: ["server"],
|
|
358
|
+
configFile: packagePath,
|
|
359
|
+
configContent: content,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
catch {
|
|
363
|
+
return {
|
|
364
|
+
framework: "nodejs",
|
|
365
|
+
platforms: ["server"],
|
|
366
|
+
configFile: packagePath,
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
// Check for Python
|
|
371
|
+
const pythonConfig = files.find(f => f === prefix + "pyproject.toml" ||
|
|
372
|
+
f === prefix + "setup.py" ||
|
|
373
|
+
f === prefix + "requirements.txt" ||
|
|
374
|
+
f === "pyproject.toml" ||
|
|
375
|
+
f === "setup.py" ||
|
|
376
|
+
f === "requirements.txt");
|
|
377
|
+
if (pythonConfig) {
|
|
378
|
+
try {
|
|
379
|
+
const content = await this.getFileContent(pythonConfig);
|
|
380
|
+
return {
|
|
381
|
+
framework: "python",
|
|
382
|
+
platforms: ["server"],
|
|
383
|
+
configFile: pythonConfig,
|
|
384
|
+
configContent: content,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
catch {
|
|
388
|
+
return {
|
|
389
|
+
framework: "python",
|
|
390
|
+
platforms: ["server"],
|
|
391
|
+
configFile: pythonConfig,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// Check for Rust
|
|
396
|
+
const cargoPath = files.find(f => f === prefix + "Cargo.toml" || f === "Cargo.toml");
|
|
397
|
+
if (cargoPath) {
|
|
398
|
+
try {
|
|
399
|
+
const content = await this.getFileContent(cargoPath);
|
|
400
|
+
return {
|
|
401
|
+
framework: "rust",
|
|
402
|
+
platforms: ["native"],
|
|
403
|
+
configFile: cargoPath,
|
|
404
|
+
configContent: content,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
catch {
|
|
408
|
+
return {
|
|
409
|
+
framework: "rust",
|
|
410
|
+
platforms: ["native"],
|
|
411
|
+
configFile: cargoPath,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
// Check for Go
|
|
416
|
+
const goModPath = files.find(f => f === prefix + "go.mod" || f === "go.mod");
|
|
417
|
+
if (goModPath) {
|
|
418
|
+
try {
|
|
419
|
+
const content = await this.getFileContent(goModPath);
|
|
420
|
+
return {
|
|
421
|
+
framework: "go",
|
|
422
|
+
platforms: ["server"],
|
|
423
|
+
configFile: goModPath,
|
|
424
|
+
configContent: content,
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
catch {
|
|
428
|
+
return {
|
|
429
|
+
framework: "go",
|
|
430
|
+
platforms: ["server"],
|
|
431
|
+
configFile: goModPath,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
// Unknown framework
|
|
436
|
+
return {
|
|
437
|
+
framework: "unknown",
|
|
438
|
+
platforms: [],
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
exports.GitHubContentClient = GitHubContentClient;
|
|
443
|
+
//# sourceMappingURL=github_content_client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github_content_client.js","sourceRoot":"","sources":["../../src/clients/github_content_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Play Developer API Client
|
|
3
|
+
*
|
|
4
|
+
* Collects app statistics from Google Play Console:
|
|
5
|
+
* - Install/uninstall statistics
|
|
6
|
+
* - Ratings and reviews
|
|
7
|
+
* - Revenue data
|
|
8
|
+
*
|
|
9
|
+
* @see https://developers.google.com/android-publisher
|
|
10
|
+
*/
|
|
11
|
+
import { DateRange, GooglePlayData, GooglePlayClientConfig, GooglePlayAppInfo, GooglePlayInstallStats, GooglePlayRatings, GooglePlayReviewsResponse, GooglePlayRevenueStats, GetReviewsOptions } from "../models/google_play_data";
|
|
12
|
+
/**
|
|
13
|
+
* Google Play Developer API Client.
|
|
14
|
+
*/
|
|
15
|
+
export declare class GooglePlayClient {
|
|
16
|
+
private androidPublisher;
|
|
17
|
+
private packageName;
|
|
18
|
+
constructor(config: GooglePlayClientConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Get app information.
|
|
21
|
+
*/
|
|
22
|
+
getAppInfo(): Promise<GooglePlayAppInfo>;
|
|
23
|
+
/**
|
|
24
|
+
* Get install statistics for a date range.
|
|
25
|
+
*
|
|
26
|
+
* Note: Google Play Console API doesn't directly provide install stats via API.
|
|
27
|
+
* This requires using Google Play Console Reports (CSV) or Cloud Storage exports.
|
|
28
|
+
* For now, we return placeholder data structure.
|
|
29
|
+
*/
|
|
30
|
+
getInstallStats(dateRange: DateRange): Promise<GooglePlayInstallStats>;
|
|
31
|
+
/**
|
|
32
|
+
* Get ratings summary.
|
|
33
|
+
*/
|
|
34
|
+
getRatings(): Promise<GooglePlayRatings>;
|
|
35
|
+
/**
|
|
36
|
+
* Get reviews.
|
|
37
|
+
*/
|
|
38
|
+
getReviews(options?: GetReviewsOptions): Promise<GooglePlayReviewsResponse>;
|
|
39
|
+
/**
|
|
40
|
+
* Get revenue statistics for a date range.
|
|
41
|
+
*
|
|
42
|
+
* Note: Revenue data requires Google Play Console Reports or BigQuery exports.
|
|
43
|
+
*/
|
|
44
|
+
getRevenueStats(dateRange: DateRange): Promise<GooglePlayRevenueStats>;
|
|
45
|
+
/**
|
|
46
|
+
* Collect all Google Play data for a date range.
|
|
47
|
+
*/
|
|
48
|
+
collectAllData(dateRange: DateRange): Promise<GooglePlayData>;
|
|
49
|
+
}
|