@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,275 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Google Play Developer API Client
|
|
4
|
+
*
|
|
5
|
+
* Collects app statistics from Google Play Console:
|
|
6
|
+
* - Install/uninstall statistics
|
|
7
|
+
* - Ratings and reviews
|
|
8
|
+
* - Revenue data
|
|
9
|
+
*
|
|
10
|
+
* @see https://developers.google.com/android-publisher
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
+
}) : function(o, v) {
|
|
26
|
+
o["default"] = v;
|
|
27
|
+
});
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.GooglePlayClient = void 0;
|
|
47
|
+
const googleapis_1 = require("googleapis");
|
|
48
|
+
const fs = __importStar(require("fs"));
|
|
49
|
+
/**
|
|
50
|
+
* Google Play Developer API Client.
|
|
51
|
+
*/
|
|
52
|
+
class GooglePlayClient {
|
|
53
|
+
androidPublisher;
|
|
54
|
+
packageName;
|
|
55
|
+
constructor(config) {
|
|
56
|
+
// Validate service account file exists
|
|
57
|
+
if (!fs.existsSync(config.serviceAccountPath)) {
|
|
58
|
+
throw new Error(`Service account file not found: ${config.serviceAccountPath}`);
|
|
59
|
+
}
|
|
60
|
+
// Load service account credentials
|
|
61
|
+
const serviceAccount = JSON.parse(fs.readFileSync(config.serviceAccountPath, "utf-8"));
|
|
62
|
+
// Create JWT auth client
|
|
63
|
+
const auth = new googleapis_1.google.auth.JWT({
|
|
64
|
+
email: serviceAccount.client_email,
|
|
65
|
+
key: serviceAccount.private_key,
|
|
66
|
+
scopes: ["https://www.googleapis.com/auth/androidpublisher"],
|
|
67
|
+
});
|
|
68
|
+
// Initialize Android Publisher API
|
|
69
|
+
this.androidPublisher = googleapis_1.google.androidpublisher({
|
|
70
|
+
version: "v3",
|
|
71
|
+
auth: auth,
|
|
72
|
+
});
|
|
73
|
+
this.packageName = config.packageName;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get app information.
|
|
77
|
+
*/
|
|
78
|
+
async getAppInfo() {
|
|
79
|
+
const response = await this.androidPublisher.edits.insert({
|
|
80
|
+
packageName: this.packageName,
|
|
81
|
+
});
|
|
82
|
+
const editId = response.data.id;
|
|
83
|
+
try {
|
|
84
|
+
const listingsResponse = await this.androidPublisher.edits.listings.list({
|
|
85
|
+
packageName: this.packageName,
|
|
86
|
+
editId: editId,
|
|
87
|
+
});
|
|
88
|
+
const listings = listingsResponse.data.listings || [];
|
|
89
|
+
const defaultListing = listings.find((l) => l.language === "en-US") || listings[0];
|
|
90
|
+
return {
|
|
91
|
+
packageName: this.packageName,
|
|
92
|
+
title: defaultListing?.title || this.packageName,
|
|
93
|
+
description: defaultListing?.fullDescription || undefined,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
// Clean up the edit
|
|
98
|
+
await this.androidPublisher.edits.delete({
|
|
99
|
+
packageName: this.packageName,
|
|
100
|
+
editId: editId,
|
|
101
|
+
}).catch(() => {
|
|
102
|
+
// Ignore delete errors
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get install statistics for a date range.
|
|
108
|
+
*
|
|
109
|
+
* Note: Google Play Console API doesn't directly provide install stats via API.
|
|
110
|
+
* This requires using Google Play Console Reports (CSV) or Cloud Storage exports.
|
|
111
|
+
* For now, we return placeholder data structure.
|
|
112
|
+
*/
|
|
113
|
+
async getInstallStats(dateRange) {
|
|
114
|
+
// Google Play doesn't have a direct API for install stats
|
|
115
|
+
// Stats need to be accessed via:
|
|
116
|
+
// 1. Google Play Console web interface
|
|
117
|
+
// 2. Cloud Storage exports (if configured)
|
|
118
|
+
// 3. BigQuery exports (if configured)
|
|
119
|
+
// Return structure with zeros - actual implementation would need
|
|
120
|
+
// Cloud Storage or BigQuery integration
|
|
121
|
+
console.warn("GooglePlayClient.getInstallStats: Direct API not available. " +
|
|
122
|
+
"Configure Cloud Storage or BigQuery exports for actual data.");
|
|
123
|
+
return {
|
|
124
|
+
totalInstalls: 0,
|
|
125
|
+
totalUninstalls: 0,
|
|
126
|
+
activeInstalls: 0,
|
|
127
|
+
dailyStats: [],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get ratings summary.
|
|
132
|
+
*/
|
|
133
|
+
async getRatings() {
|
|
134
|
+
// Fetch reviews to calculate ratings
|
|
135
|
+
// Note: This is an approximation based on available reviews
|
|
136
|
+
const reviews = await this.getReviews({ maxResults: 100 });
|
|
137
|
+
if (reviews.reviews.length === 0) {
|
|
138
|
+
return {
|
|
139
|
+
averageRating: 0,
|
|
140
|
+
totalRatings: 0,
|
|
141
|
+
ratingDistribution: { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0 },
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
const distribution = { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0 };
|
|
145
|
+
let totalRating = 0;
|
|
146
|
+
for (const review of reviews.reviews) {
|
|
147
|
+
const rating = Math.round(review.rating);
|
|
148
|
+
if (rating >= 1 && rating <= 5) {
|
|
149
|
+
distribution[rating]++;
|
|
150
|
+
totalRating += review.rating;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const totalRatings = reviews.reviews.length;
|
|
154
|
+
const averageRating = totalRatings > 0 ? totalRating / totalRatings : 0;
|
|
155
|
+
return {
|
|
156
|
+
averageRating: Math.round(averageRating * 10) / 10,
|
|
157
|
+
totalRatings,
|
|
158
|
+
ratingDistribution: distribution,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get reviews.
|
|
163
|
+
*/
|
|
164
|
+
async getReviews(options = {}) {
|
|
165
|
+
const response = await this.androidPublisher.reviews.list({
|
|
166
|
+
packageName: this.packageName,
|
|
167
|
+
maxResults: options.maxResults || 100,
|
|
168
|
+
token: options.pageToken,
|
|
169
|
+
translationLanguage: options.translationLanguage,
|
|
170
|
+
});
|
|
171
|
+
const reviews = (response.data.reviews || []).map((review) => {
|
|
172
|
+
const comment = review.comments?.[0]?.userComment;
|
|
173
|
+
return {
|
|
174
|
+
reviewId: review.reviewId || "",
|
|
175
|
+
authorName: review.authorName || "Anonymous",
|
|
176
|
+
rating: comment?.starRating || 0,
|
|
177
|
+
text: comment?.text || "",
|
|
178
|
+
timestamp: comment?.lastModified?.seconds
|
|
179
|
+
? new Date(parseInt(comment.lastModified.seconds) * 1000)
|
|
180
|
+
: new Date(),
|
|
181
|
+
language: comment?.reviewerLanguage || "unknown",
|
|
182
|
+
deviceName: comment?.device || undefined,
|
|
183
|
+
appVersionCode: comment?.appVersionCode || undefined,
|
|
184
|
+
appVersionName: comment?.appVersionName || undefined,
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
return {
|
|
188
|
+
reviews,
|
|
189
|
+
nextPageToken: response.data.tokenPagination?.nextPageToken || undefined,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get revenue statistics for a date range.
|
|
194
|
+
*
|
|
195
|
+
* Note: Revenue data requires Google Play Console Reports or BigQuery exports.
|
|
196
|
+
*/
|
|
197
|
+
async getRevenueStats(dateRange) {
|
|
198
|
+
// Revenue data is not available via direct API
|
|
199
|
+
// Requires Cloud Storage or BigQuery exports configuration
|
|
200
|
+
console.warn("GooglePlayClient.getRevenueStats: Direct API not available. " +
|
|
201
|
+
"Configure Cloud Storage or BigQuery exports for actual data.");
|
|
202
|
+
return {
|
|
203
|
+
totalRevenue: 0,
|
|
204
|
+
currency: "USD",
|
|
205
|
+
dailyRevenue: [],
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Collect all Google Play data for a date range.
|
|
210
|
+
*/
|
|
211
|
+
async collectAllData(dateRange) {
|
|
212
|
+
const [installStats, ratings, reviewsResponse, revenueStats] = await Promise.all([
|
|
213
|
+
this.getInstallStats(dateRange).catch((err) => {
|
|
214
|
+
console.error("Failed to get install stats:", err.message);
|
|
215
|
+
return {
|
|
216
|
+
totalInstalls: 0,
|
|
217
|
+
totalUninstalls: 0,
|
|
218
|
+
activeInstalls: 0,
|
|
219
|
+
dailyStats: [],
|
|
220
|
+
};
|
|
221
|
+
}),
|
|
222
|
+
this.getRatings().catch((err) => {
|
|
223
|
+
console.error("Failed to get ratings:", err.message);
|
|
224
|
+
return {
|
|
225
|
+
averageRating: 0,
|
|
226
|
+
totalRatings: 0,
|
|
227
|
+
ratingDistribution: { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0 },
|
|
228
|
+
};
|
|
229
|
+
}),
|
|
230
|
+
this.getReviews({ maxResults: 50 }).catch((err) => {
|
|
231
|
+
console.error("Failed to get reviews:", err.message);
|
|
232
|
+
return { reviews: [] };
|
|
233
|
+
}),
|
|
234
|
+
this.getRevenueStats(dateRange).catch((err) => {
|
|
235
|
+
console.error("Failed to get revenue stats:", err.message);
|
|
236
|
+
return { totalRevenue: 0, currency: "USD", dailyRevenue: [] };
|
|
237
|
+
}),
|
|
238
|
+
]);
|
|
239
|
+
// Convert rating distribution format
|
|
240
|
+
const ratingDistribution = {
|
|
241
|
+
star1: ratings.ratingDistribution[1],
|
|
242
|
+
star2: ratings.ratingDistribution[2],
|
|
243
|
+
star3: ratings.ratingDistribution[3],
|
|
244
|
+
star4: ratings.ratingDistribution[4],
|
|
245
|
+
star5: ratings.ratingDistribution[5],
|
|
246
|
+
};
|
|
247
|
+
// Convert reviews format
|
|
248
|
+
const recentReviews = reviewsResponse.reviews.map((r) => ({
|
|
249
|
+
id: r.reviewId,
|
|
250
|
+
rating: r.rating,
|
|
251
|
+
text: r.text,
|
|
252
|
+
authorName: r.authorName,
|
|
253
|
+
date: r.timestamp.toISOString().split("T")[0],
|
|
254
|
+
language: r.language,
|
|
255
|
+
}));
|
|
256
|
+
return {
|
|
257
|
+
packageName: this.packageName,
|
|
258
|
+
dateRange: dateRange,
|
|
259
|
+
totalInstalls: installStats.totalInstalls,
|
|
260
|
+
activeInstalls: installStats.activeInstalls,
|
|
261
|
+
newInstalls: installStats.totalInstalls,
|
|
262
|
+
uninstalls: installStats.totalUninstalls,
|
|
263
|
+
updateInstalls: installStats.dailyStats.reduce((sum, d) => sum + d.updates, 0),
|
|
264
|
+
averageRating: ratings.averageRating,
|
|
265
|
+
totalRatings: ratings.totalRatings,
|
|
266
|
+
ratingDistribution: ratingDistribution,
|
|
267
|
+
recentReviews: recentReviews,
|
|
268
|
+
totalRevenue: revenueStats.totalRevenue,
|
|
269
|
+
revenueCurrency: revenueStats.currency,
|
|
270
|
+
collectedAt: new Date(),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
exports.GooglePlayClient = GooglePlayClient;
|
|
275
|
+
//# sourceMappingURL=google_play_client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google_play_client.js","sourceRoot":"","sources":["../../src/clients/google_play_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Analysis Init Function
|
|
3
|
+
*
|
|
4
|
+
* Initializes GitHub repository analysis:
|
|
5
|
+
* 1. Scans repository structure
|
|
6
|
+
* 2. Detects framework
|
|
7
|
+
* 3. Creates file list for processing
|
|
8
|
+
* 4. Dynamically updates task.actions
|
|
9
|
+
* 5. Saves initial state to Firebase Storage (as JSON)
|
|
10
|
+
*/
|
|
11
|
+
import { Action, WorkflowProcessFunctionBase, WorkflowContext } from "@mathrunet/masamune_firebase_workflow";
|
|
12
|
+
import "@mathrunet/masamune";
|
|
13
|
+
/**
|
|
14
|
+
* A function for initializing GitHub repository analysis.
|
|
15
|
+
*
|
|
16
|
+
* GitHubリポジトリ解析を初期化するためのFunction。
|
|
17
|
+
*/
|
|
18
|
+
export declare class AnalyzeGitHubInit extends WorkflowProcessFunctionBase {
|
|
19
|
+
/**
|
|
20
|
+
* The ID of the function.
|
|
21
|
+
*/
|
|
22
|
+
id: string;
|
|
23
|
+
/**
|
|
24
|
+
* Process the initialization.
|
|
25
|
+
*/
|
|
26
|
+
process(context: WorkflowContext): Promise<Action>;
|
|
27
|
+
/**
|
|
28
|
+
* Update task.actions to include process and summary actions.
|
|
29
|
+
*/
|
|
30
|
+
private updateTaskActions;
|
|
31
|
+
/**
|
|
32
|
+
* Group files by folder for batch processing.
|
|
33
|
+
* Each folder becomes one batch (one AI call).
|
|
34
|
+
* Multiple small folders may be grouped together.
|
|
35
|
+
*/
|
|
36
|
+
private groupFilesByFolder;
|
|
37
|
+
}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Analysis Init Function
|
|
4
|
+
*
|
|
5
|
+
* Initializes GitHub repository analysis:
|
|
6
|
+
* 1. Scans repository structure
|
|
7
|
+
* 2. Detects framework
|
|
8
|
+
* 3. Creates file list for processing
|
|
9
|
+
* 4. Dynamically updates task.actions
|
|
10
|
+
* 5. Saves initial state to Firebase Storage (as JSON)
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
+
}) : function(o, v) {
|
|
26
|
+
o["default"] = v;
|
|
27
|
+
});
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.AnalyzeGitHubInit = void 0;
|
|
47
|
+
const masamune_firebase_workflow_1 = require("@mathrunet/masamune_firebase_workflow");
|
|
48
|
+
const admin = __importStar(require("firebase-admin"));
|
|
49
|
+
const github_content_client_1 = require("../clients/github_content_client");
|
|
50
|
+
const github_analysis_storage_1 = require("../utils/github_analysis_storage");
|
|
51
|
+
require("@mathrunet/masamune");
|
|
52
|
+
/**
|
|
53
|
+
* A function for initializing GitHub repository analysis.
|
|
54
|
+
*
|
|
55
|
+
* GitHubリポジトリ解析を初期化するためのFunction。
|
|
56
|
+
*/
|
|
57
|
+
class AnalyzeGitHubInit extends masamune_firebase_workflow_1.WorkflowProcessFunctionBase {
|
|
58
|
+
/**
|
|
59
|
+
* The ID of the function.
|
|
60
|
+
*/
|
|
61
|
+
id = "analyze_github_init";
|
|
62
|
+
/**
|
|
63
|
+
* Process the initialization.
|
|
64
|
+
*/
|
|
65
|
+
async process(context) {
|
|
66
|
+
const action = context.action;
|
|
67
|
+
const task = context.task;
|
|
68
|
+
const command = action.command;
|
|
69
|
+
// 1. Validate input
|
|
70
|
+
const githubRepository = command.data?.githubRepository;
|
|
71
|
+
const githubRepositoryPath = command.data?.githubRepositoryPath || "";
|
|
72
|
+
if (!githubRepository) {
|
|
73
|
+
console.error("AnalyzeGitHubInit: No githubRepository specified");
|
|
74
|
+
return {
|
|
75
|
+
...action,
|
|
76
|
+
results: {
|
|
77
|
+
githubAnalysis: {
|
|
78
|
+
error: "No githubRepository specified in action command",
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// 2. Get GitHub token from project
|
|
84
|
+
const projectRef = action.project;
|
|
85
|
+
if (!projectRef) {
|
|
86
|
+
console.error("AnalyzeGitHubInit: No project reference");
|
|
87
|
+
return {
|
|
88
|
+
...action,
|
|
89
|
+
results: {
|
|
90
|
+
githubAnalysis: {
|
|
91
|
+
error: "No project reference in action",
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Auto-initialize Firebase Admin if needed
|
|
97
|
+
if (admin.apps.length === 0) {
|
|
98
|
+
admin.initializeApp();
|
|
99
|
+
}
|
|
100
|
+
const projectDoc = await projectRef.load();
|
|
101
|
+
const projectData = projectDoc?.data();
|
|
102
|
+
const githubToken = projectData?.githubPersonalAccessToken;
|
|
103
|
+
if (!githubToken) {
|
|
104
|
+
console.error("AnalyzeGitHubInit: No GitHub token in project");
|
|
105
|
+
return {
|
|
106
|
+
...action,
|
|
107
|
+
results: {
|
|
108
|
+
githubAnalysis: {
|
|
109
|
+
error: "No githubPersonalAccessToken configured in project",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
// 3. Initialize GitHub client
|
|
116
|
+
const githubClient = new github_content_client_1.GitHubContentClient({
|
|
117
|
+
token: githubToken,
|
|
118
|
+
repo: githubRepository,
|
|
119
|
+
});
|
|
120
|
+
// 4. Detect framework
|
|
121
|
+
console.log(`AnalyzeGitHubInit: Detecting framework for ${githubRepository}...`);
|
|
122
|
+
const frameworkInfo = await githubClient.detectFramework(githubRepositoryPath);
|
|
123
|
+
console.log(`AnalyzeGitHubInit: Framework detected: ${frameworkInfo.framework}`);
|
|
124
|
+
// 5. Get filtered file list
|
|
125
|
+
console.log(`AnalyzeGitHubInit: Getting file list...`);
|
|
126
|
+
const filePaths = await githubClient.getFilteredFileList(githubRepositoryPath);
|
|
127
|
+
console.log(`AnalyzeGitHubInit: Found ${filePaths.length} files to analyze`);
|
|
128
|
+
// 6. Get folder paths (sorted by depth, deepest first)
|
|
129
|
+
const folderPaths = githubClient.getFolderPaths(filePaths);
|
|
130
|
+
console.log(`AnalyzeGitHubInit: Found ${folderPaths.length} folders`);
|
|
131
|
+
// 7. Group files by folder for batch processing
|
|
132
|
+
const folderBatches = this.groupFilesByFolder(filePaths, folderPaths);
|
|
133
|
+
console.log(`AnalyzeGitHubInit: Created ${folderBatches.length} folder batches`);
|
|
134
|
+
// 8. Calculate batch count (one batch per folder group)
|
|
135
|
+
const batchCount = folderBatches.length;
|
|
136
|
+
console.log(`AnalyzeGitHubInit: Will create ${batchCount} process actions`);
|
|
137
|
+
// 9. Save state to Firebase Storage
|
|
138
|
+
const projectId = projectRef.id;
|
|
139
|
+
const state = {
|
|
140
|
+
phase: "processing",
|
|
141
|
+
repository: githubRepository,
|
|
142
|
+
repositoryPath: githubRepositoryPath,
|
|
143
|
+
framework: frameworkInfo,
|
|
144
|
+
totalFiles: filePaths.length,
|
|
145
|
+
processedFiles: 0,
|
|
146
|
+
filePaths: filePaths,
|
|
147
|
+
folderPaths: folderPaths,
|
|
148
|
+
folderBatches: folderBatches,
|
|
149
|
+
currentBatchIndex: 0,
|
|
150
|
+
batchSize: 0, // Not used in folder-based batching
|
|
151
|
+
updatedAt: new Date(),
|
|
152
|
+
};
|
|
153
|
+
const analysisData = (0, github_analysis_storage_1.createInitialData)(state);
|
|
154
|
+
await (0, github_analysis_storage_1.writeAnalysisData)(projectId, analysisData);
|
|
155
|
+
console.log(`AnalyzeGitHubInit: State saved to Storage`);
|
|
156
|
+
// 9. Update task.actions dynamically
|
|
157
|
+
const taskRef = action.task?.ref;
|
|
158
|
+
;
|
|
159
|
+
console.log(`AnalyzeGitHubInit: action.task =`, taskRef ? taskRef.path : "undefined");
|
|
160
|
+
console.log(`AnalyzeGitHubInit: task.actions length =`, task.actions?.length);
|
|
161
|
+
if (taskRef) {
|
|
162
|
+
await this.updateTaskActions(taskRef, task.actions, command.index, batchCount, githubRepository, githubRepositoryPath);
|
|
163
|
+
console.log(`AnalyzeGitHubInit: Task actions updated`);
|
|
164
|
+
// Verify update
|
|
165
|
+
const updatedDoc = await taskRef.load();
|
|
166
|
+
const updatedActions = updatedDoc.data()?.actions || [];
|
|
167
|
+
console.log(`AnalyzeGitHubInit: Verified actions count =`, updatedActions.length);
|
|
168
|
+
}
|
|
169
|
+
// 11. Return success
|
|
170
|
+
return {
|
|
171
|
+
...action,
|
|
172
|
+
results: {
|
|
173
|
+
githubAnalysisInit: {
|
|
174
|
+
repository: githubRepository,
|
|
175
|
+
repositoryPath: githubRepositoryPath,
|
|
176
|
+
framework: frameworkInfo.framework,
|
|
177
|
+
platforms: frameworkInfo.platforms,
|
|
178
|
+
totalFiles: filePaths.length,
|
|
179
|
+
totalFolders: folderPaths.length,
|
|
180
|
+
batchCount: batchCount,
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
console.error("AnalyzeGitHubInit: Failed to initialize", error);
|
|
187
|
+
return {
|
|
188
|
+
...action,
|
|
189
|
+
results: {
|
|
190
|
+
githubAnalysis: {
|
|
191
|
+
error: error.message,
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Update task.actions to include process and summary actions.
|
|
199
|
+
*/
|
|
200
|
+
async updateTaskActions(taskRef, currentActions, currentIndex, batchCount, githubRepository, githubRepositoryPath) {
|
|
201
|
+
// Create new actions array
|
|
202
|
+
const newActions = [];
|
|
203
|
+
// Keep actions up to and including current (init)
|
|
204
|
+
for (let i = 0; i <= currentIndex; i++) {
|
|
205
|
+
newActions.push(currentActions[i]);
|
|
206
|
+
}
|
|
207
|
+
// Add process actions for each batch
|
|
208
|
+
for (let i = 0; i < batchCount; i++) {
|
|
209
|
+
newActions.push({
|
|
210
|
+
command: "analyze_github_process",
|
|
211
|
+
index: currentIndex + 1 + i,
|
|
212
|
+
data: {
|
|
213
|
+
githubRepository: githubRepository,
|
|
214
|
+
githubRepositoryPath: githubRepositoryPath,
|
|
215
|
+
batchIndex: i,
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
// Add summary action
|
|
220
|
+
newActions.push({
|
|
221
|
+
command: "analyze_github_summary",
|
|
222
|
+
index: currentIndex + 1 + batchCount,
|
|
223
|
+
data: {
|
|
224
|
+
githubRepository: githubRepository,
|
|
225
|
+
githubRepositoryPath: githubRepositoryPath,
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
// Shift remaining actions
|
|
229
|
+
const shiftAmount = batchCount + 1; // process actions + summary action
|
|
230
|
+
for (let i = currentIndex + 1; i < currentActions.length; i++) {
|
|
231
|
+
const action = currentActions[i];
|
|
232
|
+
newActions.push({
|
|
233
|
+
...action,
|
|
234
|
+
index: action.index + shiftAmount,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
// Update task document
|
|
238
|
+
await taskRef.update({
|
|
239
|
+
actions: newActions,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Group files by folder for batch processing.
|
|
244
|
+
* Each folder becomes one batch (one AI call).
|
|
245
|
+
* Multiple small folders may be grouped together.
|
|
246
|
+
*/
|
|
247
|
+
groupFilesByFolder(filePaths, folderPaths) {
|
|
248
|
+
// Create a map of folder -> files
|
|
249
|
+
const folderFileMap = new Map();
|
|
250
|
+
// Initialize with all folder paths
|
|
251
|
+
for (const folderPath of folderPaths) {
|
|
252
|
+
folderFileMap.set(folderPath, []);
|
|
253
|
+
}
|
|
254
|
+
// Also handle root-level files
|
|
255
|
+
folderFileMap.set("", []);
|
|
256
|
+
// Assign each file to its direct parent folder
|
|
257
|
+
for (const filePath of filePaths) {
|
|
258
|
+
const lastSlash = filePath.lastIndexOf("/");
|
|
259
|
+
const folderPath = lastSlash === -1 ? "" : filePath.substring(0, lastSlash);
|
|
260
|
+
if (folderFileMap.has(folderPath)) {
|
|
261
|
+
folderFileMap.get(folderPath)?.push(filePath);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
// Find the closest parent folder
|
|
265
|
+
let parent = folderPath;
|
|
266
|
+
while (parent && !folderFileMap.has(parent)) {
|
|
267
|
+
const parentSlash = parent.lastIndexOf("/");
|
|
268
|
+
parent = parentSlash === -1 ? "" : parent.substring(0, parentSlash);
|
|
269
|
+
}
|
|
270
|
+
folderFileMap.get(parent).push(filePath);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Convert to FolderBatch array, filtering out empty folders
|
|
274
|
+
const batches = [];
|
|
275
|
+
// Sort folders by depth (shallowest first for better grouping)
|
|
276
|
+
const sortedFolders = Array.from(folderFileMap.entries())
|
|
277
|
+
.filter(([, files]) => files.length > 0)
|
|
278
|
+
.sort((a, b) => {
|
|
279
|
+
const depthA = a[0] === "" ? 0 : a[0].split("/").length;
|
|
280
|
+
const depthB = b[0] === "" ? 0 : b[0].split("/").length;
|
|
281
|
+
return depthA - depthB;
|
|
282
|
+
});
|
|
283
|
+
for (const [folderPath, files] of sortedFolders) {
|
|
284
|
+
// Each folder is its own batch for simplicity
|
|
285
|
+
// (can be optimized later to group small folders)
|
|
286
|
+
batches.push({
|
|
287
|
+
folderPath,
|
|
288
|
+
files,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
console.log(`AnalyzeGitHubInit: Grouped into ${batches.length} folder batches`);
|
|
292
|
+
return batches;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
exports.AnalyzeGitHubInit = AnalyzeGitHubInit;
|
|
296
|
+
module.exports = (regions, options, data) => new AnalyzeGitHubInit(options).build(regions);
|
|
297
|
+
// Export class for testing
|
|
298
|
+
module.exports.AnalyzeGitHubInit = AnalyzeGitHubInit;
|
|
299
|
+
//# sourceMappingURL=analyze_github_init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze_github_init.js","sourceRoot":"","sources":["../../src/functions/analyze_github_init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Analysis Process Function
|
|
3
|
+
*
|
|
4
|
+
* Processes a folder batch:
|
|
5
|
+
* 1. Reads all files in the folder from GitHub
|
|
6
|
+
* 2. Generates AI summaries for all files + folder in one call
|
|
7
|
+
* 3. Caches summaries in Storage JSON
|
|
8
|
+
*/
|
|
9
|
+
import { Action, WorkflowProcessFunctionBase, WorkflowContext } from "@mathrunet/masamune_firebase_workflow";
|
|
10
|
+
import "@mathrunet/masamune";
|
|
11
|
+
/**
|
|
12
|
+
* A function for processing a batch of GitHub files.
|
|
13
|
+
*
|
|
14
|
+
* GitHubファイルのバッチを処理するためのFunction。
|
|
15
|
+
*/
|
|
16
|
+
export declare class AnalyzeGitHubProcess extends WorkflowProcessFunctionBase {
|
|
17
|
+
/**
|
|
18
|
+
* The ID of the function.
|
|
19
|
+
*/
|
|
20
|
+
id: string;
|
|
21
|
+
/**
|
|
22
|
+
* Process the batch.
|
|
23
|
+
*/
|
|
24
|
+
process(context: WorkflowContext): Promise<Action>;
|
|
25
|
+
}
|