@mostajs/blob-store 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.
@@ -2,19 +2,24 @@
2
2
  // Author: Dr Hamid MADANI <drmdh@msn.com>
3
3
  // License: AGPL-3.0-or-later
4
4
  //
5
- // ZÉRO DÉPENDANCE. S3 n'est que du HTTP signé : inutile de tirer `@aws-sdk/client-s3`
6
- // (des dizaines de Mo de dépendances) pour poser et relire des octets. On signe nous-mêmes,
7
- // avec `node:crypto` — et le pilote fonctionne alors avec TOUT service S3-compatible
8
- // (AWS, MinIO, Scaleway, Wasabi, Backblaze…), pas seulement AWS.
5
+ // S3 n'est que du HTTP signé : inutile de tirer `@aws-sdk/client-s3` (des dizaines de Mo de
6
+ // dépendances) pour poser et relire des octets. On signe nous-mêmes — et le pilote fonctionne
7
+ // alors avec TOUT service S3-compatible (AWS, MinIO, Scaleway, Wasabi, Backblaze…), pas
8
+ // seulement AWS.
9
9
  //
10
10
  // Référence : AWS Signature Version 4 — « Create a signed request ».
11
11
  // La correction de ce fichier est vérifiée contre les VECTEURS OFFICIELS d'AWS
12
12
  // (test-scripts/sigv4.test.mjs) : une signature fausse échouerait en silence côté serveur,
13
13
  // avec un « 403 SignatureDoesNotMatch » indéchiffrable.
14
- import { createHash, createHmac } from 'node:crypto';
14
+ // Les primitives viennent de @mostajs/crypto-box — la MAISON UNIQUE des primitives de
15
+ // l'écosystème. blob-store gagne ainsi UNE dépendance (kernel → kernel, autorisée §5.bis) et
16
+ // perd son « zéro dépendance » LITTÉRAL. Le prix est assumé : c'est ce qui garantit qu'un
17
+ // durcissement cryptographique profite à TOUS les modules, au lieu de rester bloqué dans
18
+ // celui qui l'a écrit — la divergence exacte qu'on a trouvée entre url et storage.
19
+ import { sha256, hmacSha256Bytes } from '@mostajs/crypto-box';
15
20
  const ALGO = 'AWS4-HMAC-SHA256';
16
- const sha256hex = (data) => createHash('sha256').update(data).digest('hex');
17
- const hmac = (key, data) => createHmac('sha256', key).update(data, 'utf8').digest();
21
+ const sha256hex = (data) => sha256(data);
22
+ const hmac = (key, data) => hmacSha256Bytes(key, data);
18
23
  /** sha256 hex d'une charge utile (à passer en `payloadHash`). */
19
24
  export function hashPayload(body) {
20
25
  return sha256hex(body ?? '');
@@ -96,7 +101,7 @@ export function signRequest(args) {
96
101
  const scope = `${dateStamp}/${args.region}/${service}/aws4_request`;
97
102
  const stringToSign = [ALGO, stamp, scope, sha256hex(canonical)].join('\n');
98
103
  const key = signingKey(args.credentials.secretAccessKey, dateStamp, args.region, service);
99
- const signature = createHmac('sha256', key).update(stringToSign, 'utf8').digest('hex');
104
+ const signature = hmacSha256Bytes(key, stringToSign).toString('hex');
100
105
  const authorization = `${ALGO} Credential=${args.credentials.accessKeyId}/${scope}, ` +
101
106
  `SignedHeaders=${signedHeaders}, Signature=${signature}`;
102
107
  return { authorization, headers: { ...headers, authorization } };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mostajs/blob-store",
3
- "version": "0.2.0",
4
- "description": "Ranger des octets — contrat StorageDriver (put/get/delete/exists/stat/list) + pilotes filesystem, caching et S3 (SigV4 intégré, tout service S3-compatible). Primitive N0, zéro dépendance.",
3
+ "version": "0.3.0",
4
+ "description": "Ranger des octets — contrat StorageDriver + pilotes filesystem, caching et S3 (SigV4 intégré, tout service S3-compatible). Primitive N0. Primitives crypto déléguées à @mostajs/crypto-box.",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "author": "Dr Hamid MADANI <drmdh@msn.com>",
7
7
  "type": "module",
@@ -67,5 +67,8 @@
67
67
  "@mostajs/mjs-unit": "^0.3.1",
68
68
  "@types/node": "^20.19.43",
69
69
  "typescript": "^5.6.0"
70
+ },
71
+ "dependencies": {
72
+ "@mostajs/crypto-box": "^0.2.0"
70
73
  }
71
74
  }