@ssheleg/sheleg-dev 0.6.0 → 0.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 +318 -0
- package/README.md +115 -1
- package/SECURITY.md +199 -52
- package/bin/sheleg-dev.js +18 -0
- package/package.json +2 -2
- package/plugins/sheleg-dev/.claude-plugin/plugin.json +1 -1
- package/plugins/sheleg-dev/hooks/hooks.json +29 -0
- package/plugins/sheleg-dev/hooks/lib/moneygate.js +587 -0
- package/plugins/sheleg-dev/hooks/money-gate.js +68 -0
- package/plugins/sheleg-dev/skills/ad-tracking/SKILL.md +7 -3
- package/plugins/sheleg-dev/skills/ad-tracking/fixtures/README.md +77 -0
- package/plugins/sheleg-dev/skills/ad-tracking/fixtures/assert-dedup-contract.mjs +397 -0
- package/plugins/sheleg-dev/skills/ad-tracking/fixtures/manifest.json +75 -0
- package/plugins/sheleg-dev/skills/ad-tracking/fixtures/purchase-capi-from-thank-you-page.json +32 -0
- package/plugins/sheleg-dev/skills/ad-tracking/fixtures/purchase-capi-server.json +26 -0
- package/plugins/sheleg-dev/skills/ad-tracking/fixtures/purchase-pixel-browser.json +12 -0
- package/plugins/sheleg-dev/skills/ad-tracking/fixtures/reference-emitter.mjs +129 -0
- package/plugins/sheleg-dev/skills/ad-tracking/references/meta-linkedin.md +17 -1
- package/plugins/sheleg-dev/skills/crypto-payments/SKILL.md +82 -77
- package/plugins/sheleg-dev/skills/crypto-payments/references/callback-route-hardening.md +55 -0
- package/plugins/sheleg-dev/skills/crypto-payments/references/heleket-provider.md +349 -10
- package/plugins/sheleg-dev/skills/crypto-payments/references/testing-and-local-dev.md +60 -0
- package/plugins/sheleg-dev/skills/stripe-billing/SKILL.md +1 -1
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/README.md +111 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/assert-money-invariants.mjs +564 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/charge-refunded-partial.json +52 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/charge-refunded-remainder.json +63 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/checkout-session-async-payment-failed.json +43 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/checkout-session-completed-async-unpaid.json +43 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/checkout-session-completed-paid.json +42 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/invoice-paid-subscription-cycle-next-period.json +70 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/invoice-paid-subscription-cycle-redelivery.json +70 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/invoice-paid-subscription-cycle.json +61 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/invoice-paid-subscription-update-proration.json +90 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/manifest.json +172 -0
- package/plugins/sheleg-dev/skills/stripe-billing/fixtures/reference-handler.mjs +315 -0
- package/plugins/sheleg-dev/skills/stripe-billing/references/testing-and-local-dev.md +39 -2
- package/plugins/sheleg-dev/skills/stripe-billing/references/webhook-events.md +43 -1
package/SECURITY.md
CHANGED
|
@@ -1,63 +1,210 @@
|
|
|
1
1
|
# Security
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
##
|
|
18
|
-
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
3
|
+
`sheleg-dev` is six skills about the layer a product reaches once it has users.
|
|
4
|
+
Five of them touch other people's money or identity — Stripe billing, crypto
|
|
5
|
+
payments, ad and conversion tracking, Google sign-in, server-side Google auth —
|
|
6
|
+
and the sixth is front-end performance. That subject is the reason this document
|
|
7
|
+
has to be exact about the pack itself.
|
|
8
|
+
|
|
9
|
+
Everything below is checkable from a clone, and the commands at the end are the
|
|
10
|
+
checks. **If one of them does not run, that is a defect in this document** —
|
|
11
|
+
please report it as one. Until this rewrite the file was a wholesale copy of a
|
|
12
|
+
sibling skill's, published in the npm tarball: it described a Python auditor this
|
|
13
|
+
repository has never had, and closed with a "verify for yourself" block whose
|
|
14
|
+
second and third commands exited 2. `test/validate.py` now refuses any path these
|
|
15
|
+
documents name that does not exist here.
|
|
16
|
+
|
|
17
|
+
## What ships, and what of it executes
|
|
18
|
+
|
|
19
|
+
`git ls-files plugins` returns **52 files: 30 markdown, one plugin manifest, three
|
|
20
|
+
files of the manual gate, and 18 files of money fixtures.** Two of the six skills now
|
|
21
|
+
ship code you can run — the assertion packs under `fixtures/` — and that is a change
|
|
22
|
+
from every release before v0.7.0, so it is stated here rather than left to be noticed.
|
|
23
|
+
They run only when you invoke them, read only the JSON fixtures beside them, and open
|
|
24
|
+
no socket; the greps below prove all three.
|
|
25
|
+
|
|
26
|
+
| Component | Count | Runtime behavior |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `SKILL.md`, one per skill | 6 | Text. Read by the agent, executes nothing. |
|
|
29
|
+
| `references/` files, loaded on demand | 22 | Text. Same. |
|
|
30
|
+
| `plugins/sheleg-dev/.claude-plugin/plugin.json` | 1 | Manifest read by Claude Code. |
|
|
31
|
+
| `plugins/sheleg-dev/hooks/hooks.json` | 1 | Hook manifest read by Claude Code. Declares one `PreToolUse` hook and no `if` filter. |
|
|
32
|
+
| `plugins/sheleg-dev/hooks/money-gate.js` | 1 | Runs on a tool call, when the plugin is enabled. Requires `path` and its own decision module — nothing else. Reads stdin, writes one JSON line, exits 0 on every path. |
|
|
33
|
+
| `plugins/sheleg-dev/hooks/lib/moneygate.js` | 1 | Pure. Payload and environment in, verdict out. No `require` at all, no filesystem, no clock. |
|
|
34
|
+
| `bin/sheleg-dev.js` — the npm installer | 1 | Runs only when you invoke it. Node built-ins only: `fs`, `path`, `os`. |
|
|
35
|
+
| `install.sh` — the shell installer | 1 | **Not in the tarball** — `files` ships `bin/` and `plugins/`, so this one reaches you only through a clone. Runs when you invoke it. Coreutils only: `cd`, `pwd`, `dirname`, `basename`, `mkdir`, `rm`, `cp`, `echo`. It is the destructive channel: `rm -rf` per skill, then `cp -R`. |
|
|
36
|
+
| `plugins/sheleg-dev/skills/*/fixtures/*.json` — webhook payloads | 12 | Data. Placeholder ids only; no key, token, signing secret or real customer id. |
|
|
37
|
+
| `plugins/sheleg-dev/skills/*/fixtures/*.mjs` — the assertion packs and their reference implementations | 4 | Runs only when you invoke it. Reads the JSON beside it with `readFileSync` and nothing else: no `child_process`, no `fetch`, no write, no `process.env`. |
|
|
38
|
+
| `plugins/sheleg-dev/skills/*/fixtures/manifest.json` and its `README.md` | 4 | Text. The invariant-to-fixture-to-document map, which `test/validate.py` reads. |
|
|
39
|
+
|
|
40
|
+
The published tarball is `bin/` and `plugins/` plus `README.md`, `CHANGELOG.md`,
|
|
41
|
+
`SECURITY.md`, `LICENSE` and `package.json` — 58 files, listed by
|
|
42
|
+
`npm pack --dry-run`. `install.sh`, `test/`, `docs/` and `CONTRIBUTING.md` are **not**
|
|
43
|
+
in it; `test/validate.py` now refuses a path these shipped documents name that the
|
|
44
|
+
tarball does not carry, because resolving in a clone is the wrong question for a
|
|
45
|
+
document that ships.
|
|
46
|
+
|
|
47
|
+
**The gate can refuse a command and can never run one.** `money-gate.js` requires
|
|
48
|
+
`path` and the decision module; the decision module requires nothing. There is no
|
|
49
|
+
`child_process`, no `fetch`, no `http`, no `fs` on either path — so the strongest
|
|
50
|
+
thing it can do to your session is print a denial, and the strongest thing a bug
|
|
51
|
+
in it can do is print nothing. It reads `process.env` for one variable pair
|
|
52
|
+
(`SHELEG_DEV_LIVE_AUTHORISED`, `SHELEG_DEV_MONEY_GATE`) and the environment
|
|
53
|
+
declaration a run already carries, and it never writes to any file. `README.md` →
|
|
54
|
+
*The manual gate* is its single home.
|
|
55
|
+
|
|
56
|
+
**There are no npm lifecycle scripts.** `package.json` declares exactly one
|
|
57
|
+
script, `test`. Installing this package, or reaching it through `npx`, runs
|
|
58
|
+
nothing but the CLI you typed.
|
|
59
|
+
|
|
60
|
+
## What the installers read and write
|
|
61
|
+
|
|
62
|
+
Both do one thing: copy the six skill directories out of the package into
|
|
63
|
+
`~/.claude/skills/<name>`.
|
|
64
|
+
|
|
65
|
+
- **Read:** only files inside the package.
|
|
66
|
+
- **Write:** only `~/.claude/skills/` — six directories, named for the six skills.
|
|
67
|
+
Nothing else on the filesystem, nothing outside `$HOME`.
|
|
68
|
+
- **Network: none.** Neither file opens a socket or resolves a hostname.
|
|
69
|
+
`bin/sheleg-dev.js` requires `fs`, `path` and `os` and nothing else — no
|
|
70
|
+
`child_process`, no `fetch`, no `http` — so it spawns no process at all;
|
|
71
|
+
`install.sh` runs only the coreutils named above. The grep below prints the
|
|
72
|
+
whole surface of both files in eleven lines.
|
|
73
|
+
- **No telemetry, no analytics, no phone-home.** Nothing here has anywhere to
|
|
74
|
+
send anything.
|
|
75
|
+
|
|
76
|
+
**One destructive difference between the two installers.** `bin/sheleg-dev.js`
|
|
77
|
+
skips a skill that is already installed and says so, unless you pass `--force`
|
|
78
|
+
(`bin/sheleg-dev.js:45-46`). `install.sh` does not ask: for each of the six names
|
|
79
|
+
it runs `rm -rf` on the destination and re-copies, every time
|
|
80
|
+
(`install.sh:21-22`). If you have hand-edited an installed skill, the shell
|
|
81
|
+
installer deletes your edits and the node installer does not.
|
|
82
|
+
|
|
83
|
+
## Credentials
|
|
84
|
+
|
|
85
|
+
**This pack handles payment credentials as a subject and never as a value.** It
|
|
86
|
+
reads no credential, stores none, transmits none, logs none. It is markdown; it
|
|
87
|
+
could not.
|
|
88
|
+
|
|
89
|
+
What it contains is credential *names*, inside example code you adapt —
|
|
90
|
+
`STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, `HELEKET_API_KEY`,
|
|
91
|
+
`GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`. No real key ships. The grep below
|
|
92
|
+
searches the whole skill payload for live-key shapes and returns exactly one line
|
|
93
|
+
— a `-----BEGIN RSA PRIVATE KEY-----\n...` placeholder inside a service-account
|
|
94
|
+
JSON example, at
|
|
95
|
+
`plugins/sheleg-dev/skills/google-auth/references/adc-and-service-accounts.md:236`.
|
|
96
|
+
The pack's own position on live keys, that one in a repository is an incident
|
|
97
|
+
rather than a lint warning, is at
|
|
98
|
+
`plugins/sheleg-dev/skills/stripe-billing/references/stripe-agent-toolchain.md:156`.
|
|
99
|
+
|
|
100
|
+
`.env` and `.env.*` are gitignored here, `.env.example` excepted.
|
|
101
|
+
|
|
102
|
+
## What the advice can lead an agent to run
|
|
103
|
+
|
|
104
|
+
The pack executes nothing — but it tells an agent what to run, and some of those
|
|
105
|
+
commands move real credentials. Every one is a vendor's own tool, invoked by you
|
|
106
|
+
or by an agent you approved:
|
|
107
|
+
|
|
108
|
+
- `stripe login` and `stripe agent setup` — browser consent, then a written CLI
|
|
109
|
+
profile. The reference marks the login a human step:
|
|
110
|
+
`plugins/sheleg-dev/skills/stripe-billing/references/stripe-agent-toolchain.md:36-37`
|
|
111
|
+
- `stripe listen`, `stripe trigger`, `stripe logs tail` — use the profile the CLI
|
|
112
|
+
already holds:
|
|
113
|
+
`plugins/sheleg-dev/skills/stripe-billing/references/testing-and-local-dev.md:24-51`
|
|
114
|
+
- `gcloud auth application-default login` — mints a local credential file:
|
|
115
|
+
`plugins/sheleg-dev/skills/google-auth/references/adc-and-service-accounts.md:50-57`
|
|
116
|
+
- `gcloud iam workload-identity-pools create-cred-config` — writes a
|
|
117
|
+
credential-configuration file:
|
|
118
|
+
`plugins/sheleg-dev/skills/google-auth/references/workload-identity.md:127`
|
|
119
|
+
- `claude mcp add --transport http stripe https://mcp.stripe.com/` — OAuth
|
|
120
|
+
consent to **Stripe's own MCP server**, which can make live calls against your
|
|
121
|
+
account:
|
|
122
|
+
`plugins/sheleg-dev/skills/stripe-billing/references/stripe-agent-toolchain.md:106-107`
|
|
123
|
+
|
|
124
|
+
The last is the one to weigh. This pack *points at* Stripe's MCP server and does
|
|
125
|
+
not install, proxy or wrap it; if you connect it, that account access is between
|
|
126
|
+
you and Stripe. The same file states the key hygiene the pack expects — restricted
|
|
127
|
+
`rk_` keys, one per service, minimum permissions, a secrets vault in preference to
|
|
128
|
+
environment variables, never in source and never in logs:
|
|
129
|
+
`plugins/sheleg-dev/skills/stripe-billing/references/stripe-agent-toolchain.md:144-158`.
|
|
130
|
+
|
|
131
|
+
## What this pack never does
|
|
132
|
+
|
|
133
|
+
- It never charges, refunds, rotates or revokes anything. It has no code that could
|
|
134
|
+
— and since 2026-08-19 it ships a hook whose whole purpose is to stop an *agent*
|
|
135
|
+
from doing so unasked. `README.md` → *The manual gate*.
|
|
136
|
+
- It never asks for a key, and has nowhere to send one.
|
|
137
|
+
- It does not choose your payment processor. Licensing, AML programme and
|
|
138
|
+
sanctions exposure are a business and compliance decision, and `README.md` says
|
|
139
|
+
so where a reader meets the crypto skill.
|
|
140
|
+
|
|
141
|
+
## Where the real risk is
|
|
142
|
+
|
|
143
|
+
Not the bytes — the advice. These six skills describe Stripe, Heleket and BTCPay,
|
|
144
|
+
Google Sign-In, Workload Identity Federation, four ad platforms and browser
|
|
145
|
+
defaults, and every one of those changes. **A claim here that a provider has since
|
|
146
|
+
changed is a security defect in this pack**, not merely a stale doc, and it is the
|
|
147
|
+
exposure the verification ledger names as the largest one this repository does not
|
|
148
|
+
test. **Neither that ledger nor the contributor guide is in this tarball** —
|
|
149
|
+
`docs/evidence/verification.md` and `CONTRIBUTING.md` live in the git repository at
|
|
150
|
+
<https://github.com/ssheleg/sheleg-dev>, and until 2026-08-20 this paragraph named
|
|
151
|
+
both as if you had them. The guide requires a claim about what a provider does
|
|
152
|
+
*today* to carry the date it was true. If you find one that has rotted, report it
|
|
153
|
+
with what the correct claim is and what backs it.
|
|
42
154
|
|
|
43
155
|
## Reporting a problem
|
|
44
156
|
|
|
45
|
-
Open an issue
|
|
46
|
-
|
|
47
|
-
arranged.
|
|
157
|
+
Open an issue: <https://github.com/ssheleg/sheleg-dev/issues>. **For a security
|
|
158
|
+
problem, do not put the details in a public issue** — open one saying you have
|
|
159
|
+
found something, and a private channel will be arranged.
|
|
48
160
|
|
|
49
161
|
## Verifying for yourself
|
|
50
162
|
|
|
51
163
|
```bash
|
|
52
164
|
git clone https://github.com/ssheleg/sheleg-dev && cd sheleg-dev
|
|
53
|
-
python3 test/validate.py # structure, version sync, references, links, anchors
|
|
54
|
-
python3 test/test_page_audit.py # auditor behavior, offline fixtures + scheme guard
|
|
55
|
-
grep -rnE "urlopen|build_opener|opener\.open|socket|subprocess|os\.system|\beval\(|\bexec\(|\bopen\(" \
|
|
56
|
-
plugins/sheleg-dev/skills/sheleg-dev/scripts/page_audit.py
|
|
57
|
-
```
|
|
58
165
|
|
|
59
|
-
The
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
166
|
+
# The whole gate: version sync across four manifests, front matter inside the
|
|
167
|
+
# Agent Skills limits, references resolving both directions, and every path the
|
|
168
|
+
# self-describing documents name -- this file included.
|
|
169
|
+
python3 test/validate.py
|
|
170
|
+
|
|
171
|
+
# The shipped payload: 52 files.
|
|
172
|
+
git ls-files plugins
|
|
173
|
+
|
|
174
|
+
# 22 lines: the plugin manifest, the three files of the manual gate, and the 18
|
|
175
|
+
# files of money fixtures. Everything else in the payload is markdown.
|
|
176
|
+
git ls-files plugins | grep -v '\.md$'
|
|
177
|
+
|
|
178
|
+
# Every require the gate makes: two lines, both in the hook -- `path`, and its own
|
|
179
|
+
# decision module. The decision module makes none.
|
|
180
|
+
grep -nE "\brequire\(" plugins/sheleg-dev/hooks/money-gate.js plugins/sheleg-dev/hooks/lib/moneygate.js
|
|
181
|
+
|
|
182
|
+
# What it cannot reach: NO OUTPUT, and grep exits 1 because it matched nothing.
|
|
183
|
+
grep -nE "child_process|\bfetch\(|require\('(http|https|net|fs|dns|tls)'\)|spawn\(|execFile|writeFile|appendFile|unlink" \
|
|
184
|
+
plugins/sheleg-dev/hooks/money-gate.js plugins/sheleg-dev/hooks/lib/moneygate.js
|
|
185
|
+
|
|
186
|
+
# Both directions of the gate, watched: every refusal and every false-positive
|
|
187
|
+
# plant. The command prints its own count -- this document does not restate it.
|
|
188
|
+
node test/moneygate_test.js
|
|
189
|
+
|
|
190
|
+
# The money fixtures: both assertion packs against their reference implementation, both
|
|
191
|
+
# --self-test runs (per ASSERTION, not per invariant), and the plants that neuter one.
|
|
192
|
+
# The command prints its own count.
|
|
193
|
+
node test/fixtures_test.js
|
|
194
|
+
|
|
195
|
+
# What the assertion packs cannot reach: NO OUTPUT, and grep exits 1 because it
|
|
196
|
+
# matched nothing. `readFileSync` of the fixtures beside them is their whole I/O.
|
|
197
|
+
grep -rnE "child_process|\bfetch\(|require\('(http|https|net|dns|tls)'\)|spawn\(|execFile|writeFileSync|appendFileSync|unlinkSync|process\.env\." \
|
|
198
|
+
plugins/sheleg-dev/skills/*/fixtures/*.mjs
|
|
199
|
+
|
|
200
|
+
# The entire I/O surface of the only two executable files: eleven lines. Three
|
|
201
|
+
# built-in requires, the copy/mkdir/remove calls, homedir, and install.sh's
|
|
202
|
+
# rm -rf + cp -R. No process, no socket, no network.
|
|
203
|
+
grep -nE "require|child_process|exec|spawn|fetch|socket|rm -rf|cp -R|copyFileSync|mkdirSync|rmSync|homedir" bin/sheleg-dev.js install.sh
|
|
204
|
+
|
|
205
|
+
# Live-key shapes across the skill payload: one line, and it is a placeholder.
|
|
206
|
+
grep -rnE "sk_live_[A-Za-z0-9]|rk_live_[A-Za-z0-9]|whsec_[A-Za-z0-9]{8}|BEGIN [A-Z ]*PRIVATE KEY" plugins
|
|
207
|
+
|
|
208
|
+
# What npm publishes, and nothing else: 58 files.
|
|
209
|
+
npm pack --dry-run
|
|
210
|
+
```
|
package/bin/sheleg-dev.js
CHANGED
|
@@ -93,6 +93,24 @@ function main(argv) {
|
|
|
93
93
|
force
|
|
94
94
|
);
|
|
95
95
|
}
|
|
96
|
+
|
|
97
|
+
// The manual gate does not travel this way, and saying so is the whole of what this
|
|
98
|
+
// installer can honestly do about it. `plugins/sheleg-dev/hooks/` is a PreToolUse hook
|
|
99
|
+
// that refuses a refund, a payout, a live key and the free-money path; the plugin
|
|
100
|
+
// channel loads it from the plugin manifest, this channel copies skills only.
|
|
101
|
+
//
|
|
102
|
+
// **It is a notice, not an install.** Writing to a person's `~/.claude/settings.json`
|
|
103
|
+
// is the one thing this repository must never do unasked: it is a file the operator
|
|
104
|
+
// owns and did not write, with no version control behind it, and the family umbrella
|
|
105
|
+
// carries two defects in its own history from doing exactly that. So the step is
|
|
106
|
+
// printed and left to the reader — README.md, "The manual gate", carries the JSON.
|
|
107
|
+
if (fs.existsSync(path.join(ROOT, 'plugins/sheleg-dev/hooks/hooks.json'))) {
|
|
108
|
+
console.log('');
|
|
109
|
+
console.log('Note: the manual gate (a PreToolUse hook refusing refunds, payouts, live');
|
|
110
|
+
console.log('keys and SKIP_BILLING in production) ships with the PLUGIN, not with this');
|
|
111
|
+
console.log('skills copy. To get it here, register it yourself — README.md, section');
|
|
112
|
+
console.log('"The manual gate", has the settings snippet. Nothing enforces this step.');
|
|
113
|
+
}
|
|
96
114
|
return 0;
|
|
97
115
|
}
|
|
98
116
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ssheleg/sheleg-dev",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Six integration skills for the layer a product reaches once it has users: Stripe subscription billing, crypto payments, ad and conversion tracking under Consent Mode v2, Google sign-in and the wider Google auth surface, and Core Web Vitals. This package is the installer CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"sheleg-dev": "bin/sheleg-dev.js"
|
|
@@ -43,6 +43,6 @@
|
|
|
43
43
|
"skill"
|
|
44
44
|
],
|
|
45
45
|
"scripts": {
|
|
46
|
-
"test": "python3 test/validate.py"
|
|
46
|
+
"test": "python3 test/validate.py && node test/moneygate_test.js && node test/fixtures_test.js"
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "sheleg-dev",
|
|
3
3
|
"displayName": "Sheleg Dev",
|
|
4
4
|
"description": "The integration layer a product needs once it has users: Stripe subscription billing reconciled into your own database, crypto payments that survive over-payment and duplicate webhooks, ad and conversion tracking under Consent Mode v2, Google sign-in with the account-linking guards, the wider Google auth surface, and Core Web Vitals work that moves the score.",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.8.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "ssheleg",
|
|
8
8
|
"url": "https://x.com/sshlg93"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "sheleg-dev — the manual gate. A PreToolUse hook that refuses money movement, an irreversible action, live production access and the pack's own free-money path unless the authorised person has signed the category off for this session. Deliberately carries NO `if` filter: the reference calls that filter best-effort and says it fails open on a command it cannot parse, so the decision is made in lib/moneygate.js instead. Exits 0 on every path, so a project that never touches payments sees nothing.",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"PreToolUse": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "Bash",
|
|
7
|
+
"hooks": [
|
|
8
|
+
{
|
|
9
|
+
"type": "command",
|
|
10
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/money-gate.js\"",
|
|
11
|
+
"statusMessage": "manual gate: money movement and live access",
|
|
12
|
+
"timeout": 15
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"matcher": "mcp__.*",
|
|
18
|
+
"hooks": [
|
|
19
|
+
{
|
|
20
|
+
"type": "command",
|
|
21
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/money-gate.js\"",
|
|
22
|
+
"statusMessage": "manual gate: money movement and live access",
|
|
23
|
+
"timeout": 15
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
}
|