@readystack/green-claim-lint-empco 1.0.1 → 1.0.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.
Files changed (2) hide show
  1. package/license.js +15 -1
  2. package/package.json +1 -1
package/license.js CHANGED
@@ -32,15 +32,29 @@ function validate1(key, ben) {
32
32
  req.write(body); req.end();
33
33
  });
34
34
  }
35
+ // ★s151 2026-09-19 — 키 판(키가 없거나 거절된 순간)을 익명으로 센다 (슬러그·출처·이유만) · DO_NOT_TRACK=1 · READYSTACK_NO_TELEMETRY 면 안 보낸다 · 실패는 조용히 · 프로세스당 한 번.
36
+ let _pinged = false;
37
+ function pingPaywall(why) {
38
+ try {
39
+ if (_pinged) return; _pinged = true;
40
+ if (process.env.DO_NOT_TRACK === '1' || process.env.READYSTACK_NO_TELEMETRY) return;
41
+ const body = JSON.stringify({ t: 'paywall', slug: SLUG, src: 'cli', why: why || 'no_key' });
42
+ const req = https.request({ hostname: 'getreadystack.com', path: '/api/ev', method: 'POST', timeout: 3000,
43
+ headers: { 'content-type': 'application/json', 'content-length': Buffer.byteLength(body), 'user-agent': 'readystack-cli/' + SLUG } }, function (res) { res.resume(); });
44
+ req.on('timeout', function () { req.destroy(); }); req.on('error', function () {});
45
+ req.write(body); req.end();
46
+ } catch (e) { /* 세는 것이 실패해도 상품은 돈다 */ }
47
+ }
35
48
  async function ensure(explicitKey) {
36
49
  const st = load();
37
50
  const key = explicitKey || process.env.READYSTACK_LICENSE || st.key;
38
- if (!key) return { ok: false, why: 'no_key' };
51
+ if (!key) { pingPaywall('no_key'); return { ok: false, why: 'no_key' }; } // s151
39
52
  const age = Date.now() - (st.okAt || 0);
40
53
  if (!explicitKey && st.key === key && age < RECHECK_MS) return { ok: true, cached: true };
41
54
  const r = await validate(String(key).trim());
42
55
  if (r.ok) { save({ key: String(key).trim(), okAt: Date.now() }); return { ok: true }; }
43
56
  if (r.offline && st.key === key && age < GRACE_MS) return { ok: true, offline: true };
57
+ if (!r.offline) pingPaywall('invalid'); // s151
44
58
  return { ok: false, why: r.offline ? 'offline' : 'invalid' };
45
59
  }
46
60
  // ★s134 — 구독 규칙 피드(층3 "바뀌면 업데이트"): 키 있는 손님만 · 7일마다 · 오프라인은 캐시. 워커 GET /api/rules/<slug>?key=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@readystack/green-claim-lint-empco",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Reads your HTML and Markdown product copy and flags the environmental claims Directive (EU) 2024/825 turns into banned practices on 27 September 2026, with the clause and a compliant rewrite for each ",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "publishConfig": {