Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
228b09f
feat(lua/resty/pay_kit): Signer factory family + Demo singleton + Kms…
EfeDurmaz16 May 27, 2026
e9b076e
feat(lua/resty/pay_kit): Operator + configure() + usd() price helper
EfeDurmaz16 May 27, 2026
ebe2fb1
feat(lua/resty/pay_kit): Ed25519 backend abstraction (lua-resty-opens…
EfeDurmaz16 May 27, 2026
42507b3
feat(lua/resty/pay_kit): Gate registry + Fee value object + dynamic g…
EfeDurmaz16 May 27, 2026
98ffbed
feat(lua/resty/pay_kit/schemes): MPP adapter + x402 self-hosted wire-…
EfeDurmaz16 May 27, 2026
3875207
feat(lua/resty/pay_kit): dispatcher + replay store (require_payment, …
EfeDurmaz16 May 27, 2026
38399f3
feat(lua/mpp): deprecation warn-once on require, pointing at resty.pa…
EfeDurmaz16 May 27, 2026
5f9789d
feat(lua/kong/apisix): Kong + APISIX plugin shims (kong-plugin-pay-ki…
EfeDurmaz16 May 27, 2026
371c8fa
docs(lua): new OpenResty example + Kong plugin walkthrough + top-leve…
EfeDurmaz16 May 27, 2026
66a9666
build(lua): rockspecs (lua-resty-pay-kit + Kong + APISIX) + CI workfl…
EfeDurmaz16 May 27, 2026
e6f785a
feat(lua/resty/pay_kit/schemes/x402): port the 11-rule structural ver…
EfeDurmaz16 May 27, 2026
ba27441
feat(harness/lua-server): dual-protocol Lua adapter (mirror of harnes…
EfeDurmaz16 May 27, 2026
9f4f50d
chore(lua/.luacov): include resty/pay_kit, kong/, apisix/ trees in co…
EfeDurmaz16 May 27, 2026
729d9de
refactor(lua): align file structure with DESIGN.md Layers + matrix lu…
EfeDurmaz16 May 27, 2026
a5784e4
ci(lua): wire dual-protocol interop step (mpp charge + x402 exact) ag…
EfeDurmaz16 May 27, 2026
1d03f56
fix(lua/pay_kit/tx_cosign): return base64 string for sendTransaction
EfeDurmaz16 May 27, 2026
551cbcb
fix(lua/pay_kit/x402): drop ttl=true arg and guard wrong_network to m…
EfeDurmaz16 May 27, 2026
8303d5e
fix(lua/pay_kit/mpp): wire verify_payment callback, parse credential,…
EfeDurmaz16 May 27, 2026
25696b4
feat(harness/lua-server): read MPP_INTEROP_SPLITS + map verify errors…
EfeDurmaz16 May 27, 2026
d8bf95e
fix(lua): port PR #142 follow-ups (surfnet default RPC + readme tighten)
EfeDurmaz16 May 27, 2026
289e10b
feat(lua/pay_kit/x402): embed server blockhash in challenge.extra.rec…
EfeDurmaz16 May 27, 2026
128e43a
feat(lua/pay_kit): boot-time preflight with surfnet cheatcode auto-bo…
EfeDurmaz16 May 27, 2026
7954f7f
fix(lua/pay_kit/util/crypto): re-export constant_time_equal from mpp.…
EfeDurmaz16 May 27, 2026
379eb78
test(lua/pay_kit): expand spec suite + push coverage gate to 90.92%
EfeDurmaz16 May 27, 2026
4ca6134
test(harness/x402-exact): scope lua serverIds to pairs that can actua…
EfeDurmaz16 May 27, 2026
81973fa
ci: re-trigger after surfpool flake on the TS-to-Rust interop step
EfeDurmaz16 May 27, 2026
f97ddd6
docs(lua/README + skill): rewrite per issue #122 README guidelines
EfeDurmaz16 May 27, 2026
3b06d38
refactor(lua/pay_kit): split protocols/ by protocol then scheme (Ludo…
EfeDurmaz16 May 27, 2026
38c23a0
refactor(lua): drop the backward-compat / deprecation shims (Ludo rev…
EfeDurmaz16 May 27, 2026
bb32bc1
refactor(lua): drop resty/ prefix, plugins/ subtree, solana/ split (L…
EfeDurmaz16 May 27, 2026
ef50b9a
ci: re-trigger after GHA artifact-upload 403 on Rust surfpool report
EfeDurmaz16 May 27, 2026
b66c719
refactor(lua): collapse mpp/ into pay_kit/ per Ruby's structure (Ludo)
EfeDurmaz16 May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 32 additions & 7 deletions .github/workflows/lua.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ jobs:
uses: actions/cache@v4
with:
path: lua/lua_modules
key: ${{ runner.os }}-luarocks-v2-${{ hashFiles('lua/mpp-dev-1.rockspec', 'lua/.luacov', 'lua/.luacheckrc') }}
key: ${{ runner.os }}-luarocks-v2-${{ hashFiles('lua/pay-kit-dev-1.rockspec', 'lua/.luacov', 'lua/.luacheckrc') }}
restore-keys: ${{ runner.os }}-luarocks-v2-

- name: Install dev rocks (luacheck + luacov + luasocket + luasodium + luasec)
- name: Install dev rocks (luacheck + luacov + luasocket + luasodium + luasec + lua-resty-openssl + cjson)
if: steps.cache-rocks.outputs.cache-hit != 'true'
working-directory: lua
run: |
Expand All @@ -39,16 +39,21 @@ jobs:
luarocks --lua-version=5.1 install --tree lua_modules luasocket
luarocks --lua-version=5.1 install --tree lua_modules luasodium
luarocks --lua-version=5.1 install --tree lua_modules luasec OPENSSL_DIR=/usr
luarocks --lua-version=5.1 install --tree lua_modules lua-resty-openssl
luarocks --lua-version=5.1 install --tree lua_modules lua-cjson

- name: Validate rockspec
- name: Validate rockspecs
working-directory: lua
run: luarocks --lua-version=5.1 lint mpp-dev-1.rockspec
run: |
luarocks --lua-version=5.1 lint pay-kit-dev-1.rockspec
luarocks --lua-version=5.1 lint kong-plugin-pay-kit-dev-1.rockspec
luarocks --lua-version=5.1 lint apisix-plugin-pay-kit-dev-1.rockspec

- name: Lint
working-directory: lua
run: |
eval "$(luarocks --lua-version=5.1 --tree lua_modules path)"
luacheck mpp/ tests/
luacheck pay_kit/ plugins/ tests/

- name: Run tests with coverage
working-directory: lua
Expand All @@ -61,7 +66,7 @@ jobs:
luacov
./scripts/check_coverage.sh ../luacov.report.out 90

# Codex PR #103 P3: the coverage gate excludes mpp/methods/solana/ata
# Codex PR #103 P3: the coverage gate excludes pay_kit/solana/ata
# because luacov disables LuaJIT trace recording and the on-curve check
# becomes ~100x slower under coverage. Run the suite a second time
# WITHOUT luacov so the protocol-critical ATA fixture spec
Expand Down Expand Up @@ -106,7 +111,7 @@ jobs:
uses: actions/cache@v4
with:
path: lua/lua_modules
key: ${{ runner.os }}-luarocks-v2-${{ hashFiles('lua/mpp-dev-1.rockspec', 'lua/.luacov', 'lua/.luacheckrc') }}
key: ${{ runner.os }}-luarocks-v2-${{ hashFiles('lua/pay-kit-dev-1.rockspec', 'lua/.luacov', 'lua/.luacheckrc') }}
restore-keys: ${{ runner.os }}-luarocks-v2-

- name: Install runtime rocks
Expand All @@ -118,6 +123,8 @@ jobs:
luarocks --lua-version=5.1 install --tree lua_modules luasocket
luarocks --lua-version=5.1 install --tree lua_modules luasodium
luarocks --lua-version=5.1 install --tree lua_modules luasec OPENSSL_DIR=/usr
luarocks --lua-version=5.1 install --tree lua_modules lua-resty-openssl
luarocks --lua-version=5.1 install --tree lua_modules lua-cjson

- uses: actions/setup-node@v4
with:
Expand Down Expand Up @@ -160,3 +167,21 @@ jobs:
MPP_INTEROP_SERVERS: lua
MPP_INTEROP_SCENARIOS: charge-basic,charge-split-ata
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "rust client pays lua server"

# Dual-protocol proof: one e2e run drives MPP charge scenarios
# (typescript client) and x402 exact (rust-x402 client) against
# the same Lua adapter binary. Mirrors the ruby workflow's
# interop-ruby step. The dual-protocol Lua adapter at
# harness/lua-server/server.lua reads either MPP_INTEROP_* or
# X402_INTEROP_* env (or the PAY_KIT_INTEROP_PROTOCOL hint that
# the matrix stamps when both namespaces are populated against
# the same surfpool fixtures) and routes through resty.pay_kit.
- name: Run PayKit interop smoke (mpp charge + x402 exact)
working-directory: harness
env:
MPP_INTEROP_CLIENTS: typescript
MPP_INTEROP_SERVERS: lua,typescript
MPP_INTEROP_INTENTS: charge,x402-exact
X402_INTEROP_CLIENTS: rust-x402
X402_INTEROP_SERVERS: ""
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "lua" --testTimeout 180000
Loading
Loading