@nodefony/drizzle 10.0.0-alpha.1
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/LICENSE +544 -0
- package/README.md +162 -0
- package/dist/_virtual/_@oxc-project_runtime@0.148.0/helpers/esm/decorate.js +9 -0
- package/dist/_virtual/_@oxc-project_runtime@0.148.0/helpers/esm/decorateMetadata.js +6 -0
- package/dist/index.js +105 -0
- package/dist/nodefony/command/migrateShared.js +247 -0
- package/dist/nodefony/command/orm-generate.js +356 -0
- package/dist/nodefony/command/orm-migrate-baseline.js +208 -0
- package/dist/nodefony/command/orm-migrate-repair.js +114 -0
- package/dist/nodefony/command/orm-migrate-status.js +67 -0
- package/dist/nodefony/command/orm-migrate.js +141 -0
- package/dist/nodefony/command/orm-reset.js +166 -0
- package/dist/nodefony/config/config.js +107 -0
- package/dist/nodefony/config/defineModuleConfig.js +63 -0
- package/dist/nodefony/entity/auditEventEntity.js +93 -0
- package/dist/nodefony/entity/colKit.js +260 -0
- package/dist/nodefony/entity/idempotencyEntity.js +74 -0
- package/dist/nodefony/entity/sessionEntity.js +75 -0
- package/dist/nodefony/entity/tokenEntity.js +198 -0
- package/dist/nodefony/entity/totpSecretEntity.js +98 -0
- package/dist/nodefony/entity/userTable.js +141 -0
- package/dist/nodefony/entity/webAuthnCredentialEntity.js +114 -0
- package/dist/nodefony/entity/webhookEndpointEntity.js +106 -0
- package/dist/nodefony/interfaces/IDrizzleConfig.js +1 -0
- package/dist/nodefony/interfaces/index.js +1 -0
- package/dist/nodefony/migrations-schema/mysql.js +48 -0
- package/dist/nodefony/migrations-schema/postgres.js +48 -0
- package/dist/nodefony/migrations-schema/sqlite.js +48 -0
- package/dist/nodefony/registerStores.js +218 -0
- package/dist/nodefony/service/DrizzleService.js +282 -0
- package/dist/nodefony/src/DrizzleAuditStore.js +203 -0
- package/dist/nodefony/src/DrizzleIdempotencyStore.js +278 -0
- package/dist/nodefony/src/DrizzleTokenStore.js +244 -0
- package/dist/nodefony/src/DrizzleTotpSecretStore.js +151 -0
- package/dist/nodefony/src/DrizzleUserRepository.js +217 -0
- package/dist/nodefony/src/DrizzleWebAuthnCredentialStore.js +159 -0
- package/dist/nodefony/src/DrizzleWebhookStore.js +169 -0
- package/dist/nodefony/src/SessionStorage.js +259 -0
- package/dist/nodefony/src/connectorTarget.js +59 -0
- package/dist/nodefony/src/likeSql.js +50 -0
- package/dist/nodefony/src/migrator/DrizzleMigrator.js +775 -0
- package/dist/nodefony/src/migrator/adopt.js +553 -0
- package/dist/nodefony/src/migrator/appSchema.js +414 -0
- package/dist/nodefony/src/migrator/catalog.js +76 -0
- package/dist/nodefony/src/migrator/destructive.js +213 -0
- package/dist/nodefony/src/migrator/divergence.js +84 -0
- package/dist/nodefony/src/migrator/drivers/index.js +39 -0
- package/dist/nodefony/src/migrator/drivers/mysqlDriver.js +147 -0
- package/dist/nodefony/src/migrator/drivers/postgresDriver.js +151 -0
- package/dist/nodefony/src/migrator/drivers/sqliteDriver.js +121 -0
- package/dist/nodefony/src/migrator/explain.js +565 -0
- package/dist/nodefony/src/migrator/hash.js +47 -0
- package/dist/nodefony/src/migrator/history.js +219 -0
- package/dist/nodefony/src/migrator/index.js +16 -0
- package/dist/nodefony/src/migrator/kit.js +296 -0
- package/dist/nodefony/src/migrator/name.js +68 -0
- package/dist/nodefony/src/migrator/paths.js +88 -0
- package/dist/nodefony/src/migrator/refusals.js +143 -0
- package/dist/nodefony/src/migrator/resolve.js +281 -0
- package/dist/nodefony/src/migrator/schemaDiff.js +86 -0
- package/dist/nodefony/src/migrator/sources.js +419 -0
- package/dist/nodefony/src/migrator/status.js +231 -0
- package/dist/nodefony/src/migrator/types.js +91 -0
- package/dist/nodefony/src/orm-core/DrizzleOrm.js +1154 -0
- package/dist/nodefony/src/orm-core/DrizzleRepository.js +610 -0
- package/dist/nodefony/src/orm-core/DrizzleTransaction.js +106 -0
- package/dist/nodefony/src/orm-core/index.js +4 -0
- package/dist/nodefony/src/queryKit.js +318 -0
- package/dist/nodefony/src/safeTarget.js +55 -0
- package/dist/types/index.d.ts +76 -0
- package/dist/types/nodefony/command/migrateShared.d.ts +137 -0
- package/dist/types/nodefony/command/orm-generate.d.ts +53 -0
- package/dist/types/nodefony/command/orm-migrate-baseline.d.ts +87 -0
- package/dist/types/nodefony/command/orm-migrate-repair.d.ts +66 -0
- package/dist/types/nodefony/command/orm-migrate-status.d.ts +38 -0
- package/dist/types/nodefony/command/orm-migrate.d.ts +65 -0
- package/dist/types/nodefony/command/orm-reset.d.ts +55 -0
- package/dist/types/nodefony/config/config.d.ts +110 -0
- package/dist/types/nodefony/config/defineModuleConfig.d.ts +24 -0
- package/dist/types/nodefony/entity/auditEventEntity.d.ts +56 -0
- package/dist/types/nodefony/entity/colKit.d.ts +130 -0
- package/dist/types/nodefony/entity/idempotencyEntity.d.ts +52 -0
- package/dist/types/nodefony/entity/sessionEntity.d.ts +50 -0
- package/dist/types/nodefony/entity/tokenEntity.d.ts +53 -0
- package/dist/types/nodefony/entity/totpSecretEntity.d.ts +61 -0
- package/dist/types/nodefony/entity/userTable.d.ts +65 -0
- package/dist/types/nodefony/entity/webAuthnCredentialEntity.d.ts +57 -0
- package/dist/types/nodefony/entity/webhookEndpointEntity.d.ts +58 -0
- package/dist/types/nodefony/interfaces/IDrizzleConfig.d.ts +17 -0
- package/dist/types/nodefony/interfaces/index.d.ts +1 -0
- package/dist/types/nodefony/migrations-schema/mysql.d.ts +9 -0
- package/dist/types/nodefony/migrations-schema/postgres.d.ts +9 -0
- package/dist/types/nodefony/migrations-schema/sqlite.d.ts +9 -0
- package/dist/types/nodefony/registerStores.d.ts +52 -0
- package/dist/types/nodefony/service/DrizzleService.d.ts +27 -0
- package/dist/types/nodefony/src/DrizzleAuditStore.d.ts +65 -0
- package/dist/types/nodefony/src/DrizzleIdempotencyStore.d.ts +129 -0
- package/dist/types/nodefony/src/DrizzleTokenStore.d.ts +146 -0
- package/dist/types/nodefony/src/DrizzleTotpSecretStore.d.ts +60 -0
- package/dist/types/nodefony/src/DrizzleUserRepository.d.ts +67 -0
- package/dist/types/nodefony/src/DrizzleWebAuthnCredentialStore.d.ts +62 -0
- package/dist/types/nodefony/src/DrizzleWebhookStore.d.ts +79 -0
- package/dist/types/nodefony/src/SessionStorage.d.ts +72 -0
- package/dist/types/nodefony/src/connectorTarget.d.ts +48 -0
- package/dist/types/nodefony/src/likeSql.d.ts +29 -0
- package/dist/types/nodefony/src/migrator/DrizzleMigrator.d.ts +94 -0
- package/dist/types/nodefony/src/migrator/adopt.d.ts +280 -0
- package/dist/types/nodefony/src/migrator/appSchema.d.ts +223 -0
- package/dist/types/nodefony/src/migrator/catalog.d.ts +100 -0
- package/dist/types/nodefony/src/migrator/destructive.d.ts +123 -0
- package/dist/types/nodefony/src/migrator/divergence.d.ts +61 -0
- package/dist/types/nodefony/src/migrator/drivers/index.d.ts +26 -0
- package/dist/types/nodefony/src/migrator/drivers/mysqlDriver.d.ts +83 -0
- package/dist/types/nodefony/src/migrator/drivers/postgresDriver.d.ts +81 -0
- package/dist/types/nodefony/src/migrator/drivers/sqliteDriver.d.ts +53 -0
- package/dist/types/nodefony/src/migrator/explain.d.ts +424 -0
- package/dist/types/nodefony/src/migrator/hash.d.ts +39 -0
- package/dist/types/nodefony/src/migrator/history.d.ts +139 -0
- package/dist/types/nodefony/src/migrator/index.d.ts +20 -0
- package/dist/types/nodefony/src/migrator/kit.d.ts +141 -0
- package/dist/types/nodefony/src/migrator/name.d.ts +52 -0
- package/dist/types/nodefony/src/migrator/paths.d.ts +54 -0
- package/dist/types/nodefony/src/migrator/refusals.d.ts +170 -0
- package/dist/types/nodefony/src/migrator/resolve.d.ts +201 -0
- package/dist/types/nodefony/src/migrator/schemaDiff.d.ts +112 -0
- package/dist/types/nodefony/src/migrator/sources.d.ts +119 -0
- package/dist/types/nodefony/src/migrator/status.d.ts +132 -0
- package/dist/types/nodefony/src/migrator/types.d.ts +273 -0
- package/dist/types/nodefony/src/orm-core/DrizzleOrm.d.ts +241 -0
- package/dist/types/nodefony/src/orm-core/DrizzleRepository.d.ts +98 -0
- package/dist/types/nodefony/src/orm-core/DrizzleTransaction.d.ts +71 -0
- package/dist/types/nodefony/src/orm-core/index.d.ts +11 -0
- package/dist/types/nodefony/src/queryKit.d.ts +136 -0
- package/dist/types/nodefony/src/safeTarget.d.ts +42 -0
- package/docs/index.md +954 -0
- package/docs/migrations.md +691 -0
- package/migrations/mysql/0000_framework_init.sql +137 -0
- package/migrations/mysql/meta/_journal.json +13 -0
- package/migrations/postgres/0000_framework_init.sql +128 -0
- package/migrations/postgres/meta/_journal.json +13 -0
- package/migrations/sqlite/0000_framework_init.sql +127 -0
- package/migrations/sqlite/meta/_journal.json +13 -0
- package/package.json +126 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { SQLiteTable } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import type { IEntity } from "@nodefony/orm-core";
|
|
3
|
+
import type { AuditCategory, AuditOutcome, IAuditEventFlags } from "@nodefony/security";
|
|
4
|
+
import type { SqlDialect } from "../interfaces/IDrizzleConfig.js";
|
|
5
|
+
/** Factory de la table du journal (mémoïsée — une instance par dialecte). */
|
|
6
|
+
export declare const createAuditEventTable: import("./colKit.js").FrameworkTableFactory;
|
|
7
|
+
/**
|
|
8
|
+
* Variante SQLite de la table (dialecte par défaut) — export conservé pour
|
|
9
|
+
* l'usage direct/banc-test.
|
|
10
|
+
*/
|
|
11
|
+
export declare const auditEventTable: SQLiteTable;
|
|
12
|
+
/**
|
|
13
|
+
* Forme plate d'une ligne du journal d'audit. Miroir d'`IAuditEvent` avec les
|
|
14
|
+
* champs optionnels rendus explicitement `| null` (colonnes NULLABLE SQL). Le
|
|
15
|
+
* store mappe `null` ↔ `undefined` aux frontières.
|
|
16
|
+
*/
|
|
17
|
+
export interface AuditEventRow {
|
|
18
|
+
id: string;
|
|
19
|
+
ts: number;
|
|
20
|
+
category: AuditCategory;
|
|
21
|
+
action: string;
|
|
22
|
+
outcome: AuditOutcome;
|
|
23
|
+
actor: string | null;
|
|
24
|
+
resource: string | null;
|
|
25
|
+
reason: string | null;
|
|
26
|
+
ip: string | null;
|
|
27
|
+
userAgent: string | null;
|
|
28
|
+
requestId: string | null;
|
|
29
|
+
flags: IAuditEventFlags | null;
|
|
30
|
+
metadata: Record<string, unknown> | null;
|
|
31
|
+
}
|
|
32
|
+
/** Noms logiques des entités du store (clés de lookup `getRepository`). */
|
|
33
|
+
export declare const AUDIT_ENTITY_NAMES: {
|
|
34
|
+
readonly events: "audit_event";
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Construit les descripteurs d'entités du journal d'audit pour un ORM nommé.
|
|
38
|
+
*
|
|
39
|
+
* Le `connector` est **dynamique** (nom du connecteur de l'app, ex. `"default"`) et la
|
|
40
|
+
* variante de table suit le dialecte du connecteur (auto-register
|
|
41
|
+
* `registerStores.ts` à `onKernelRegister`). À enregistrer dans `entityRegistry`
|
|
42
|
+
* **avant** `orm.connect()` (cf {@link registerAuditEntities}).
|
|
43
|
+
*
|
|
44
|
+
* @param orm - clé de l'ORM cible dans le `ormRegistry`.
|
|
45
|
+
* @param dialect - dialecte SQL du connecteur (sélectionne la variante de table).
|
|
46
|
+
* @returns le descripteur {@link IEntity} du journal d'audit.
|
|
47
|
+
*/
|
|
48
|
+
export declare function createAuditEntities(connector: string, dialect?: SqlDialect): IEntity[];
|
|
49
|
+
/**
|
|
50
|
+
* Enregistre les entités du journal d'audit dans le `entityRegistry` pour un ORM
|
|
51
|
+
* donné. À appeler **avant** `orm.connect()` (l'adapter crée les tables au connect).
|
|
52
|
+
*
|
|
53
|
+
* @param connector - nom de la connexion cible (clé du registre).
|
|
54
|
+
* @param dialect - dialecte SQL du connecteur (variante de table — défaut `sqlite`).
|
|
55
|
+
*/
|
|
56
|
+
export declare function registerAuditEntities(connector: string, dialect?: SqlDialect): void;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import type { SQLiteTable } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import type { PgTable } from "drizzle-orm/pg-core";
|
|
3
|
+
import type { MySqlTable } from "drizzle-orm/mysql-core";
|
|
4
|
+
import type { SqlDialect } from "../interfaces/IDrizzleConfig.js";
|
|
5
|
+
/**
|
|
6
|
+
* colKit — kit de colonnes partagé des **entités framework** (chantier
|
|
7
|
+
* portabilité multi-dialecte, garde-fou G1 du comparatif ORM
|
|
8
|
+
* mémoire IA `core-dev/audits/orm-comparatif-froid-2026-07.md`).
|
|
9
|
+
*
|
|
10
|
+
* **Pourquoi** : Drizzle est schema-as-code *par dialecte* (`sqliteTable` ≠
|
|
11
|
+
* `pgTable`, builders de colonnes distincts). Sans kit, chaque entité duplique
|
|
12
|
+
* sa déclaration par dialecte (×2 aujourd'hui, ×3 avec mysql) — vécu sur
|
|
13
|
+
* `idempotencyEntity` (2 tables parallèles). Le colKit inverse le rapport :
|
|
14
|
+
* **une spec logique par entité**, le kit produit la table du dialecte demandé.
|
|
15
|
+
* Ajouter mysql (S4) = étendre CE fichier, pas les 8 entités.
|
|
16
|
+
*
|
|
17
|
+
* **Règles portées par construction** :
|
|
18
|
+
* - mêmes **NOMS** de colonnes sur tous les dialectes → stores/repositories
|
|
19
|
+
* dialect-agnostiques (l'invariant central du chantier) ;
|
|
20
|
+
* - divergences de TYPE assumées ici et nulle part ailleurs : epoch ms =
|
|
21
|
+
* `integer` SQLite (64-bit) / `bigint mode:"number"` PG+MySQL (`integer` PG
|
|
22
|
+
* 32-bit déborde) ; JSON = `text mode:"json"` SQLite / `jsonb` PG / `json`
|
|
23
|
+
* MySQL ; booléen = `integer mode:"boolean"` SQLite / `boolean` PG+MySQL ;
|
|
24
|
+
* date JS (`dateMs`, exposée `Date`) = `integer mode:"timestamp_ms"` SQLite /
|
|
25
|
+
* `timestamptz(3)` PG / `datetime(3)` MySQL (pas `timestamp` : borne 2038) ;
|
|
26
|
+
* texte = `text` partout SAUF MySQL où une colonne PK/UNIQUE/indexée devient
|
|
27
|
+
* `varchar(512)` (InnoDB ne peut pas indexer TEXT sans longueur de préfixe ;
|
|
28
|
+
* 512 × 4 bytes utf8mb4 = 2048 < 3072, la limite d'index DYNAMIC, et couvre
|
|
29
|
+
* la clé d'idempotence ~330 chars max) ;
|
|
30
|
+
* - **entier 64 bits (`int64`) dès qu'une valeur peut croître sans borne
|
|
31
|
+
* connue** : `int` est un entier 32 bits signé sur les trois dialectes
|
|
32
|
+
* (2 147 483 647), et un compteur qui le dépasse ne rend pas une erreur
|
|
33
|
+
* lisible — il tronque ou refuse l'écriture, des années après la mise en
|
|
34
|
+
* production. `int` reste réservé aux valeurs bornées par le domaine (un
|
|
35
|
+
* nombre de chiffres, un code de statut HTTP) ;
|
|
36
|
+
* - **valeurs énumérées bornées en base (`enum`) et non seulement dans le
|
|
37
|
+
* type** — la contrainte `CHECK` est émise dans le `CREATE TABLE` (DDL
|
|
38
|
+
* dérivé ET drizzle-kit), donc un écrivain qui contournerait la frontière
|
|
39
|
+
* typée est refusé par le serveur ;
|
|
40
|
+
* - défauts en **`$defaultFn`/`$onUpdateFn` (JS-level) uniquement** — le DDL
|
|
41
|
+
* dérivé (`getTableConfig` → `DrizzleOrm.#buildCreateTable`) n'émet PAS les
|
|
42
|
+
* `DEFAULT` SQL (gotcha `userTable`). Les `index` déclarés, eux, SONT émis
|
|
43
|
+
* (`DrizzleOrm.#buildCreateIndexes`, `CREATE INDEX IF NOT EXISTS`) — les clés
|
|
44
|
+
* étrangères restent le domaine de drizzle-kit (migrations prod).
|
|
45
|
+
*
|
|
46
|
+
* **Interne au module** (décision audit) : pas d'export dans `index.ts` — les
|
|
47
|
+
* entités de l'app choisissent LEUR dialecte et écrivent leurs tables Drizzle
|
|
48
|
+
* natives ; exposer le kit serait une sur-promesse d'API à maintenir.
|
|
49
|
+
*/
|
|
50
|
+
/** Types logiques couverts par les entités framework (étendre ici si besoin). */
|
|
51
|
+
export type FrameworkColKind = "text" | "json" | "bool" | "epochMs" | "int" | "int64" | "dateMs" | "enum";
|
|
52
|
+
/** Modificateurs communs à toutes les colonnes, quel que soit le type logique. */
|
|
53
|
+
interface IFrameworkColMods {
|
|
54
|
+
primaryKey?: boolean;
|
|
55
|
+
notNull?: boolean;
|
|
56
|
+
unique?: boolean;
|
|
57
|
+
/** Défaut JS-level (`$defaultFn`) — JAMAIS de `DEFAULT` SQL (cf. doc du kit). */
|
|
58
|
+
defaultFn?: () => unknown;
|
|
59
|
+
/** Régénéré à chaque UPDATE (`$onUpdateFn`) — pendant SQL d'`updatedAt`. */
|
|
60
|
+
onUpdateFn?: () => unknown;
|
|
61
|
+
}
|
|
62
|
+
/** Colonne scalaire — le type logique suffit à la décrire. */
|
|
63
|
+
interface IFrameworkScalarColSpec extends IFrameworkColMods {
|
|
64
|
+
/** Type logique — traduit vers le type natif du dialecte. */
|
|
65
|
+
kind: Exclude<FrameworkColKind, "enum">;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Colonne à valeurs énumérées — stockée en texte, **bornée par un `CHECK`**
|
|
69
|
+
* émis dans le `CREATE TABLE` (DDL dérivé dev/test ET drizzle-kit en prod).
|
|
70
|
+
*
|
|
71
|
+
* ⚠️ **Un `CHECK` se grave à vie** : une fois la migration `0000` publiée, y
|
|
72
|
+
* ajouter une valeur impose une migration correctrice visible chez chaque
|
|
73
|
+
* utilisateur. Ne l'employer que sur un ensemble **fermé par construction** —
|
|
74
|
+
* les états d'un automate dont l'élargissement serait de toute façon une
|
|
75
|
+
* rupture de contrat (ex. `if`/`done` du protocole d'idempotence). Un
|
|
76
|
+
* **catalogue** appelé à s'étendre (algorithme de hachage, catégorie d'audit,
|
|
77
|
+
* type de sujet) reste un `text` : son union vit sur le type `Row`, où elle ne
|
|
78
|
+
* coûte rien à faire évoluer.
|
|
79
|
+
*/
|
|
80
|
+
interface IFrameworkEnumColSpec extends IFrameworkColMods {
|
|
81
|
+
kind: "enum";
|
|
82
|
+
/** Valeurs admises — au moins une, gravées dans la contrainte `CHECK`. */
|
|
83
|
+
values: readonly [string, ...string[]];
|
|
84
|
+
}
|
|
85
|
+
/** Spécification logique d'une colonne d'entité framework. */
|
|
86
|
+
export type IFrameworkColSpec = IFrameworkScalarColSpec | IFrameworkEnumColSpec;
|
|
87
|
+
/** Index déclaratif — émis par le DDL dérivé (dev) et par drizzle-kit (prod). */
|
|
88
|
+
export interface IFrameworkIndexSpec {
|
|
89
|
+
name: string;
|
|
90
|
+
/** Noms de colonnes de la spec (validés au build — fail-loud). */
|
|
91
|
+
on: readonly string[];
|
|
92
|
+
unique?: boolean;
|
|
93
|
+
}
|
|
94
|
+
/** Spécification logique complète d'une table d'entité framework. */
|
|
95
|
+
export interface IFrameworkTableSpec {
|
|
96
|
+
name: string;
|
|
97
|
+
columns: Record<string, IFrameworkColSpec>;
|
|
98
|
+
indexes?: readonly IFrameworkIndexSpec[];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Construit la table Drizzle d'une spec logique pour un dialecte donné —
|
|
102
|
+
* **LE point unique** où « dialecte » se traduit en schéma (garde-fou G1 :
|
|
103
|
+
* ajouter un dialecte = une branche ICI + les types du switch de colonnes).
|
|
104
|
+
*
|
|
105
|
+
* @param dialect - dialecte SQL cible.
|
|
106
|
+
* @param spec - spec logique de la table.
|
|
107
|
+
* @returns la table Drizzle du dialecte.
|
|
108
|
+
*/
|
|
109
|
+
export declare function buildFrameworkTable(dialect: "sqlite", spec: IFrameworkTableSpec): SQLiteTable;
|
|
110
|
+
export declare function buildFrameworkTable(dialect: "postgres", spec: IFrameworkTableSpec): PgTable;
|
|
111
|
+
export declare function buildFrameworkTable(dialect: "mysql", spec: IFrameworkTableSpec): MySqlTable;
|
|
112
|
+
export declare function buildFrameworkTable(dialect: SqlDialect, spec: IFrameworkTableSpec): SQLiteTable | PgTable | MySqlTable;
|
|
113
|
+
/** Factory mémoïsée d'une entité framework — overloads par dialecte littéral. */
|
|
114
|
+
export interface FrameworkTableFactory {
|
|
115
|
+
(dialect: "sqlite"): SQLiteTable;
|
|
116
|
+
(dialect: "postgres"): PgTable;
|
|
117
|
+
(dialect: "mysql"): MySqlTable;
|
|
118
|
+
(dialect?: SqlDialect): SQLiteTable | PgTable | MySqlTable;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Fabrique la factory `createXTable(dialect)` d'une entité framework : une
|
|
122
|
+
* table par dialecte, construite au premier usage puis **mémoïsée** (une seule
|
|
123
|
+
* instance par dialecte — le DDL, le registre d'entités et les stores voient
|
|
124
|
+
* le même objet table).
|
|
125
|
+
*
|
|
126
|
+
* @param spec - spec logique de la table.
|
|
127
|
+
* @returns factory mémoïsée (défaut `sqlite`).
|
|
128
|
+
*/
|
|
129
|
+
export declare function createFrameworkTableFactory(spec: IFrameworkTableSpec): FrameworkTableFactory;
|
|
130
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { SQLiteTable } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import type { IEntity } from "@nodefony/orm-core";
|
|
3
|
+
import type { SqlDialect } from "../interfaces/IDrizzleConfig.js";
|
|
4
|
+
import type { FrameworkTableFactory } from "./colKit.js";
|
|
5
|
+
import type { IdempotentResponse } from "nodefony";
|
|
6
|
+
/**
|
|
7
|
+
* Factory de la table d'idempotence pour un dialecte donné — **premier maillon du
|
|
8
|
+
* chantier portabilité multi-dialecte** (un schéma logique → la table Drizzle du
|
|
9
|
+
* bon dialecte), migrée du switch manuel 2 tables vers le colKit (S4 : la
|
|
10
|
+
* variante mysql sort du kit). Le `DrizzleOrm` l'appelle selon `connector.dialect`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const createIdempotencyTable: FrameworkTableFactory;
|
|
13
|
+
/**
|
|
14
|
+
* Variante SQLite mémoïsée (dialecte par défaut) — export statique de compat
|
|
15
|
+
* (bancs, typage du store {@link DrizzleIdempotencyStore}).
|
|
16
|
+
*/
|
|
17
|
+
export declare const idempotencyKeyTable: SQLiteTable;
|
|
18
|
+
/**
|
|
19
|
+
* Forme plate d'une ligne du store d'idempotence (telle que renvoyée par le
|
|
20
|
+
* repository / `SELECT`). Identique aux colonnes de {@link idempotencyKeyTable}
|
|
21
|
+
* → zéro mapping store ↔ entité.
|
|
22
|
+
*/
|
|
23
|
+
export interface IdempotencyKeyRow {
|
|
24
|
+
key: string;
|
|
25
|
+
fingerprint: string;
|
|
26
|
+
state: "if" | "done";
|
|
27
|
+
response: IdempotentResponse | null;
|
|
28
|
+
expiresAt: number;
|
|
29
|
+
}
|
|
30
|
+
/** Nom logique de l'entité (clé de lookup `getRepository` / `entityRegistry`). */
|
|
31
|
+
export declare const IDEMPOTENCY_ENTITY_NAME: "idempotency_key";
|
|
32
|
+
/**
|
|
33
|
+
* Construit le descripteur d'entité du store d'idempotence pour un ORM nommé.
|
|
34
|
+
*
|
|
35
|
+
* Le `connector` est **dynamique** (nom du connecteur de l'app, ex. `"default"`) : la
|
|
36
|
+
* table est statique mais sa liaison à un ORM dépend de la config → on ne peut
|
|
37
|
+
* pas la figer via `@entity`. À enregistrer dans `entityRegistry` **avant**
|
|
38
|
+
* `orm.connect()` (cf {@link registerIdempotencyEntities}).
|
|
39
|
+
*
|
|
40
|
+
* @param orm - clé de l'ORM cible dans le `ormRegistry`.
|
|
41
|
+
* @param dialect - dialecte SQL du connecteur (sélectionne la variante de table).
|
|
42
|
+
* @returns le descripteur {@link IEntity} de la table d'idempotence.
|
|
43
|
+
*/
|
|
44
|
+
export declare function createIdempotencyEntities(connector: string, dialect?: SqlDialect): IEntity[];
|
|
45
|
+
/**
|
|
46
|
+
* Enregistre l'entité du store d'idempotence dans le `entityRegistry` pour un ORM
|
|
47
|
+
* donné. À appeler **avant** `orm.connect()` (l'adapter crée la table au connect).
|
|
48
|
+
*
|
|
49
|
+
* @param connector - nom de la connexion cible (clé du registre).
|
|
50
|
+
* @param dialect - dialecte SQL du connecteur (variante de table — défaut `sqlite`).
|
|
51
|
+
*/
|
|
52
|
+
export declare function registerIdempotencyEntities(connector: string, dialect?: SqlDialect): void;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { SQLiteTable } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import type { IEntity } from "@nodefony/orm-core";
|
|
3
|
+
import type { SqlDialect } from "../interfaces/IDrizzleConfig.js";
|
|
4
|
+
/** ORM cible du stockage de session (connecteur par défaut du module). */
|
|
5
|
+
export declare const SESSION_CONNECTOR = "default";
|
|
6
|
+
/** Nom logique de l'entité (clé de lookup `getRepository` / `entityRegistry`). */
|
|
7
|
+
export declare const SESSION_ENTITY_NAME = "session";
|
|
8
|
+
/**
|
|
9
|
+
* Factory de la table de session pour un dialecte donné (mémoïsée — une
|
|
10
|
+
* instance par dialecte). `sqlite` (défaut) et `postgres` sont portés ;
|
|
11
|
+
* `mysql` jette (S4).
|
|
12
|
+
*/
|
|
13
|
+
export declare const createSessionTable: import("./colKit.js").FrameworkTableFactory;
|
|
14
|
+
/**
|
|
15
|
+
* Variante SQLite de la table de session (dialecte par défaut) — export
|
|
16
|
+
* conservé pour l'usage direct/banc-test.
|
|
17
|
+
*/
|
|
18
|
+
export declare const sessionTable: SQLiteTable;
|
|
19
|
+
/** Forme plate d'une ligne de session telle que renvoyée par le repository. */
|
|
20
|
+
export interface SessionRow {
|
|
21
|
+
session_id: string;
|
|
22
|
+
Attributes: unknown;
|
|
23
|
+
flashBag: unknown;
|
|
24
|
+
metaBag: unknown;
|
|
25
|
+
user: string | null;
|
|
26
|
+
createdAt: number;
|
|
27
|
+
updatedAt: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Construit le descripteur d'entité session pour un ORM nommé.
|
|
31
|
+
*
|
|
32
|
+
* Le `connector` est **dynamique** (nom du connecteur de l'app, ex. `"default"`) et la
|
|
33
|
+
* variante de table suit le dialecte du connecteur → l'enregistrement est fait
|
|
34
|
+
* par `registerStores.ts` à `onKernelRegister` (plus de décorateur `@entity`
|
|
35
|
+
* figé au chargement du fichier, qui imposait la variante sqlite quel que soit
|
|
36
|
+
* le dialecte configuré). À enregistrer **avant** `orm.connect()`.
|
|
37
|
+
*
|
|
38
|
+
* @param orm - clé de l'ORM cible dans le `ormRegistry`.
|
|
39
|
+
* @param dialect - dialecte SQL du connecteur (sélectionne la variante de table).
|
|
40
|
+
* @returns le descripteur {@link IEntity} de la table de session.
|
|
41
|
+
*/
|
|
42
|
+
export declare function createSessionEntity(connector: string, dialect?: SqlDialect): IEntity[];
|
|
43
|
+
/**
|
|
44
|
+
* Enregistre l'entité session dans le `entityRegistry` pour un ORM donné.
|
|
45
|
+
* À appeler **avant** `orm.connect()` (l'adapter crée la table au connect).
|
|
46
|
+
*
|
|
47
|
+
* @param connector - nom de la connexion cible (clé du registre).
|
|
48
|
+
* @param dialect - dialecte SQL du connecteur (variante de table — défaut `sqlite`).
|
|
49
|
+
*/
|
|
50
|
+
export declare function registerSessionEntity(connector: string, dialect?: SqlDialect): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { SQLiteTable } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import type { IEntity } from "@nodefony/orm-core";
|
|
3
|
+
import type { SqlDialect } from "../interfaces/IDrizzleConfig.js";
|
|
4
|
+
/** Factory de la table des records (mémoïsée — une instance par dialecte). */
|
|
5
|
+
export declare const createAccessTokenTable: import("./colKit.js").FrameworkTableFactory;
|
|
6
|
+
/** Factory de la denylist `jti` (mémoïsée — une instance par dialecte). */
|
|
7
|
+
export declare const createDeniedJtiTable: import("./colKit.js").FrameworkTableFactory;
|
|
8
|
+
/** Factory des seuils de révocation (mémoïsée — une instance par dialecte). */
|
|
9
|
+
export declare const createSubjectRevocationTable: import("./colKit.js").FrameworkTableFactory;
|
|
10
|
+
/**
|
|
11
|
+
* Variantes SQLite des trois tables (dialecte par défaut) — exports conservés
|
|
12
|
+
* pour l'usage direct/banc-test.
|
|
13
|
+
*/
|
|
14
|
+
export declare const accessTokenTable: SQLiteTable;
|
|
15
|
+
export declare const deniedJtiTable: SQLiteTable;
|
|
16
|
+
export declare const subjectRevocationTable: SQLiteTable;
|
|
17
|
+
/** Forme plate d'une ligne de la denylist `jti`. */
|
|
18
|
+
export interface DeniedJtiRow {
|
|
19
|
+
jti: string;
|
|
20
|
+
expiresAt: number;
|
|
21
|
+
}
|
|
22
|
+
/** Forme plate d'une ligne de révocation par porteur. */
|
|
23
|
+
export interface SubjectRevocationRow {
|
|
24
|
+
subjectId: string;
|
|
25
|
+
invalidBefore: number;
|
|
26
|
+
}
|
|
27
|
+
/** Noms logiques des entités du store (clés de lookup `getRepository`). */
|
|
28
|
+
export declare const TOKEN_ENTITY_NAMES: {
|
|
29
|
+
readonly records: "access_token";
|
|
30
|
+
readonly denied: "denied_jti";
|
|
31
|
+
readonly revocations: "subject_revocation";
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Construit les descripteurs d'entités du store de jetons pour un ORM nommé.
|
|
35
|
+
*
|
|
36
|
+
* Le `connector` est **dynamique** (nom du connecteur de l'app, ex. `"default"`) et la
|
|
37
|
+
* variante de table suit le dialecte du connecteur (auto-register
|
|
38
|
+
* `registerStores.ts` à `onKernelRegister`). À enregistrer dans `entityRegistry`
|
|
39
|
+
* **avant** `orm.connect()` (cf {@link registerTokenEntities}).
|
|
40
|
+
*
|
|
41
|
+
* @param orm - clé de l'ORM cible dans le `ormRegistry`.
|
|
42
|
+
* @param dialect - dialecte SQL du connecteur (sélectionne la variante des tables).
|
|
43
|
+
* @returns les trois descripteurs {@link IEntity} (records / denylist / seuils).
|
|
44
|
+
*/
|
|
45
|
+
export declare function createTokenEntities(connector: string, dialect?: SqlDialect): IEntity[];
|
|
46
|
+
/**
|
|
47
|
+
* Enregistre les entités du store de jetons dans le `entityRegistry` pour un ORM
|
|
48
|
+
* donné. À appeler **avant** `orm.connect()` (l'adapter crée les tables au connect).
|
|
49
|
+
*
|
|
50
|
+
* @param connector - nom de la connexion cible (clé du registre).
|
|
51
|
+
* @param dialect - dialecte SQL du connecteur (variante des tables — défaut `sqlite`).
|
|
52
|
+
*/
|
|
53
|
+
export declare function registerTokenEntities(connector: string, dialect?: SqlDialect): void;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { SQLiteTable } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import type { IEntity } from "@nodefony/orm-core";
|
|
3
|
+
import type { SqlDialect } from "../interfaces/IDrizzleConfig.js";
|
|
4
|
+
/**
|
|
5
|
+
* Algorithme HMAC du code TOTP (RFC 6238) — union littérale (miroir du
|
|
6
|
+
* `TotpAlgorithm` de `@nodefony/security`, non ré-exporté à la racine). Écrite en
|
|
7
|
+
* clair plutôt que dérivée d'`ITotpSecret["algorithm"]` : sinon le `.d.ts` généré
|
|
8
|
+
* référencerait un chemin interne du package security (non portable, TS2883).
|
|
9
|
+
*/
|
|
10
|
+
type TotpAlgorithm = "SHA1" | "SHA256" | "SHA512";
|
|
11
|
+
/**
|
|
12
|
+
* Factory de la table de secrets TOTP pour un dialecte donné (mémoïsée — une
|
|
13
|
+
* instance par dialecte). **Les trois dialectes sont portés** (`TOTP_PORTED =
|
|
14
|
+
* ALL_DIALECTS`, `registerStores.ts:92`) : sqlite, postgres et mysql.
|
|
15
|
+
*/
|
|
16
|
+
export declare const createTotpSecretTable: import("./colKit.js").FrameworkTableFactory;
|
|
17
|
+
/**
|
|
18
|
+
* Variante SQLite de la table de secrets TOTP (dialecte par défaut) — export
|
|
19
|
+
* conservé pour l'usage direct/banc-test.
|
|
20
|
+
*/
|
|
21
|
+
export declare const totpSecretTable: SQLiteTable;
|
|
22
|
+
/**
|
|
23
|
+
* Forme **plate** d'une ligne de secret renvoyée par le repository ORM. Structure
|
|
24
|
+
* identique à `ITotpSecret` (tout `| null` déjà présent côté contrat) → mapping
|
|
25
|
+
* quasi-identité dans `DrizzleTotpSecretStore` (≠ `webAuthnCredentialEntity` qui a
|
|
26
|
+
* un `nickname?` à normaliser).
|
|
27
|
+
*/
|
|
28
|
+
export interface TotpSecretRow {
|
|
29
|
+
userId: string;
|
|
30
|
+
secretEnc: string;
|
|
31
|
+
algorithm: TotpAlgorithm;
|
|
32
|
+
digits: number;
|
|
33
|
+
period: number;
|
|
34
|
+
recoveryCodes: string[];
|
|
35
|
+
confirmedAt: number | null;
|
|
36
|
+
lastUsedStep: number | null;
|
|
37
|
+
createdAt: number;
|
|
38
|
+
lastUsedAt: number | null;
|
|
39
|
+
}
|
|
40
|
+
/** Nom logique de l'entité (clé de lookup `getRepository`). */
|
|
41
|
+
export declare const TOTP_SECRET_ENTITY = "totp_secret";
|
|
42
|
+
/**
|
|
43
|
+
* Construit le descripteur d'entité du store de secrets TOTP pour un ORM nommé.
|
|
44
|
+
* Le `connector` est **dynamique** (nom du connecteur de l'app) et la variante de table
|
|
45
|
+
* suit le dialecte du connecteur (auto-register `registerStores.ts`). À enregistrer
|
|
46
|
+
* **avant** `orm.connect()`. `module: "security"` → regroupé sous @nodefony/security
|
|
47
|
+
* dans l'ERD Studio.
|
|
48
|
+
*
|
|
49
|
+
* @param orm - clé de l'ORM cible dans le `ormRegistry`.
|
|
50
|
+
* @param dialect - dialecte SQL du connecteur (sélectionne la variante de table).
|
|
51
|
+
*/
|
|
52
|
+
export declare function createTotpSecretEntity(connector: string, dialect?: SqlDialect): IEntity;
|
|
53
|
+
/**
|
|
54
|
+
* Enregistre l'entité du store de secrets TOTP dans le `entityRegistry` pour un ORM
|
|
55
|
+
* donné. À appeler **avant** `orm.connect()` (l'adapter crée la table au connect).
|
|
56
|
+
*
|
|
57
|
+
* @param connector - nom de la connexion cible (clé du registre).
|
|
58
|
+
* @param dialect - dialecte SQL du connecteur (variante de table — défaut `sqlite`).
|
|
59
|
+
*/
|
|
60
|
+
export declare function registerTotpSecretEntity(connector: string, dialect?: SqlDialect): void;
|
|
61
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { SQLiteTable } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import type { IEntity } from "@nodefony/orm-core";
|
|
3
|
+
import type { SqlDialect } from "../interfaces/IDrizzleConfig.js";
|
|
4
|
+
/**
|
|
5
|
+
* Factory de la table `User` pour un dialecte donné (mémoïsée — une instance
|
|
6
|
+
* par dialecte). Les trois dialectes sont portés (`sqlite` par défaut).
|
|
7
|
+
*/
|
|
8
|
+
export declare const createUserTable: import("./colKit.js").FrameworkTableFactory;
|
|
9
|
+
/**
|
|
10
|
+
* Variante SQLite de la table `User` (dialecte par défaut) — export conservé
|
|
11
|
+
* pour l'usage direct/banc-test (ex. module mediasoup).
|
|
12
|
+
*/
|
|
13
|
+
export declare const userTable: SQLiteTable;
|
|
14
|
+
/**
|
|
15
|
+
* Forme plate d'une ligne `User` renvoyée par le repository de base — le contrat
|
|
16
|
+
* `IUserRow` de `@nodefony/user`, ré-exporté sous son nom historique.
|
|
17
|
+
*/
|
|
18
|
+
export type { IUserRow as UserRow } from "@nodefony/user";
|
|
19
|
+
/**
|
|
20
|
+
* Construit le descripteur d'entité `User` Drizzle pour un ORM nommé.
|
|
21
|
+
*
|
|
22
|
+
* Le `connector` est **dynamique** (nom du connecteur de l'app, ex. `"default"`) et la
|
|
23
|
+
* variante de table suit le dialecte du connecteur (auto-register
|
|
24
|
+
* `registerStores.ts` à `onKernelRegister`). À enregistrer dans `entityRegistry`
|
|
25
|
+
* **avant** `orm.connect()` (cf {@link registerUserEntity}).
|
|
26
|
+
*
|
|
27
|
+
* @param orm - clé de l'ORM cible dans le `ormRegistry`.
|
|
28
|
+
* @param dialect - dialecte SQL du connecteur (sélectionne la variante de table).
|
|
29
|
+
* @returns descripteur {@link IEntity} (`name: "User"`).
|
|
30
|
+
*/
|
|
31
|
+
export declare function createUserEntity(connector: string, dialect?: SqlDialect): IEntity;
|
|
32
|
+
/**
|
|
33
|
+
* Enregistre l'entité `User` Drizzle dans le `entityRegistry` pour un ORM donné.
|
|
34
|
+
* À appeler **avant** `orm.connect()` (l'adapter compile/crée les tables au connect).
|
|
35
|
+
*
|
|
36
|
+
* @param connector - nom de la connexion cible (clé du registre).
|
|
37
|
+
* @param dialect - dialecte SQL du connecteur (variante de table — défaut `sqlite`).
|
|
38
|
+
*/
|
|
39
|
+
export declare function registerUserEntity(connector: string, dialect?: SqlDialect): void;
|
|
40
|
+
/** Ce qu'une colonne SQL dit d'elle-même, quel que soit le dialecte. */
|
|
41
|
+
export interface IUserColumnView {
|
|
42
|
+
/** La colonne refuse-t-elle `NULL` ? */
|
|
43
|
+
readonly notNull: boolean;
|
|
44
|
+
/** Porte-t-elle une contrainte d'unicité de colonne ? */
|
|
45
|
+
readonly isUnique: boolean;
|
|
46
|
+
/** Est-elle la clé primaire ? */
|
|
47
|
+
readonly primary: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Colonnes d'une table Drizzle, lues dans la GRAMMAIRE de son dialecte.
|
|
51
|
+
*
|
|
52
|
+
* L'extraction n'a rien d'anodin : `getTableConfig` n'est pas la même fonction
|
|
53
|
+
* selon le dialecte, et la mauvaise appliquée à une table LÈVE un
|
|
54
|
+
* `TypeError: Cannot convert undefined or null to object` — mesuré sur les six
|
|
55
|
+
* croisements, aucun ne rend un objet vide ni un résultat partiel. La
|
|
56
|
+
* conséquence est la même dans les deux lectures qu'on pourrait en faire : un
|
|
57
|
+
* appelant qui ne route pas par dialecte n'obtient RIEN d'exploitable. D'où un
|
|
58
|
+
* seul point de lecture, partagé par le contrôle de démarrage et par le banc de
|
|
59
|
+
* parité — et un dialecte qui doit suivre l'entité jusqu'ici.
|
|
60
|
+
*
|
|
61
|
+
* @param table - la table Drizzle, telle que l'entité la rend (`schema`).
|
|
62
|
+
* @param dialect - dialecte du connecteur qui la porte.
|
|
63
|
+
* @returns les colonnes indexées par nom SQL.
|
|
64
|
+
*/
|
|
65
|
+
export declare function userTableColumns(table: unknown, dialect: SqlDialect): Map<string, IUserColumnView>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { SQLiteTable } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import type { IEntity } from "@nodefony/orm-core";
|
|
3
|
+
import type { SqlDialect } from "../interfaces/IDrizzleConfig.js";
|
|
4
|
+
/**
|
|
5
|
+
* Factory de la table de credentials pour un dialecte donné (mémoïsée — une
|
|
6
|
+
* instance par dialecte). `sqlite` (défaut) et `postgres` sont portés ;
|
|
7
|
+
* `mysql` jette (S4).
|
|
8
|
+
*/
|
|
9
|
+
export declare const createWebAuthnCredentialTable: import("./colKit.js").FrameworkTableFactory;
|
|
10
|
+
/**
|
|
11
|
+
* Variante SQLite de la table de credentials (dialecte par défaut) — export
|
|
12
|
+
* conservé pour l'usage direct/banc-test.
|
|
13
|
+
*/
|
|
14
|
+
export declare const webAuthnCredentialTable: SQLiteTable;
|
|
15
|
+
/**
|
|
16
|
+
* Forme **plate** d'une ligne de credentials renvoyée par le repository ORM —
|
|
17
|
+
* `nickname: string | null` (≠ `nickname?: string` du contrat) et `transports`
|
|
18
|
+
* mutable. `DrizzleWebAuthnCredentialStore` mappe `Row ↔ IWebAuthnCredential`.
|
|
19
|
+
*/
|
|
20
|
+
export interface WebAuthnCredentialRow {
|
|
21
|
+
id: string;
|
|
22
|
+
userId: string;
|
|
23
|
+
publicKey: string;
|
|
24
|
+
signCount: number;
|
|
25
|
+
transports: string[];
|
|
26
|
+
backupEligible: boolean;
|
|
27
|
+
backupState: boolean;
|
|
28
|
+
uvInitialized: boolean;
|
|
29
|
+
nickname: string | null;
|
|
30
|
+
createdAt: number;
|
|
31
|
+
lastUsedAt: number | null;
|
|
32
|
+
}
|
|
33
|
+
/** Nom logique de l'entité (clé de lookup `getRepository`). */
|
|
34
|
+
export declare const WEBAUTHN_CREDENTIAL_ENTITY = "webauthn_credential";
|
|
35
|
+
/**
|
|
36
|
+
* Construit le descripteur d'entité du store de credentials pour un ORM nommé.
|
|
37
|
+
*
|
|
38
|
+
* Le `connector` est **dynamique** (nom du connecteur de l'app, ex. `"default"`) et la
|
|
39
|
+
* variante de table suit le dialecte du connecteur (auto-register
|
|
40
|
+
* `registerStores.ts` à `onKernelRegister`). À enregistrer **avant**
|
|
41
|
+
* `orm.connect()` (cf {@link registerWebAuthnCredentialEntity}).
|
|
42
|
+
*
|
|
43
|
+
* `module: "security"` → la table est regroupée sous @nodefony/security dans l'ERD
|
|
44
|
+
* Studio (le store est une feature security, hébergée par l'ORM de l'app).
|
|
45
|
+
*
|
|
46
|
+
* @param orm - clé de l'ORM cible dans le `ormRegistry`.
|
|
47
|
+
* @param dialect - dialecte SQL du connecteur (sélectionne la variante de table).
|
|
48
|
+
*/
|
|
49
|
+
export declare function createWebAuthnCredentialEntity(connector: string, dialect?: SqlDialect): IEntity;
|
|
50
|
+
/**
|
|
51
|
+
* Enregistre l'entité du store de credentials dans le `entityRegistry` pour un
|
|
52
|
+
* ORM donné. À appeler **avant** `orm.connect()` (l'adapter crée la table au connect).
|
|
53
|
+
*
|
|
54
|
+
* @param connector - nom de la connexion cible (clé du registre).
|
|
55
|
+
* @param dialect - dialecte SQL du connecteur (variante de table — défaut `sqlite`).
|
|
56
|
+
*/
|
|
57
|
+
export declare function registerWebAuthnCredentialEntity(connector: string, dialect?: SqlDialect): void;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { SQLiteTable } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import type { IEntity } from "@nodefony/orm-core";
|
|
3
|
+
import type { SqlDialect } from "../interfaces/IDrizzleConfig.js";
|
|
4
|
+
/** Factory de la table des endpoints (mémoïsée — une instance par dialecte). */
|
|
5
|
+
export declare const createWebhookEndpointTable: import("./colKit.js").FrameworkTableFactory;
|
|
6
|
+
/**
|
|
7
|
+
* Variante SQLite de la table (dialecte par défaut) — export conservé pour
|
|
8
|
+
* l'usage direct/banc-test.
|
|
9
|
+
*/
|
|
10
|
+
export declare const webhookEndpointTable: SQLiteTable;
|
|
11
|
+
/**
|
|
12
|
+
* Forme **plate** d'une ligne d'endpoint renvoyée par le repository ORM —
|
|
13
|
+
* `events` mutable (le contrat porte `readonly string[]`). Tous les autres
|
|
14
|
+
* champs sont identiques à `IWebhookEndpoint` (déjà « plat tout `| null` »).
|
|
15
|
+
* `DrizzleWebhookStore` mappe `Row ↔ IWebhookEndpoint`.
|
|
16
|
+
*/
|
|
17
|
+
export interface WebhookEndpointRow {
|
|
18
|
+
id: string;
|
|
19
|
+
url: string;
|
|
20
|
+
secretEnc: string;
|
|
21
|
+
events: string[];
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
description: string | null;
|
|
24
|
+
tenantId: string | null;
|
|
25
|
+
createdBy: string | null;
|
|
26
|
+
createdAt: number;
|
|
27
|
+
updatedAt: number;
|
|
28
|
+
lastDeliveryAt: number | null;
|
|
29
|
+
lastDeliveryStatus: number | null;
|
|
30
|
+
lastDeliveryError: string | null;
|
|
31
|
+
failureCount: number;
|
|
32
|
+
metadata: Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
/** Nom logique de l'entité (clé de lookup `getRepository`). */
|
|
35
|
+
export declare const WEBHOOK_ENDPOINT_ENTITY = "webhook_endpoint";
|
|
36
|
+
/**
|
|
37
|
+
* Construit le descripteur d'entité du store webhook pour un ORM nommé.
|
|
38
|
+
*
|
|
39
|
+
* Le `connector` est **dynamique** (nom du connecteur de l'app, ex. `"default"`) et la
|
|
40
|
+
* variante de table suit le dialecte du connecteur (auto-register
|
|
41
|
+
* `registerStores.ts` à `onKernelRegister`). À enregistrer **avant**
|
|
42
|
+
* `orm.connect()`.
|
|
43
|
+
*
|
|
44
|
+
* `module: "security"` → la table est regroupée sous @nodefony/security dans
|
|
45
|
+
* l'ERD Studio (le store est une feature security, hébergée par l'ORM de l'app).
|
|
46
|
+
*
|
|
47
|
+
* @param orm - clé de l'ORM cible dans le `ormRegistry`.
|
|
48
|
+
* @param dialect - dialecte SQL du connecteur (sélectionne la variante de table).
|
|
49
|
+
*/
|
|
50
|
+
export declare function createWebhookEndpointEntity(connector: string, dialect?: SqlDialect): IEntity;
|
|
51
|
+
/**
|
|
52
|
+
* Enregistre l'entité du store webhook dans le `entityRegistry` pour un ORM
|
|
53
|
+
* donné. À appeler **avant** `orm.connect()` (l'adapter crée la table au connect).
|
|
54
|
+
*
|
|
55
|
+
* @param connector - nom de la connexion cible (clé du registre).
|
|
56
|
+
* @param dialect - dialecte SQL du connecteur (variante de table — défaut `sqlite`).
|
|
57
|
+
*/
|
|
58
|
+
export declare function registerWebhookEndpointEntity(connector: string, dialect?: SqlDialect): void;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { drizzleConfigSchema } from "../config/config.js";
|
|
3
|
+
export type { SqlDialect } from "../config/config.js";
|
|
4
|
+
/**
|
|
5
|
+
* Configuration normalisée et gelée de `@nodefony/drizzle` (sortie du builder
|
|
6
|
+
* {@link defineDrizzleConfig}, consommée par le `DrizzleService`).
|
|
7
|
+
*
|
|
8
|
+
* Type **dérivé du schéma Zod** — NE PAS redéclarer les champs à la main.
|
|
9
|
+
*/
|
|
10
|
+
export type IDrizzleConfig = z.infer<typeof drizzleConfigSchema>;
|
|
11
|
+
/**
|
|
12
|
+
* Entrée du builder `defineDrizzleConfig` — tous les champs portant un défaut
|
|
13
|
+
* sont optionnels (l'app ne fournit que ce qu'elle surcharge dans `use()`).
|
|
14
|
+
*/
|
|
15
|
+
export type IDrizzleConfigInput = z.input<typeof drizzleConfigSchema>;
|
|
16
|
+
/** Définition d'une connexion Drizzle nommée (sous-objet de `connectors`). */
|
|
17
|
+
export type IDrizzleConnectorConfig = IDrizzleConfig["connectors"][string];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { IDrizzleConfig, IDrizzleConfigInput, IDrizzleConnectorConfig, } from "./IDrizzleConfig.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const accessToken: import("drizzle-orm/mysql-core").MySqlTable<import("drizzle-orm/mysql-core").TableConfig>;
|
|
2
|
+
export declare const deniedJti: import("drizzle-orm/mysql-core").MySqlTable<import("drizzle-orm/mysql-core").TableConfig>;
|
|
3
|
+
export declare const subjectRevocation: import("drizzle-orm/mysql-core").MySqlTable<import("drizzle-orm/mysql-core").TableConfig>;
|
|
4
|
+
export declare const session: import("drizzle-orm/mysql-core").MySqlTable<import("drizzle-orm/mysql-core").TableConfig>;
|
|
5
|
+
export declare const idempotencyKey: import("drizzle-orm/mysql-core").MySqlTable<import("drizzle-orm/mysql-core").TableConfig>;
|
|
6
|
+
export declare const auditEvent: import("drizzle-orm/mysql-core").MySqlTable<import("drizzle-orm/mysql-core").TableConfig>;
|
|
7
|
+
export declare const totpSecret: import("drizzle-orm/mysql-core").MySqlTable<import("drizzle-orm/mysql-core").TableConfig>;
|
|
8
|
+
export declare const webAuthnCredential: import("drizzle-orm/mysql-core").MySqlTable<import("drizzle-orm/mysql-core").TableConfig>;
|
|
9
|
+
export declare const webhookEndpoint: import("drizzle-orm/mysql-core").MySqlTable<import("drizzle-orm/mysql-core").TableConfig>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const accessToken: import("drizzle-orm/pg-core").PgTable<import("drizzle-orm/pg-core").TableConfig>;
|
|
2
|
+
export declare const deniedJti: import("drizzle-orm/pg-core").PgTable<import("drizzle-orm/pg-core").TableConfig>;
|
|
3
|
+
export declare const subjectRevocation: import("drizzle-orm/pg-core").PgTable<import("drizzle-orm/pg-core").TableConfig>;
|
|
4
|
+
export declare const session: import("drizzle-orm/pg-core").PgTable<import("drizzle-orm/pg-core").TableConfig>;
|
|
5
|
+
export declare const idempotencyKey: import("drizzle-orm/pg-core").PgTable<import("drizzle-orm/pg-core").TableConfig>;
|
|
6
|
+
export declare const auditEvent: import("drizzle-orm/pg-core").PgTable<import("drizzle-orm/pg-core").TableConfig>;
|
|
7
|
+
export declare const totpSecret: import("drizzle-orm/pg-core").PgTable<import("drizzle-orm/pg-core").TableConfig>;
|
|
8
|
+
export declare const webAuthnCredential: import("drizzle-orm/pg-core").PgTable<import("drizzle-orm/pg-core").TableConfig>;
|
|
9
|
+
export declare const webhookEndpoint: import("drizzle-orm/pg-core").PgTable<import("drizzle-orm/pg-core").TableConfig>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const accessToken: import("drizzle-orm/sqlite-core").SQLiteTable<import("drizzle-orm/sqlite-core").TableConfig>;
|
|
2
|
+
export declare const deniedJti: import("drizzle-orm/sqlite-core").SQLiteTable<import("drizzle-orm/sqlite-core").TableConfig>;
|
|
3
|
+
export declare const subjectRevocation: import("drizzle-orm/sqlite-core").SQLiteTable<import("drizzle-orm/sqlite-core").TableConfig>;
|
|
4
|
+
export declare const session: import("drizzle-orm/sqlite-core").SQLiteTable<import("drizzle-orm/sqlite-core").TableConfig>;
|
|
5
|
+
export declare const idempotencyKey: import("drizzle-orm/sqlite-core").SQLiteTable<import("drizzle-orm/sqlite-core").TableConfig>;
|
|
6
|
+
export declare const auditEvent: import("drizzle-orm/sqlite-core").SQLiteTable<import("drizzle-orm/sqlite-core").TableConfig>;
|
|
7
|
+
export declare const totpSecret: import("drizzle-orm/sqlite-core").SQLiteTable<import("drizzle-orm/sqlite-core").TableConfig>;
|
|
8
|
+
export declare const webAuthnCredential: import("drizzle-orm/sqlite-core").SQLiteTable<import("drizzle-orm/sqlite-core").TableConfig>;
|
|
9
|
+
export declare const webhookEndpoint: import("drizzle-orm/sqlite-core").SQLiteTable<import("drizzle-orm/sqlite-core").TableConfig>;
|