@mostajs/pdf-sign-ui 0.2.0 → 0.3.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 +18 -0
- package/package.json +2 -2
- package/src/headless.js +32 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,24 @@
|
|
|
4
4
|
|
|
5
5
|
Le format suit [Keep a Changelog](https://keepachangelog.com/fr/) ; versionnage [SemVer](https://semver.org/lang/fr/).
|
|
6
6
|
|
|
7
|
+
## [0.3.0] — 2026-09-26
|
|
8
|
+
|
|
9
|
+
### Ajouté
|
|
10
|
+
- `buildSignRequest` transmet **`timestampUrl`** (horodatage RFC 3161, `@mostajs/pdf-sign` 0.3.0).
|
|
11
|
+
L'option s'y perdait **en silence** : le document sortait sans horodatage alors que l'appelant
|
|
12
|
+
croyait la date attestée par un tiers — donc opposable. Découvert en production.
|
|
13
|
+
- **Avertissement sur les clés perdues.** C'est la DEUXIÈME option évanouie de la même façon après
|
|
14
|
+
`openPassword` en 0.2.0, et le commentaire du code mettait pourtant en garde contre ce piège
|
|
15
|
+
exact. Un jeu de clés fermé est défendable ; le fermer **en silence** ne l'est pas.
|
|
16
|
+
`buildSignRequest` nomme désormais les options qu'il ignore.
|
|
17
|
+
|
|
18
|
+
On avertit sans lever : lever casserait un appelant passant une clé supplémentaire inoffensive,
|
|
19
|
+
alors que le but est seulement que la perte cesse d'être invisible.
|
|
20
|
+
|
|
21
|
+
### Modifié
|
|
22
|
+
- `peerDependencies["@mostajs/pdf-sign"]` : `^0.2.0` → `^0.3.0`.
|
|
23
|
+
|
|
24
|
+
|
|
7
25
|
## 0.2.0 — 2026-09-21
|
|
8
26
|
|
|
9
27
|
### Ajouté
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mostajs/pdf-sign-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Couche de présentation de @mostajs/pdf-sign — logique headless (validation du formulaire de signature, préréglages de documents officiels/SIH, view-models de vérification, contrôleur). Framework-agnostique, zéro dépendance.",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"author": "Dr Hamid MADANI <drmdh@msn.com>",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"example": "node examples/verify-viewmodel.mjs"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"@mostajs/pdf-sign": "^0.
|
|
25
|
+
"@mostajs/pdf-sign": "^0.3.0",
|
|
26
26
|
"react": ">=18"
|
|
27
27
|
},
|
|
28
28
|
"peerDependenciesMeta": {
|
package/src/headless.js
CHANGED
|
@@ -68,6 +68,33 @@ function isBox(b) {
|
|
|
68
68
|
* @param {object} data
|
|
69
69
|
* @returns {import("@mostajs/pdf-sign").SignOptions}
|
|
70
70
|
*/
|
|
71
|
+
/**
|
|
72
|
+
* Les clés que `buildSignRequest` sait recopier. Tout le reste est PERDU.
|
|
73
|
+
*
|
|
74
|
+
* ⚠️ Deux options s'y sont déjà évanouies sans bruit : `openPassword` — le document sortait
|
|
75
|
+
* déverrouillé alors que l'appelant le croyait fermé — puis `timestampUrl` — le document sortait
|
|
76
|
+
* sans horodatage alors que l'appelant croyait la date attestée. Deux fois, le même mécanisme, et
|
|
77
|
+
* deux fois découvert en production.
|
|
78
|
+
*
|
|
79
|
+
* Fermer le jeu est un choix défendable ; le fermer EN SILENCE ne l'est pas. On avertit donc, sans
|
|
80
|
+
* lever : lever casserait un appelant qui passe une clé supplémentaire inoffensive, alors que le
|
|
81
|
+
* but est seulement que la perte cesse d'être invisible.
|
|
82
|
+
*/
|
|
83
|
+
const CLES_CONNUES = new Set([
|
|
84
|
+
'input', 'output', 'p12', 'passphrase', 'passphraseFile', 'engine',
|
|
85
|
+
'reason', 'name', 'location', 'contact', 'preset',
|
|
86
|
+
'page', 'box', 'stampImage', 'permissions', 'restrict',
|
|
87
|
+
'openPassword', 'timestampUrl',
|
|
88
|
+
]);
|
|
89
|
+
|
|
90
|
+
function signalerClesPerdues(data) {
|
|
91
|
+
const perdues = Object.keys(data || {}).filter((k) => !CLES_CONNUES.has(k) && data[k] !== undefined);
|
|
92
|
+
if (perdues.length) {
|
|
93
|
+
console.warn('[pdf-sign-ui] option(s) ignorée(s) par buildSignRequest, donc PERDUE(S) : '
|
|
94
|
+
+ perdues.join(', ') + '. Ajoutez-les au jeu de clés ou retirez-les de l’appel.');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
71
98
|
export function buildSignRequest(data = {}) {
|
|
72
99
|
const preset = data.preset ? getPreset(data.preset) : undefined;
|
|
73
100
|
const reason = data.reason || preset?.reason;
|
|
@@ -99,7 +126,12 @@ export function buildSignRequest(data = {}) {
|
|
|
99
126
|
// et le document sort sans elle — sans erreur. `openPassword` a été perdu ainsi jusqu'en
|
|
100
127
|
// 0.2.0 : le document s'ouvrait alors que l'appelant le croyait verrouillé.
|
|
101
128
|
openPassword: data.openPassword || undefined,
|
|
129
|
+
// Horodatage RFC 3161 (`@mostajs/pdf-sign` 0.3.0) : fait passer la signature de PAdES-B à
|
|
130
|
+
// PAdES-T. Perdu ici en silence lors de sa première intégration — exactement comme
|
|
131
|
+
// `openPassword` avant lui. D'où l'avertissement ci-dessous.
|
|
132
|
+
timestampUrl: data.timestampUrl || undefined,
|
|
102
133
|
};
|
|
134
|
+
signalerClesPerdues(data);
|
|
103
135
|
return prune(req);
|
|
104
136
|
}
|
|
105
137
|
|