@m1kapp/kit 0.0.24 → 0.0.25
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/README.md +221 -2
- package/bin/claim.mjs +77 -0
- package/bin/m1kkit.mjs +10 -0
- package/bin/skills/m1kapp-init.md +108 -92
- package/bin/track.mjs +95 -0
- package/dist/index.d.mts +630 -5
- package/dist/index.d.ts +630 -5
- package/dist/index.js +4 -4
- package/dist/index.mjs +4 -4
- package/dist/meta.json +9 -9
- package/dist/pwa.js +2 -2
- package/dist/pwa.mjs +1 -1
- package/dist/styles.css +1 -1
- package/dist/utils.d.mts +17 -1
- package/dist/utils.d.ts +17 -1
- package/dist/utils.js +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +1 -1
package/bin/track.mjs
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* m1kkit track <url> [--host=m1k.app]
|
|
4
|
+
*
|
|
5
|
+
* 로그인 없이 m1k 방문자 트래커에 사이트를 등록하고 배지 slug를 발급받는다.
|
|
6
|
+
* 발급된 claim 토큰은 현재 폴더의 .m1k.json 에 저장 → 나중에 `m1kkit claim`으로 계정 귀속.
|
|
7
|
+
*/
|
|
8
|
+
import { writeFileSync, existsSync, readFileSync } from "fs";
|
|
9
|
+
import { resolve } from "path";
|
|
10
|
+
|
|
11
|
+
const args = process.argv.slice(2);
|
|
12
|
+
const flags = Object.fromEntries(
|
|
13
|
+
args.filter((a) => a.startsWith("--")).map((a) => {
|
|
14
|
+
const [k, v] = a.replace(/^--/, "").split("=");
|
|
15
|
+
return [k, v ?? true];
|
|
16
|
+
}),
|
|
17
|
+
);
|
|
18
|
+
const positional = args.filter((a) => !a.startsWith("--"));
|
|
19
|
+
const url = positional[0];
|
|
20
|
+
const host = flags.host || process.env.M1K_HOST || "m1k.app";
|
|
21
|
+
|
|
22
|
+
if (!url || flags.help) {
|
|
23
|
+
console.log(`
|
|
24
|
+
m1kkit track — m1k 방문자 트래커에 사이트 등록 (무로그인)
|
|
25
|
+
|
|
26
|
+
사용법:
|
|
27
|
+
npx m1kkit track <url> [--host=m1k.app]
|
|
28
|
+
|
|
29
|
+
예시:
|
|
30
|
+
npx m1kkit track https://myside.app
|
|
31
|
+
|
|
32
|
+
동작:
|
|
33
|
+
1) 로그인 없이 사이트를 등록하고 배지 slug를 발급
|
|
34
|
+
2) 배지 스니펫을 출력 (README/푸터에 붙여넣기 → 바로 수집 시작)
|
|
35
|
+
3) claim 토큰을 ./.m1k.json 에 저장 → 나중에 'm1kkit claim'으로 내 계정에 귀속
|
|
36
|
+
`);
|
|
37
|
+
process.exit(url ? 0 : 1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const scheme = /^(localhost|127\.|0\.0\.0\.0)/.test(host) ? "http" : "https";
|
|
41
|
+
const base = `${scheme}://${host}`;
|
|
42
|
+
const endpoint = `${base}/api/sites/cli`;
|
|
43
|
+
let res, data;
|
|
44
|
+
try {
|
|
45
|
+
res = await fetch(endpoint, {
|
|
46
|
+
method: "POST",
|
|
47
|
+
headers: { "content-type": "application/json" },
|
|
48
|
+
body: JSON.stringify({ url }),
|
|
49
|
+
});
|
|
50
|
+
data = await res.json().catch(() => ({}));
|
|
51
|
+
} catch (e) {
|
|
52
|
+
console.error(`✗ 등록 요청 실패: ${e.message}`);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (!res.ok) {
|
|
57
|
+
console.error(`✗ ${data?.error || data?.message || res.statusText}`);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (data.alreadyRegistered) {
|
|
62
|
+
console.log(`\n⚠ ${data.message}`);
|
|
63
|
+
console.log(` slug: ${data.slug}`);
|
|
64
|
+
console.log(` badge: ${data.badgeUrl}\n`);
|
|
65
|
+
process.exit(0);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// .m1k.json 저장 (기존 있으면 병합)
|
|
69
|
+
const file = resolve(process.cwd(), ".m1k.json");
|
|
70
|
+
let store = {};
|
|
71
|
+
if (existsSync(file)) {
|
|
72
|
+
try { store = JSON.parse(readFileSync(file, "utf8")); } catch { /* ignore */ }
|
|
73
|
+
}
|
|
74
|
+
store.host = host;
|
|
75
|
+
store.slug = data.slug;
|
|
76
|
+
store.url = data.url;
|
|
77
|
+
store.claimToken = data.claimToken;
|
|
78
|
+
writeFileSync(file, JSON.stringify(store, null, 2) + "\n");
|
|
79
|
+
|
|
80
|
+
console.log(`
|
|
81
|
+
✓ 등록 완료! ${data.url}
|
|
82
|
+
|
|
83
|
+
배지 스니펫 (README/푸터에 붙여넣기):
|
|
84
|
+
${data.snippet}
|
|
85
|
+
|
|
86
|
+
⚡ kit을 쓰면 스니펫 없이 자동 집계:
|
|
87
|
+
.env 에 한 줄만 추가하면 Watermark/PoweredByKit 하단 크레딧이 방문을 자동으로 셉니다.
|
|
88
|
+
NEXT_PUBLIC_M1K_SLUG=${data.slug}
|
|
89
|
+
(끄려면: <Watermark track={false}> 또는 그 줄 삭제)
|
|
90
|
+
|
|
91
|
+
claim 토큰을 ./.m1k.json 에 저장했어요.
|
|
92
|
+
나중에 내 계정에 귀속하려면: npx m1kkit claim
|
|
93
|
+
|
|
94
|
+
바로 귀속: ${data.claimUrl}
|
|
95
|
+
`);
|