@myk794/adly 1.1.0 → 1.4.2
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/adly.js +90 -24
- package/package.json +1 -1
package/adly.js
CHANGED
|
@@ -180,16 +180,17 @@ async function cmdLine() {
|
|
|
180
180
|
// Önceki reklamı bu turun token'ıyla faturala.
|
|
181
181
|
if (st.impressionToken && tokens > 0) {
|
|
182
182
|
const imp = await api("/api/ads/impression", { method: "POST", token, body: { impressionToken: st.impressionToken, tokens } });
|
|
183
|
-
if (imp && imp.ok) { st.balance = imp.balance_try; st.lastTokens = tokens; }
|
|
183
|
+
if (imp && imp.ok) { st.balance = imp.balance_try; all._balance = imp.balance_try; st.lastTokens = tokens; }
|
|
184
184
|
}
|
|
185
185
|
// Sonraki tur için yeni reklam al.
|
|
186
186
|
const s = await api("/api/ads/serve", { token });
|
|
187
187
|
if (s && !s.empty && s.campaign) {
|
|
188
188
|
st.line = s.campaign.text; st.url = s.campaign.url; st.impressionToken = s.impressionToken; st.clickPath = s.click_path || null;
|
|
189
|
-
// Gösterilen reklamın tıklama linki — `adly open`
|
|
189
|
+
// Gösterilen reklamın tıklama linki — `adly open` bunu kullanır.
|
|
190
190
|
if (s.click_path) all._lastClick = { path: s.click_path, text: st.line, url: st.url };
|
|
191
|
+
setSpinnerVerb(s.campaign.text); // reklamı düşünme spinner'ına yaz (sonraki oturum)
|
|
191
192
|
}
|
|
192
|
-
else { st.line =
|
|
193
|
+
else { st.line = null; st.impressionToken = null; st.clickPath = null; }
|
|
193
194
|
st.lastSig = sig;
|
|
194
195
|
all[sessionId] = st; writeJSON(STATE_PATH, all);
|
|
195
196
|
} else if (!st.impressionToken) {
|
|
@@ -198,6 +199,7 @@ async function cmdLine() {
|
|
|
198
199
|
if (s && !s.empty && s.campaign) {
|
|
199
200
|
st.line = s.campaign.text; st.url = s.campaign.url; st.impressionToken = s.impressionToken; st.clickPath = s.click_path || null;
|
|
200
201
|
if (s.click_path) all._lastClick = { path: s.click_path, text: st.line, url: st.url };
|
|
202
|
+
setSpinnerVerb(s.campaign.text); // reklamı düşünme spinner'ına yaz (sonraki oturum)
|
|
201
203
|
}
|
|
202
204
|
if (sig != null) st.lastSig = sig;
|
|
203
205
|
all[sessionId] = st; writeJSON(STATE_PATH, all);
|
|
@@ -206,26 +208,42 @@ async function cmdLine() {
|
|
|
206
208
|
// Ağ hatası: son bilinen satırı bas, çökme yok.
|
|
207
209
|
}
|
|
208
210
|
|
|
209
|
-
|
|
211
|
+
// Kimlik + bakiye önbelleği: e-posta config'te (ham), bakiye state'te global tutulur.
|
|
212
|
+
// (loadConfig() yalnız api/token döndürür; email'i ham dosyadan okuruz.)
|
|
213
|
+
// Eksikse bir kez /me'den çekip kaydet → sonraki render'lar ağ çağrısı yapmaz.
|
|
214
|
+
let raw = readJSON(CONFIG_PATH, {});
|
|
215
|
+
if (!raw.email || all._balance == null) {
|
|
216
|
+
try {
|
|
217
|
+
const me = await api("/api/developer/me", { token });
|
|
218
|
+
if (me && !me.error) {
|
|
219
|
+
if (me.email && !raw.email) { raw = { ...raw, email: me.email }; writeJSON(CONFIG_PATH, raw); }
|
|
220
|
+
if (me.balance_try != null) { all._balance = me.balance_try; writeJSON(STATE_PATH, all); }
|
|
221
|
+
}
|
|
222
|
+
} catch { /* ağ hatası: önbellek neyse onu göster */ }
|
|
223
|
+
}
|
|
224
|
+
|
|
210
225
|
const fx = useFx();
|
|
211
226
|
const frame = Math.floor(Date.now() / 130); // ~7-8 fps; statusLine yenilemesi arası kare ilerler
|
|
212
227
|
|
|
213
|
-
//
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
const icon = fx ? pulse(S.money, frame) : S.money;
|
|
222
|
-
// Kazanç rozeti: fx açıksa yeşil nabız.
|
|
223
|
-
let bal = "";
|
|
224
|
-
if (st.balance) {
|
|
225
|
-
const raw = `${S.sep} ${S.lira}${st.balance}`;
|
|
226
|
-
bal = fx ? ` ${badge(raw, frame)}` : ` ${raw}`;
|
|
228
|
+
// statusLine = KAZANÇ + İPUCU. (Reklam artık düşünme spinner'ında — spinnerVerbs.)
|
|
229
|
+
// 1) Kazanç: nabız atan ikon + yeşil bakiye rozeti (oturum üstü global önbellek).
|
|
230
|
+
const bal = st.balance || all._balance;
|
|
231
|
+
let earn = "";
|
|
232
|
+
if (bal) {
|
|
233
|
+
earn = fx
|
|
234
|
+
? `${pulse(S.money, frame)} ${badge(`${S.lira}${bal}`, frame)}`
|
|
235
|
+
: `${S.money} ${S.lira}${bal}`;
|
|
227
236
|
}
|
|
228
|
-
|
|
237
|
+
|
|
238
|
+
// 2) İpucu/marka: detay için komutu söyler + satırın Adly'ye ait olduğunu belirtir.
|
|
239
|
+
// "adly status" ember'la vurgulanır; gerisi sönük.
|
|
240
|
+
const hint = fx
|
|
241
|
+
? dim("use ") + rgb(168, 120, 72) + "adly status" + RST + dim(" for info")
|
|
242
|
+
: "use 'adly status' for info";
|
|
243
|
+
|
|
244
|
+
const sep = ` ${fx ? dim(S.sep) : S.sep} `;
|
|
245
|
+
const out = [earn, hint].filter(Boolean).join(sep);
|
|
246
|
+
process.stdout.write(out);
|
|
229
247
|
}
|
|
230
248
|
|
|
231
249
|
// OSC 8 tıklanabilir link: env ADLY_LINKS → config.links → varsayılan KAPALI.
|
|
@@ -254,6 +272,7 @@ function useFx() {
|
|
|
254
272
|
const RST = "\x1b[0m";
|
|
255
273
|
const BOLD = "\x1b[1m";
|
|
256
274
|
function rgb(r, g, b) { return `\x1b[38;2;${r | 0};${g | 0};${b | 0}m`; }
|
|
275
|
+
function dim(s) { return rgb(140, 138, 148) + s + RST; }
|
|
257
276
|
function mix(a, b, t) { return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t]; }
|
|
258
277
|
// Metni soldan sağa kayan ember parıltısıyla boya (sönük gri zemin, sıcak hale).
|
|
259
278
|
function shimmer(text, frame) {
|
|
@@ -280,6 +299,25 @@ function badge(s, frame) {
|
|
|
280
299
|
const [r, g, b] = mix([88, 170, 110], [150, 235, 170], t);
|
|
281
300
|
return rgb(r, g, b) + s + RST;
|
|
282
301
|
}
|
|
302
|
+
// Kareli animasyon sembolleri. ASCII modunda da çalışan alternatifler var
|
|
303
|
+
// (Windows'ta emoji/unicode yıldız glyph'i olmayabilir → sade işaretler).
|
|
304
|
+
function frameOf(frame, arr) { return arr[((frame % arr.length) + arr.length) % arr.length]; }
|
|
305
|
+
function spinSym(frame) {
|
|
306
|
+
return useAscii()
|
|
307
|
+
? frameOf(frame, ["|", "/", "-", "\\"])
|
|
308
|
+
: frameOf(frame, ["◜", "◠", "◝", "◞", "◡", "◟"]);
|
|
309
|
+
}
|
|
310
|
+
function twinkleSym(frame) {
|
|
311
|
+
return useAscii()
|
|
312
|
+
? frameOf(frame, [".", "o", "O", "o"])
|
|
313
|
+
: frameOf(frame, ["✦", "✶", "✦", "·"]);
|
|
314
|
+
}
|
|
315
|
+
// Parlayan yıldız (beyaz→ember nabız).
|
|
316
|
+
function star(s, frame) {
|
|
317
|
+
const t = (Math.sin(frame / 2) + 1) / 2;
|
|
318
|
+
const [r, g, b] = mix([176, 150, 96], [255, 236, 184], t);
|
|
319
|
+
return BOLD + rgb(r, g, b) + s + RST;
|
|
320
|
+
}
|
|
283
321
|
|
|
284
322
|
// En son gösterilen reklamı tarayıcıda aç → tıklamayı kaydeder (50× kazanç), reklamverene yönlendirir.
|
|
285
323
|
async function cmdOpen() {
|
|
@@ -328,10 +366,28 @@ async function cmdWatch() {
|
|
|
328
366
|
}
|
|
329
367
|
}
|
|
330
368
|
|
|
331
|
-
|
|
369
|
+
// Reklamı Claude Code'un DÜŞÜNME SPINNER'INA koy. CC 2.1.143+ resmi ayarı:
|
|
370
|
+
// settings.json'daki `spinnerVerbs` fiil havuzunu ("Baking…") verilen listeyle
|
|
371
|
+
// değiştirir. CC açılışta okur → spinner reklamı sonraki oturumda görünür.
|
|
372
|
+
// Güvenli: settings.json düz JSON değilse (yorum/JSONC → parse hatası) DOKUNMAZ;
|
|
373
|
+
// eski CC sürümü anahtarı sessizce yok sayar. Yalnız değişince yazar.
|
|
374
|
+
function setSpinnerVerb(adText) {
|
|
375
|
+
if (!adText) return;
|
|
376
|
+
try {
|
|
377
|
+
if (!fs.existsSync(CLAUDE_SETTINGS)) return;
|
|
378
|
+
const s = JSON.parse(fs.readFileSync(CLAUDE_SETTINGS, "utf8"));
|
|
379
|
+
const desired = { mode: "replace", verbs: [adText] };
|
|
380
|
+
if (JSON.stringify(s.spinnerVerbs) === JSON.stringify(desired)) return;
|
|
381
|
+
s.spinnerVerbs = desired;
|
|
382
|
+
fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(s, null, 2));
|
|
383
|
+
} catch { /* statusLine'ı asla kırma */ }
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
async function cmdInstallStatusline() {
|
|
332
387
|
const selfPath = path.resolve(__filename);
|
|
333
388
|
const settings = readJSON(CLAUDE_SETTINGS, {});
|
|
334
|
-
|
|
389
|
+
// Yedeği YALNIZ bir kez al (yoksa) — tekrar kurulum temiz/orijinal yedeği ezmesin.
|
|
390
|
+
if (fs.existsSync(CLAUDE_SETTINGS) && !fs.existsSync(CLAUDE_SETTINGS + ".adly-bak")) {
|
|
335
391
|
fs.copyFileSync(CLAUDE_SETTINGS, CLAUDE_SETTINGS + ".adly-bak");
|
|
336
392
|
}
|
|
337
393
|
settings.statusLine = {
|
|
@@ -339,19 +395,29 @@ function cmdInstallStatusline() {
|
|
|
339
395
|
command: `node "${selfPath}" line`,
|
|
340
396
|
padding: 0,
|
|
341
397
|
};
|
|
398
|
+
// İlk reklamı spinner'a yerleştir (girişliyse) → ilk yeni oturumda görünür.
|
|
399
|
+
const { token } = loadConfig();
|
|
400
|
+
if (token) {
|
|
401
|
+
try {
|
|
402
|
+
const s = await api("/api/ads/serve", { token });
|
|
403
|
+
if (s && !s.empty && s.campaign) settings.spinnerVerbs = { mode: "replace", verbs: [s.campaign.text] };
|
|
404
|
+
} catch { /* ağ yoksa adly line sonra doldurur */ }
|
|
405
|
+
}
|
|
342
406
|
fs.mkdirSync(path.dirname(CLAUDE_SETTINGS), { recursive: true });
|
|
343
407
|
fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(settings, null, 2));
|
|
344
|
-
console.log(`${sym().ok} Claude Code
|
|
408
|
+
console.log(`${sym().ok} Claude Code'a Adly eklendi.`);
|
|
345
409
|
console.log(" Ayar: " + CLAUDE_SETTINGS + " (yedek: .adly-bak)");
|
|
346
|
-
console.log("
|
|
410
|
+
console.log(" statusLine (alt satır) = e-posta + kazanç · spinner (düşünme fiili) = reklam.");
|
|
411
|
+
console.log(" Yeni bir Claude Code oturumu başlat — spinner'da reklam, altta kazanç görünür.");
|
|
347
412
|
}
|
|
348
413
|
|
|
349
414
|
function cmdUninstallStatusline() {
|
|
350
415
|
const settings = readJSON(CLAUDE_SETTINGS, null);
|
|
351
416
|
if (!settings) return fail("settings.json yok");
|
|
352
417
|
delete settings.statusLine;
|
|
418
|
+
delete settings.spinnerVerbs; // spinner reklamını da kaldır → CC stock fiillere döner
|
|
353
419
|
fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(settings, null, 2));
|
|
354
|
-
console.log(`${sym().ok} statusLine
|
|
420
|
+
console.log(`${sym().ok} Adly kaldırıldı (statusLine + spinner reklamı). Yeni oturumda CC'nin kendi fiilleri döner.`);
|
|
355
421
|
}
|
|
356
422
|
|
|
357
423
|
// ---------- yardımcılar ----------
|