feat: Add complete PDPA compliance pages

- Admin dashboard (/admin/consent-logs) with password auth
- Consent API (/api/consent) with SQLite + IP hashing
- Privacy Policy (Thai) - PDPA Section 36 compliant
- Terms & Conditions (Thai) - 9 standard clauses
- .env.example template with Umami placeholder

All pages preserve current design system.
This commit is contained in:
Kunthawat
2026-03-10 21:28:23 +07:00
parent e98b9f2bff
commit b2e427791b
3282 changed files with 302503 additions and 435 deletions

View File

@@ -0,0 +1,28 @@
/** A SQL text that you can send to the database. Either a string or a reference to SQL text that is cached on
* the server. */
export type InSql = string | Sql;
export interface SqlOwner {
/** Cache a SQL text on the server. This requires protocol version 2 or higher. */
storeSql(sql: string): Sql;
/** @private */
_closeSql(sqlId: number): void;
}
/** Text of an SQL statement cached on the server. */
export declare class Sql {
#private;
/** @private */
constructor(owner: SqlOwner, sqlId: number);
/** @private */
_getSqlId(owner: SqlOwner): number;
/** Remove the SQL text from the server, releasing resouces. */
close(): void;
/** @private */
_setClosed(error: Error): void;
/** True if the SQL text is closed (removed from the server). */
get closed(): boolean;
}
export type ProtoSql = {
sql?: string;
sqlId?: number;
};
export declare function sqlToProto(owner: SqlOwner, sql: InSql): ProtoSql;