Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
b349857
Edit fingerprint
CiottoliDev Apr 18, 2025
b0fe8ca
fix: Rename 'fullVat' to 'tin' in schema for clarity
CiottoliDev Jun 3, 2025
597b338
Aggiunta bozza nuova architettura
CiottoliDev Jun 12, 2025
abadcc3
Merge branch 'v2s' into v2s
CiottoliDev Jun 12, 2025
3b43370
V2s (#14)
CiottoliDev Jun 12, 2025
28ae870
Add beta badge styles and tooltip functionality
CiottoliDev Jun 13, 2025
92ae652
feat: Aggiunge endpoint per la gestione dei metodi di pagamento
CiottoliDev Jun 13, 2025
dbc24ba
Merge branch 'v2s' into v2s
CiottoliDev Jun 13, 2025
d3d2a83
Merge pull request #15 from CiottoliDev/v2s
CiottoliDev Jun 13, 2025
75f0438
chore: Rimuove file components.html non più necessario
CiottoliDev Jun 13, 2025
8392fb1
Merge branch 'v2s' of https://github.com/CiottoliDev/flowpay-client-o…
CiottoliDev Jun 13, 2025
b984162
feat: Rimuove l'endpoint per l'aggiornamento di un metodo di pagamento
CiottoliDev Jun 13, 2025
393b286
Adds support for sandbox, mock servers, and 'Charge' API
CiottoliDev Jun 16, 2025
3d9a39d
Merge pull request #16 from CiottoliDev/v2s
CiottoliDev Jun 16, 2025
227df76
fix: Aggiorna descrizioni nel file openapi.json
CiottoliDev Jun 16, 2025
f531704
Enhances documentation with sandbox details and contribution info
CiottoliDev Jun 16, 2025
fc2b48d
feat: Aggiunge documentazione per l'ambiente mock e la validazione de…
CiottoliDev Jun 16, 2025
e7e0c2c
feat: Aggiorna la documentazione sulla paginazione delle API con dett…
CiottoliDev Jun 16, 2025
a886991
Merge pull request #17 from CiottoliDev/v2s
RaesakAce Jun 16, 2025
7e28b7f
feat: Aggiunge nuove operazioni per la gestione delle banche e dei fi…
CiottoliDev Jun 16, 2025
9d60b44
feat: Aggiunge un nuovo server di sandbox condiviso per test e svilup…
CiottoliDev Jun 16, 2025
0d40f32
Merge pull request #18 from CiottoliDev/v2s
RaesakAce Jun 16, 2025
84d2b29
feat: Aggiorna la documentazione sul pagamento in blocco con dettagli…
CiottoliDev Jun 18, 2025
0cbd6fc
feat: Aggiunge documentazione per i pagamenti in blocco e il calcolo …
CiottoliDev Jun 18, 2025
d9c3ea7
fix: Corregge il riferimento al documento di descrizione del debitore
CiottoliDev Jun 18, 2025
7ebc466
fix: Corregge il riferimento al documento di descrizione del debitore
CiottoliDev Jun 18, 2025
8f6b14f
Merge pull request #19 from CiottoliDev/v2s
RaesakAce Jun 18, 2025
9004456
rtp description
RaesakAce Jun 18, 2025
ba305fc
added split payment and rtp description to openapi specification
RaesakAce Jun 19, 2025
3df0943
locked payment
RaesakAce Jul 1, 2025
58a4ecb
Merge pull request #20 from RaesakAce/v2s
RaesakAce Jul 1, 2025
fcacd88
feat: Aggiorna la documentazione sull'onboarding e le limitazioni del…
CiottoliDev Aug 18, 2025
9f9f617
Merge pull request #21 from CiottoliDev/v2s
CiottoliDev Aug 18, 2025
fcfd6f0
fix: Corregge errori di battitura e migliora la chiarezza nella docum…
CiottoliDev Aug 20, 2025
25bf80e
English translation
CiottoliDev Aug 20, 2025
a48cf77
fix: Aggiorna il sistema di autenticazione da basicAuth a ApiKeyAuth …
CiottoliDev Aug 20, 2025
3fca228
feat: Aggiunge la documentazione per il checkout ospitato e i paramet…
CiottoliDev Aug 21, 2025
2a503b0
Merge branch 'v2s' into v2s
RaesakAce Aug 21, 2025
4d12882
Merge pull request #22 from CiottoliDev/v2s
RaesakAce Aug 21, 2025
b2191d4
add rtp fnctional overview
CiottoliDev Aug 21, 2025
842a5f4
Merge branch 'v2s' of https://github.com/CiottoliDev/flowpay-client-o…
CiottoliDev Aug 21, 2025
e616485
Merge pull request #23 from CiottoliDev/v2s
CiottoliDev Aug 21, 2025
538e1da
Update additional Payees to support remittance
RaesakAce Aug 27, 2025
a22755f
Merge branch 'v2s' into v2s
RaesakAce Aug 27, 2025
61e722a
Merge pull request #24 from RaesakAce/v2s
RaesakAce Aug 27, 2025
7a87703
correction on customer additional payee
RaesakAce Aug 27, 2025
291c474
Merge pull request #25 from RaesakAce/v2s
RaesakAce Aug 27, 2025
070ccfb
fix: Aggiunge file 'Simplified Flow.pdf' e 'old-openapi.json' al .git…
CiottoliDev Sep 15, 2025
f458ad5
payment callback
CiottoliDev Sep 15, 2025
157f689
feat: Aggiungi documentazione per la verifica della firma e dettagli …
CiottoliDev Sep 15, 2025
921fa4b
feat: Aggiorna la documentazione e lo stato dei pagamenti nel file op…
CiottoliDev Sep 15, 2025
f7d1061
webhook
CiottoliDev Sep 15, 2025
6a15d39
state transition for each payment request type
CiottoliDev Sep 15, 2025
d7afd5e
documentazione ais as a service
RaesakAce Oct 13, 2025
6fc7c4b
Merge pull request #28 from RaesakAce/v2s
RaesakAce Oct 17, 2025
8d66725
📝 update api endpoints
alsd4git Oct 28, 2025
9da05f5
🎨 removed extra slash
alsd4git Oct 28, 2025
f37eb6e
Merge pull request #29 from alsd4git/v2s
RaesakAce Oct 28, 2025
26790c8
📝 add allowedMethods to the payment-requests POST endpoint
alsd4git Dec 1, 2025
33b936f
Merge pull request #30 from alsd4git/v2s
RaesakAce Dec 3, 2025
91bda11
feat: Rimuove documentazione obsoleta e aggiorna descrizioni nei file…
CiottoliDev Dec 10, 2025
e325166
feat: Aggiungi supporto per metodi di pagamento e payload nel file op…
CiottoliDev Dec 10, 2025
53a444c
Merge branch 'v2s' into v2s
RaesakAce Dec 10, 2025
f300759
Merge pull request #31 from CiottoliDev/v2s
RaesakAce Dec 10, 2025
061b28f
🐛 remove duplicated key allowedMethods
alsd4git Dec 10, 2025
f2d64c5
Merge pull request #32 from alsd4git/v2s
RaesakAce Dec 10, 2025
80543c2
Refactor OpenAPI schema for payment requests and update validation ru…
CiottoliDev Dec 19, 2025
f833827
Merge pull request #33 from CiottoliDev/v2s
RaesakAce Dec 22, 2025
73a848f
📝 align code and openapi
alsd4git Dec 22, 2025
f8a79fa
Merge pull request #34 from alsd4git/v2s
RaesakAce Dec 23, 2025
48eeaaf
🎨 change Charge output to PaymentRequest one
alsd4git Jan 9, 2026
f9494a3
Merge pull request #35 from alsd4git/v2s
RaesakAce Jan 9, 2026
a5597ca
Rename fields in openapi.json for consistency (#36)
CiottoliDev Jan 21, 2026
cb90727
Verifica DTO Swift gateway.client
CiottoliDev Feb 11, 2026
83ee222
Merge pull request #38 from CiottoliDev/v2s
RaesakAce Feb 11, 2026
773efb0
Add reusable docs build workflow
CiottoliDev Feb 16, 2026
5eb827a
Remove paths filter from push event in workflow
CiottoliDev Feb 16, 2026
db19fc9
fix: vendor docs workflow for public github pages (#40)
alsd4git Feb 18, 2026
95bf386
Update paymentMethod info
CiottoliDev Feb 18, 2026
da2135a
Fix payer phone format in payment requests (#42)
CiottoliDev Mar 4, 2026
67a583c
docs(ais): 📝 align balance schema with dynamic fields
alsd4git Mar 12, 2026
c0d2a42
docs(ais): 📝 remove accountId from AIS schemas
alsd4git Mar 12, 2026
e713803
docs(ais): 📝 document known balance fields
alsd4git Mar 12, 2026
4e1ab49
docs(ais): 📝 add explicit balance examples
alsd4git Mar 12, 2026
003c06a
docs(ais): 📝 clarify iban requirement in schemas
alsd4git Mar 12, 2026
60f6672
Merge pull request #43 from alsd4git/v2s
RaesakAce Apr 2, 2026
9ca2ced
clarify balance types
RaesakAce Apr 3, 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
43 changes: 43 additions & 0 deletions .github/scripts/docs/fix_asset_paths.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/usr/bin/env python3
import io
import os
import sys

def rewrite_paths(path: str) -> bool:
if not os.path.isfile(path):
return False
with io.open(path, 'r', encoding='utf-8', errors='ignore') as f:
s = f.read()

# Markdown: ](/docs/... -> ](./docs/...
s = s.replace('](/docs/', '](./docs/')
# Markdown escaped (embedded JSON): ](\/docs\/ -> ](./docs/
s = s.replace('](\\/docs\\/', '](./docs/')

# HTML attributes
s = s.replace('src="/docs/', 'src="./docs/')
s = s.replace("src='/docs/", "src='./docs/")
s = s.replace('href="/docs/', 'href="./docs/')
s = s.replace("href='/docs/", "href='./docs/")

# Generic occurrences in embedded JSON: \/docs\/ -> \.\/docs\/
s = s.replace('\\/docs\\/', '\\./docs\\/')

with io.open(path, 'w', encoding='utf-8') as f:
f.write(s)
print(f"Rewrote /docs -> ./docs in {path}")
return True


def main(argv):
if len(argv) < 2:
print("Usage: fix_asset_paths.py <index.html>", file=sys.stderr)
return 2
path = argv[1]
ok = rewrite_paths(path)
return 0 if ok else 0


if __name__ == '__main__':
raise SystemExit(main(sys.argv))

84 changes: 84 additions & 0 deletions .github/scripts/docs/inject_mermaid.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
#!/usr/bin/env bash
set -euo pipefail

# Usage:
# bash scripts/docs/inject_mermaid.sh <INDEX_HTML> [MERMAID_VERSION]
# or with env vars INDEX and MERMAID_VERSION

INDEX="${1:-${INDEX:-}}"
MERMAID_VERSION="${2:-${MERMAID_VERSION:-10}}"

if [[ -z "${INDEX}" ]]; then
echo "INDEX path not provided" >&2
exit 1
fi

if [[ ! -f "${INDEX}" ]]; then
echo "Index not found: ${INDEX}"
exit 0
fi

export INDEX MERMAID_VERSION
python3 - << 'PY'
import os, io

p = os.environ['INDEX']
version = os.environ.get('MERMAID_VERSION', '10')

with io.open(p, 'r', encoding='utf-8', errors='ignore') as f:
s = f.read()

if '<!-- MERMAID_INJECT_START -->' in s:
print('Mermaid already injected; skipping.')
else:
inject = '''\
<!-- MERMAID_INJECT_START -->
<style>.mermaid{max-width:100%;overflow-x:auto}</style>
<script src="https://cdn.jsdelivr.net/npm/mermaid@__VER__/dist/mermaid.min.js"></script>
<script>
(function(){
function convertBlocks(root){
var blocks = root.querySelectorAll('pre code.language-mermaid, pre code.lang-mermaid, code.mermaid');
blocks.forEach(function(code){
var txt = code.textContent;
var pre = code.closest && code.closest('pre') || code;
var div = document.createElement('div');
div.className = 'mermaid';
div.textContent = txt;
if (pre && pre.parentNode) pre.parentNode.replaceChild(div, pre); else code.parentNode.replaceChild(div, code);
});
}
function renderAll(){
try {
if (window.mermaid) {
mermaid.initialize({ startOnLoad: false, securityLevel: 'loose' });
if (mermaid.run) { mermaid.run({ querySelector: '.mermaid' }); }
else if (mermaid.init) { mermaid.init(undefined, '.mermaid'); }
}
} catch(e){ console.error('Mermaid init error', e); }
}
function process(){ convertBlocks(document); renderAll(); }
window.addEventListener('load', function(){
process();
var obs = new MutationObserver(function(){
if (document.querySelector('pre code.language-mermaid, pre code.lang-mermaid, code.mermaid')) {
process();
}
});
obs.observe(document.body, { childList: true, subtree: true });
});
})();
</script>
<!-- MERMAID_INJECT_END -->'''
inject = inject.replace('__VER__', version)

if '</body>' in s:
s = s.replace('</body>', inject + '\n</body>', 1)
else:
s = s + inject

with io.open(p, 'w', encoding='utf-8') as f:
f.write(s)
print('Injected Mermaid support into', p)
PY

207 changes: 207 additions & 0 deletions .github/workflows/backend-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
name: backend-docs

on:
workflow_call:
inputs:
docs_dir:
description: Directory contenente description.md e openapi
required: false
default: "docs"
type: string
openapi_path:
description: Path a openapi (se non usare autodetect)
required: false
default: ""
type: string
mermaid_version:
description: Versione di Mermaid JS da iniettare (es. 10 o 10.9.1)
required: false
default: "10"
type: string
description_md:
description: Path a description.md (se diverso da default)
required: false
default: ""
type: string
output_dir:
description: Directory di output static site (per Pages)
required: false
default: "site"
type: string
node_version:
description: Versione Node per npx (@redocly/cli/marked)
required: false
default: "20"
type: string
deploy_pages:
description: Esegui deploy su GitHub Pages
required: false
default: "true"
type: string
checkout_submodules:
description: Checkout Git submodules as part of docs (true/false)
required: false
default: "false"
type: string
publish:
description: When 'true' uploads artifact and deploys Pages
required: false
default: "true"
type: string

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: "pages"
cancel-in-progress: false

jobs:
build-and-publish-docs:
name: Build Redoc HTML and Publish
runs-on: ubuntu-22.04
timeout-minutes: 20
defaults:
run:
working-directory: ${{ github.workspace }}

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: ${{ inputs.checkout_submodules == 'true' }}
# If you use submodules to pull docs from private repos, set submodules: true in the caller
# with:
# submodules: true

- name: Check gh-pages branch availability
if: ${{ inputs.publish == 'true' && (inputs.deploy_pages || 'true') == 'true' }}
id: ghpages
shell: bash
run: |
set -euo pipefail
if git ls-remote --exit-code --heads "https://github.com/${GITHUB_REPOSITORY}.git" gh-pages >/dev/null 2>&1; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
echo "::notice title=gh-pages branch::No gh-pages branch found. Building from empty site state."
fi

- name: Checkout existing Pages (gh-pages)
if: ${{ inputs.publish == 'true' && (inputs.deploy_pages || 'true') == 'true' && steps.ghpages.outputs.exists == 'true' }}
uses: actions/checkout@v4
with:
ref: gh-pages
path: .gh-pages-prev

- name: Setup Node.js ${{ inputs.node_version }}
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node_version || '20' }}

- name: Resolve BRANCH_DIR (head_ref or ref_name)
id: branchdir
shell: bash
run: |
set -euo pipefail
if [[ -n "${GITHUB_HEAD_REF:-}" ]]; then
RAW="$GITHUB_HEAD_REF"
else
RAW="$GITHUB_REF_NAME"
fi
SANITIZED="${RAW//\//-}"
echo "Resolved BRANCH values: raw='$RAW' sanitized='$SANITIZED'"
echo "::notice title=BRANCH_DIR::Using '$SANITIZED' (raw: '$RAW')"
echo "BRANCH_RAW=$RAW" >> "$GITHUB_ENV"
echo "BRANCH_DIR=$SANITIZED" >> "$GITHUB_ENV"
echo "dir=$SANITIZED" >> "$GITHUB_OUTPUT"
echo "raw=$RAW" >> "$GITHUB_OUTPUT"

- name: Build docs with @redocly/cli (bundle per branch)
shell: bash
run: |
set -euo pipefail
DOCS_DIR="${{ inputs.docs_dir || 'docs' }}"
OPENAPI="${{ inputs.openapi_path || '' }}"
OUT_DIR="${{ inputs.output_dir || 'site' }}"
BRANCH_DIR="${BRANCH_DIR}"
mkdir -p "$OUT_DIR"
if [[ -d .gh-pages-prev ]]; then
rsync -a --exclude '.git' .gh-pages-prev/ "$OUT_DIR/" || true
fi
if [[ -z "$OPENAPI" ]]; then
for f in "$DOCS_DIR"/openapi.yaml "$DOCS_DIR"/openapi.yml "$DOCS_DIR"/openapi.json; do
if [[ -f "$f" ]]; then OPENAPI="$f"; break; fi
done
fi
if [[ -z "$OPENAPI" || ! -f "$OPENAPI" ]]; then
echo "File OpenAPI non trovato (cerca in ${DOCS_DIR}/openapi.yaml|yml|json o specifica input openapi_path)" >&2
exit 2
fi
mkdir -p "$OUT_DIR/$BRANCH_DIR"

npx -y @redocly/cli build-docs "$OPENAPI" -o "$OUT_DIR/$BRANCH_DIR/index.html"
rsync -a --include='*/' --include='*.png' --exclude='*' "$DOCS_DIR"/ "$OUT_DIR/$BRANCH_DIR/docs/" || true


- name: Fix asset paths in generated HTML (HTML + embedded JSON)
shell: bash
continue-on-error: true
run: |
set -euo pipefail
OUT_DIR="${{ inputs.output_dir || 'site' }}"
BRANCH_DIR="${BRANCH_DIR}"
INDEX="$OUT_DIR/$BRANCH_DIR/index.html"

if [[ ! -f "$INDEX" ]]; then
echo "Index not found: $INDEX"
exit 0
fi
python3 ".github/scripts/docs/fix_asset_paths.py" "$INDEX"

- name: Enable Mermaid diagrams (inject script)
shell: bash
continue-on-error: true
run: |
set -euo pipefail
OUT_DIR="${{ inputs.output_dir || 'site' }}"
BRANCH_DIR="${BRANCH_DIR}"
INDEX="$OUT_DIR/$BRANCH_DIR/index.html"
MERMAID_VERSION="${{ inputs.mermaid_version || '10' }}"
bash ".github/scripts/docs/inject_mermaid.sh" "$INDEX" "$MERMAID_VERSION"
# --- publish gating (artifact + deploy) ---

- name: Upload Pages artifact
if: ${{ inputs.publish == 'true' && (inputs.deploy_pages || 'true') == 'true' }}
uses: actions/upload-pages-artifact@v3
with:
name: github-pages-${{ github.run_id }}-${{ github.run_attempt }}
path: ${{ inputs.output_dir || 'site' }}

- name: Deploy to GitHub Pages
if: ${{ inputs.publish == 'true' && (inputs.deploy_pages || 'true') == 'true' }}
id: deployment
uses: actions/deploy-pages@v4
with:
artifact_name: github-pages-${{ github.run_id }}-${{ github.run_attempt }}

- name: Report GitHub Pages URLs
if: ${{ inputs.publish == 'true' && (inputs.deploy_pages || 'true') == 'true' && steps.deployment.outputs.page_url != '' }}
shell: bash
run: |
set -euo pipefail
BASE_URL="${{ steps.deployment.outputs.page_url }}"
BRANCH_URL="${BASE_URL%/}/${BRANCH_DIR}/"
echo "::notice title=Pages base URL::${BASE_URL}"
echo "::notice title=Pages branch URL::${BRANCH_URL}"
{
echo "### GitHub Pages"
echo "- Base URL: ${BASE_URL}"
echo "- Branch URL (${BRANCH_RAW}): ${BRANCH_URL}"
} >> "$GITHUB_STEP_SUMMARY"

- name: Skipping publish (publish='${{ inputs.publish }}', deploy_pages='${{ inputs.deploy_pages }}')
if: ${{ inputs.publish != 'true' || (inputs.deploy_pages || 'true') != 'true' }}
run: echo "Skipping artifact upload and deploy (publish=${{ inputs.publish }}, deploy_pages=${{ inputs.deploy_pages }})"
21 changes: 21 additions & 0 deletions .github/workflows/docs-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Docs Build

on:
push:
workflow_dispatch:
pull_request:
paths:
- "docs/**"
- "openapi.json"
- ".github/workflows/docs-build.yml"
- ".github/workflows/backend-docs.yml"
- ".github/scripts/docs/**"

jobs:
build:
name: Reusable Docs Build
uses: ./.github/workflows/backend-docs.yml
with:
docs_dir: docs
openapi_path: openapi.json
publish: ${{ github.event_name == 'push' && 'true' || 'false' }}
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
.vscode/*
.DS_Store
openapi.html
postman_collection.json
Simplified Flow.pdf
old-openapi.json
.tmp/
Loading
Loading