@readystack/einvoice-mandate-lint 1.0.3 → 1.0.4
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/license.js +15 -1
- 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/einvoice-mandate-lint",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Lints UBL and CII invoice XML against EN 16931 and the national e-invoicing mandates that are live in 2026",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"publishConfig": {
|