@honuware/ui 0.1.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/README.md +78 -0
- package/fesm2022/honuware-ui-access.mjs +557 -0
- package/fesm2022/honuware-ui-access.mjs.map +1 -0
- package/fesm2022/honuware-ui-auth.mjs +503 -0
- package/fesm2022/honuware-ui-auth.mjs.map +1 -0
- package/fesm2022/honuware-ui-controls.mjs +624 -0
- package/fesm2022/honuware-ui-controls.mjs.map +1 -0
- package/fesm2022/honuware-ui-crud.mjs +1101 -0
- package/fesm2022/honuware-ui-crud.mjs.map +1 -0
- package/fesm2022/honuware-ui-foundation.mjs +745 -0
- package/fesm2022/honuware-ui-foundation.mjs.map +1 -0
- package/fesm2022/honuware-ui-photos.mjs +238 -0
- package/fesm2022/honuware-ui-photos.mjs.map +1 -0
- package/fesm2022/honuware-ui-square.mjs +128 -0
- package/fesm2022/honuware-ui-square.mjs.map +1 -0
- package/fesm2022/honuware-ui-testing.mjs +325 -0
- package/fesm2022/honuware-ui-testing.mjs.map +1 -0
- package/fesm2022/honuware-ui.mjs +17 -0
- package/fesm2022/honuware-ui.mjs.map +1 -0
- package/package.json +80 -0
- package/types/honuware-ui-access.d.ts +382 -0
- package/types/honuware-ui-auth.d.ts +164 -0
- package/types/honuware-ui-controls.d.ts +136 -0
- package/types/honuware-ui-crud.d.ts +287 -0
- package/types/honuware-ui-foundation.d.ts +89 -0
- package/types/honuware-ui-photos.d.ts +46 -0
- package/types/honuware-ui-square.d.ts +65 -0
- package/types/honuware-ui-testing.d.ts +126 -0
- package/types/honuware-ui.d.ts +3 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"honuware-ui-access.mjs","sources":["../../../projects/honuware-ui/access/src/api-base.ts","../../../projects/honuware-ui/access/src/crud-http-access.ts","../../../projects/honuware-ui/access/src/auth-http-access.ts","../../../projects/honuware-ui/access/src/photo-http-access.ts","../../../projects/honuware-ui/access/src/honuware-access-proxy.ts","../../../projects/honuware-ui/access/src/access-tokens.ts","../../../projects/honuware-ui/access/src/photo-url-builder.ts","../../../projects/honuware-ui/access/src/ApiError.ts","../../../projects/honuware-ui/access/src/error.service.ts","../../../projects/honuware-ui/access/src/csrf.interceptor.ts","../../../projects/honuware-ui/access/src/conversion.ts","../../../projects/honuware-ui/access/src/public-api.ts","../../../projects/honuware-ui/access/src/honuware-ui-access.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n// Base path for the honuware server API. Relative '/api' matches every\n// current deployment shape (Angular dev proxy, same-origin Nginx/CloudFront);\n// a consumer hosting the API elsewhere overrides this token.\nexport const HONUWARE_API_BASE = new InjectionToken<string>(\n 'HONUWARE_API_BASE',\n {\n providedIn: 'root',\n factory: () => '/api',\n }\n);\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { CrudAccess, AddItemBody, UpdateItemBody } from './crud-access';\nimport { DataResults, DataResultsWithCount } from './DataResults';\nimport { DatabaseSchema } from './DatabaseSchema';\nimport { FilterPair, FkOptionsResponse, FkDisplayResponse } from './admin.types';\nimport { HONUWARE_API_BASE } from './api-base';\n\n// Default HttpClient implementation of the framework CRUD surface against the\n// standard honuware endpoints. New consumers get this via\n// provideHonuwareAccess() (wrapped in the serializing proxy); knottyyoga keeps\n// its own ServerAccessNetwork. Endpoints mirror the app's network layer.\n@Injectable({ providedIn: 'root' })\nexport class CrudHttpAccess implements CrudAccess {\n constructor(\n private http: HttpClient,\n @Inject(HONUWARE_API_BASE) private base: string,\n ) {}\n\n addItem(body: AddItemBody): Observable<void> {\n return this.http.post(`${this.base}/add_item`, body, { withCredentials: true }).pipe(map(() => void 0));\n }\n\n addItemFetchPrimaryKey(body: AddItemBody): Observable<string> {\n return this.http.post(`${this.base}/add_item_fetch_primary_key`, body, { withCredentials: true, responseType: 'text' }).pipe(\n map((response) => {\n const obj = JSON.parse(response);\n return obj[Object.keys(obj)[0]];\n })\n );\n }\n\n getTableRows(tableName: string): Observable<DataResults> {\n return this.http.get<DataResults>(`${this.base}/get_table_rows/${tableName}`, { withCredentials: true });\n }\n\n getRowsByColumn(\n tableName: string,\n columnName: string,\n ascending: boolean,\n pageSize: number,\n pageNumber: number\n ): Observable<DataResultsWithCount> {\n const asc = ascending ? 1 : 0;\n return this.http.get<DataResultsWithCount>(\n `${this.base}/get_rows_by_column/${tableName}/${columnName}/${asc}/${pageSize}/${pageNumber}`,\n { withCredentials: true }\n );\n }\n\n getFilteredTableRows(\n tableName: string,\n columnName: string,\n ascending: boolean,\n pageSize: number,\n page: number,\n filterPairs: FilterPair[]\n ): Observable<DataResultsWithCount> {\n return this.http.post<DataResultsWithCount>(`${this.base}/get_filtered_table_rows`, {\n table_name: tableName,\n column_name: columnName,\n asc: ascending,\n page_size: pageSize,\n page,\n filter_pairs: filterPairs,\n }, { withCredentials: true });\n }\n\n getRow(tableName: string, columnName: string, columnValue: string): Observable<DataResults> {\n return this.http.get<DataResults>(`${this.base}/get_row/${tableName}/${columnName}/${columnValue}`, { withCredentials: true });\n }\n\n getRowByValues(tableName: string, filterPairs: FilterPair[]): Observable<DataResults> {\n return this.http.post<DataResults>(`${this.base}/get_row_by_values`, {\n table_name: tableName,\n filter_pairs: filterPairs,\n }, { withCredentials: true });\n }\n\n updateItem(body: UpdateItemBody): Observable<void> {\n return this.http.post(`${this.base}/update_item`, body, { withCredentials: true }).pipe(map(() => void 0));\n }\n\n deleteItem(tableName: string, columnName: string, columnValue: string): Observable<void> {\n return this.http.get(`${this.base}/delete_item/${tableName}/${columnName}/${columnValue}`, { withCredentials: true })\n .pipe(map(() => void 0));\n }\n\n getDbSchema(): Observable<DatabaseSchema> {\n return this.http.get<DatabaseSchema>(`${this.base}/get_db_schema`, { withCredentials: true });\n }\n\n getFkOptions(tableName: string, searchText: string, pageSize: number): Observable<FkOptionsResponse> {\n return this.http.post<FkOptionsResponse>(`${this.base}/get_fk_options`, {\n table_name: tableName,\n search_text: searchText,\n page_size: pageSize,\n }, { withCredentials: true });\n }\n\n resolveFkDisplay(parentTableName: string, values: string[]): Observable<FkDisplayResponse> {\n return this.http.post<FkDisplayResponse>(`${this.base}/resolve_fk_display`, {\n parent_table_name: parentTableName,\n values,\n }, { withCredentials: true });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { AuthAccess, LoginInfo, UserInfo, SetUserInfo, UpdateUserPasswordInfo } from './auth-access';\nimport { HONUWARE_API_BASE } from './api-base';\n\n// Default HttpClient implementation of the framework auth/account surface.\n@Injectable({ providedIn: 'root' })\nexport class AuthHttpAccess implements AuthAccess {\n constructor(\n private http: HttpClient,\n @Inject(HONUWARE_API_BASE) private base: string,\n ) {}\n\n register(firstName: string, lastName: string, email: string, password: string): Observable<void> {\n return this.http.post(`${this.base}/register`, {\n first_name: firstName,\n last_name: lastName,\n email,\n password,\n }, { withCredentials: true }).pipe(map(() => void 0));\n }\n\n verify(email: string, secret: string): Observable<void> {\n return this.http.post(`${this.base}/verify`, { email, secret }, { withCredentials: true }).pipe(map(() => void 0));\n }\n\n login(loginInfo: LoginInfo): Observable<void> {\n return this.http.post(`${this.base}/login`, loginInfo, { withCredentials: true }).pipe(map(() => void 0));\n }\n\n logout(): Observable<void> {\n return this.http.post(`${this.base}/logout`, null, { withCredentials: true }).pipe(map(() => void 0));\n }\n\n me(): Observable<void> {\n return this.http.get(`${this.base}/me`, { withCredentials: true }).pipe(map(() => void 0));\n }\n\n remember(): Observable<void> {\n return this.http.post(`${this.base}/remember`, null, { withCredentials: true }).pipe(map(() => void 0));\n }\n\n getUserInfo(): Observable<UserInfo> {\n return this.http.post<UserInfo>(`${this.base}/get_user_info`, null, { withCredentials: true });\n }\n\n setUserInfo(userInfo: SetUserInfo): Observable<void> {\n return this.http.post(`${this.base}/set_user_info`, userInfo, { withCredentials: true }).pipe(map(() => void 0));\n }\n\n updateUserPassword(passwordInfo: UpdateUserPasswordInfo): Observable<void> {\n return this.http.post(`${this.base}/update_user_password`, passwordInfo, { withCredentials: true }).pipe(map(() => void 0));\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { PhotoAccess } from './photo-access';\nimport { SourcePhotoInfo } from './photo.types';\nimport { HONUWARE_API_BASE } from './api-base';\n\n// Default HttpClient implementation of the framework photo surface.\n@Injectable({ providedIn: 'root' })\nexport class PhotoHttpAccess implements PhotoAccess {\n constructor(\n private http: HttpClient,\n @Inject(HONUWARE_API_BASE) private base: string,\n ) {}\n\n uploadPhoto(tableName: string, tableItemId: number, imageData: ArrayBuffer, imageType: string): Observable<SourcePhotoInfo> {\n const type = imageType.split('/').pop() || imageType;\n const url = `${this.base}/upload_photo/${encodeURIComponent(tableName)}/${tableItemId}/${encodeURIComponent(type)}`;\n return this.http.post<SourcePhotoInfo>(url, imageData, { withCredentials: true });\n }\n\n uploadUserPhoto(imageData: ArrayBuffer, imageType: string): Observable<SourcePhotoInfo> {\n const type = imageType.split('/').pop() || imageType;\n const url = `${this.base}/upload_user_photo/${encodeURIComponent(type)}`;\n return this.http.post<SourcePhotoInfo>(url, imageData, { withCredentials: true });\n }\n\n deletePhoto(tableName: string, tableItemId: number): Observable<void> {\n const url = `${this.base}/delete_photo/${encodeURIComponent(tableName)}/${tableItemId}`;\n return this.http.post(url, null, { withCredentials: true }).pipe(map(() => void 0));\n }\n\n hasPhoto(tableName: string, tableItemId: number): Observable<{ has_photo: boolean }> {\n const url = `${this.base}/has_photo/${encodeURIComponent(tableName)}/${tableItemId}`;\n return this.http.get<{ has_photo: boolean }>(url, { withCredentials: true });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subscriber } from 'rxjs';\n\nimport { CrudAccess, AddItemBody, UpdateItemBody } from './crud-access';\nimport { AuthAccess, LoginInfo, UserInfo, SetUserInfo, UpdateUserPasswordInfo } from './auth-access';\nimport { PhotoAccess } from './photo-access';\nimport { DataResults, DataResultsWithCount } from './DataResults';\nimport { DatabaseSchema } from './DatabaseSchema';\nimport { FilterPair, FkOptionsResponse, FkDisplayResponse } from './admin.types';\nimport { SourcePhotoInfo } from './photo.types';\nimport { CrudHttpAccess } from './crud-http-access';\nimport { AuthHttpAccess } from './auth-http-access';\nimport { PhotoHttpAccess } from './photo-http-access';\n\n// Request-serializing façade over the default HTTP implementations. A honuware\n// server allows one transaction per session and rejects concurrent requests,\n// so every call is queued and run one at a time (the library twin of the app's\n// ServerAccessProxy). This is the default a new consumer gets via\n// provideHonuwareAccess({ mode: 'http' }); knottyyoga wires its own proxy.\n@Injectable({ providedIn: 'root' })\nexport class HonuwareAccessProxy implements CrudAccess, AuthAccess, PhotoAccess {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private queue: { factory: () => Observable<any>; subscriber: Subscriber<any> }[] = [];\n private busy = false;\n\n constructor(\n private crud: CrudHttpAccess,\n private auth: AuthHttpAccess,\n private photo: PhotoHttpAccess,\n ) {}\n\n private serialize<T>(factory: () => Observable<T>): Observable<T> {\n return new Observable<T>((subscriber) => {\n this.queue.push({ factory, subscriber });\n this.pump();\n });\n }\n\n private pump(): void {\n if (this.busy) return;\n const next = this.queue.shift();\n if (!next) return;\n this.busy = true;\n next.factory().subscribe({\n next: (value) => next.subscriber.next(value),\n error: (err) => { next.subscriber.error(err); this.busy = false; this.pump(); },\n complete: () => { next.subscriber.complete(); this.busy = false; this.pump(); },\n });\n }\n\n // --- CrudAccess ---\n addItem(body: AddItemBody): Observable<void> { return this.serialize(() => this.crud.addItem(body)); }\n addItemFetchPrimaryKey(body: AddItemBody): Observable<string> { return this.serialize(() => this.crud.addItemFetchPrimaryKey(body)); }\n getTableRows(tableName: string): Observable<DataResults> { return this.serialize(() => this.crud.getTableRows(tableName)); }\n getRowsByColumn(t: string, c: string, a: boolean, s: number, p: number): Observable<DataResultsWithCount> { return this.serialize(() => this.crud.getRowsByColumn(t, c, a, s, p)); }\n getFilteredTableRows(t: string, c: string, a: boolean, s: number, p: number, f: FilterPair[]): Observable<DataResultsWithCount> { return this.serialize(() => this.crud.getFilteredTableRows(t, c, a, s, p, f)); }\n getRow(t: string, c: string, v: string): Observable<DataResults> { return this.serialize(() => this.crud.getRow(t, c, v)); }\n getRowByValues(t: string, f: FilterPair[]): Observable<DataResults> { return this.serialize(() => this.crud.getRowByValues(t, f)); }\n updateItem(body: UpdateItemBody): Observable<void> { return this.serialize(() => this.crud.updateItem(body)); }\n deleteItem(t: string, c: string, v: string): Observable<void> { return this.serialize(() => this.crud.deleteItem(t, c, v)); }\n getDbSchema(): Observable<DatabaseSchema> { return this.serialize(() => this.crud.getDbSchema()); }\n getFkOptions(t: string, s: string, p: number): Observable<FkOptionsResponse> { return this.serialize(() => this.crud.getFkOptions(t, s, p)); }\n resolveFkDisplay(t: string, v: string[]): Observable<FkDisplayResponse> { return this.serialize(() => this.crud.resolveFkDisplay(t, v)); }\n\n // --- AuthAccess ---\n register(f: string, l: string, e: string, p: string): Observable<void> { return this.serialize(() => this.auth.register(f, l, e, p)); }\n verify(email: string, secret: string): Observable<void> { return this.serialize(() => this.auth.verify(email, secret)); }\n login(loginInfo: LoginInfo): Observable<void> { return this.serialize(() => this.auth.login(loginInfo)); }\n logout(): Observable<void> { return this.serialize(() => this.auth.logout()); }\n me(): Observable<void> { return this.serialize(() => this.auth.me()); }\n remember(): Observable<void> { return this.serialize(() => this.auth.remember()); }\n getUserInfo(): Observable<UserInfo> { return this.serialize(() => this.auth.getUserInfo()); }\n setUserInfo(userInfo: SetUserInfo): Observable<void> { return this.serialize(() => this.auth.setUserInfo(userInfo)); }\n updateUserPassword(passwordInfo: UpdateUserPasswordInfo): Observable<void> { return this.serialize(() => this.auth.updateUserPassword(passwordInfo)); }\n\n // --- PhotoAccess ---\n uploadPhoto(t: string, id: number, data: ArrayBuffer, type: string): Observable<SourcePhotoInfo> { return this.serialize(() => this.photo.uploadPhoto(t, id, data, type)); }\n uploadUserPhoto(data: ArrayBuffer, type: string): Observable<SourcePhotoInfo> { return this.serialize(() => this.photo.uploadUserPhoto(data, type)); }\n deletePhoto(t: string, id: number): Observable<void> { return this.serialize(() => this.photo.deletePhoto(t, id)); }\n hasPhoto(t: string, id: number): Observable<{ has_photo: boolean }> { return this.serialize(() => this.photo.hasPhoto(t, id)); }\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\nimport { CrudAccess } from './crud-access';\nimport { AuthAccess } from './auth-access';\nimport { PhotoAccess } from './photo-access';\nimport { HonuwareAccessProxy } from './honuware-access-proxy';\n\n// Narrow injection seams over the server-access layer. Framework-generic\n// consumers (controls, auth, photos, the generic CRUD editor) inject these\n// instead of a full ~250-method app interface, so a foreign app can satisfy\n// them with a 25-method implementation.\n//\n// The default resolves to HonuwareAccessProxy — the request-serializing façade\n// over the default HTTP implementations — so a consumer that does nothing gets\n// working, correctly-serialized access to the standard honuware endpoints. An\n// app that has its own request-serializing client (like knottyyoga's\n// ServerAccessProxy) overrides these tokens to point at it.\n\nexport const HONUWARE_CRUD_ACCESS = new InjectionToken<CrudAccess>(\n 'HONUWARE_CRUD_ACCESS',\n { providedIn: 'root', factory: () => inject(HonuwareAccessProxy) }\n);\n\nexport const HONUWARE_AUTH_ACCESS = new InjectionToken<AuthAccess>(\n 'HONUWARE_AUTH_ACCESS',\n { providedIn: 'root', factory: () => inject(HonuwareAccessProxy) }\n);\n\nexport const HONUWARE_PHOTO_ACCESS = new InjectionToken<PhotoAccess>(\n 'HONUWARE_PHOTO_ACCESS',\n { providedIn: 'root', factory: () => inject(HonuwareAccessProxy) }\n);\n\nexport interface HonuwareAccessConfig {\n /**\n * 'http' (default): wire the three tokens to the serializing proxy over the\n * default HTTP implementations. 'mock': wire them to caller-supplied\n * implementations (e.g. the in-memory mocks from @honuware/ui/testing).\n */\n mode?: 'http' | 'mock';\n crud?: CrudAccess;\n auth?: AuthAccess;\n photo?: PhotoAccess;\n}\n\n// Convenience wiring for a consumer's app config. `mode: 'http'` (default) is\n// equivalent to the token defaults; `mode: 'mock'` requires the caller to\n// supply crud/auth/photo implementations (the testing entry point provides a\n// wrapper that fills them in).\nexport function provideHonuwareAccess(config: HonuwareAccessConfig = {}): Provider[] {\n if (config.mode === 'mock') {\n if (!config.crud || !config.auth || !config.photo) {\n throw new Error('provideHonuwareAccess({ mode: \"mock\" }) requires crud, auth, and photo implementations.');\n }\n return [\n { provide: HONUWARE_CRUD_ACCESS, useValue: config.crud },\n { provide: HONUWARE_AUTH_ACCESS, useValue: config.auth },\n { provide: HONUWARE_PHOTO_ACCESS, useValue: config.photo },\n ];\n }\n return [\n { provide: HONUWARE_CRUD_ACCESS, useExisting: HonuwareAccessProxy },\n { provide: HONUWARE_AUTH_ACCESS, useExisting: HonuwareAccessProxy },\n { provide: HONUWARE_PHOTO_ACCESS, useExisting: HonuwareAccessProxy },\n ];\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HONUWARE_API_BASE } from './api-base';\n\n// Builds the <img src> URLs for server-scaled photos, so no component\n// string-concatenates API paths. Callers append their own cache-busting query\n// params when they need them.\n@Injectable({ providedIn: 'root' })\nexport class PhotoUrlBuilder {\n constructor(@Inject(HONUWARE_API_BASE) private apiBase: string) {}\n\n public scaledPhotoUrl(\n tableName: string,\n tableItemId: number | string,\n width: number,\n height: number\n ): string {\n return `${this.apiBase}/get_scaled_photo/${tableName}/${tableItemId}/${width}/${height}`;\n }\n}\n","/**\n * RFC 7807 Problem Details for HTTP APIs\n * https://tools.ietf.org/html/rfc7807\n */\nexport interface ProblemDetails {\n /** Error type identifier (e.g., \"validation_error\") */\n type: string;\n /** Short human-readable summary */\n title: string;\n /** HTTP status code */\n status: number;\n /** Human-readable explanation for this specific occurrence */\n detail: string;\n /** URI reference identifying the specific occurrence (optional) */\n instance?: string;\n /** For validation errors, which field failed (extension) */\n field?: string;\n /** What constraint was violated (extension) */\n constraint?: string;\n /** For payment errors, which provider (extension) */\n provider?: string;\n /** Provider's error code (extension) */\n provider_code?: string;\n /** Allow additional extension fields */\n [key: string]: unknown;\n}\n\n/** Error type constants matching server-side ErrorCodes */\nexport const ErrorTypes = {\n VALIDATION_ERROR: 'validation_error',\n BAD_REQUEST: 'bad_request',\n NOT_AUTHENTICATED: 'not_authenticated',\n INVALID_CREDENTIALS: 'invalid_credentials',\n SESSION_EXPIRED: 'session_expired',\n NOT_AUTHORIZED: 'not_authorized',\n NOT_FOUND: 'not_found',\n IDEMPOTENCY_CONFLICT: 'idempotency_conflict',\n INTERNAL_ERROR: 'internal_error',\n PAYMENT_DECLINED: 'payment_declined',\n PAYMENT_FAILED: 'payment_failed',\n VOUCHER_INVALID: 'voucher_invalid',\n SEATS_EXCEEDED: 'seats_exceeded',\n BOOKING_CONFLICT: 'booking_conflict',\n} as const;\n\nexport type ErrorType = (typeof ErrorTypes)[keyof typeof ErrorTypes];\n\n/** Check if an error response is in RFC 7807 format */\nexport function isProblemDetails(error: unknown): error is ProblemDetails {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'type' in error &&\n 'status' in error &&\n typeof (error as ProblemDetails).type === 'string' &&\n typeof (error as ProblemDetails).status === 'number'\n );\n}\n","import { Injectable } from '@angular/core';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ProblemDetails, isProblemDetails } from './ApiError';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ErrorService {\n /**\n * Parse an HTTP error response into RFC 7807 ProblemDetails format.\n * Handles both new RFC 7807 responses and legacy plain-text errors.\n */\n parseError(error: HttpErrorResponse): ProblemDetails {\n // Check if response is already RFC 7807 format\n if (isProblemDetails(error.error)) {\n return error.error;\n }\n\n // Fallback for legacy plain-text errors\n return {\n type: this.inferTypeFromStatus(error.status),\n title: this.getTitleForStatus(error.status),\n status: error.status,\n detail: this.extractDetailFromError(error),\n };\n }\n\n /**\n * Get user-friendly message from a ProblemDetails error.\n * The detail field should already be user-friendly.\n */\n getUserFriendlyMessage(error: ProblemDetails): string {\n return error.detail || error.title || 'An error occurred';\n }\n\n private inferTypeFromStatus(status: number): string {\n switch (status) {\n case 400:\n return 'bad_request';\n case 401:\n return 'not_authenticated';\n case 403:\n return 'not_authorized';\n case 404:\n return 'not_found';\n case 409:\n return 'idempotency_conflict';\n case 402:\n return 'payment_failed';\n default:\n return 'internal_error';\n }\n }\n\n private getTitleForStatus(status: number): string {\n switch (status) {\n case 400:\n return 'Bad Request';\n case 401:\n return 'Authentication Required';\n case 403:\n return 'Not Authorized';\n case 404:\n return 'Not Found';\n case 409:\n return 'Conflict';\n case 402:\n return 'Payment Failed';\n case 500:\n return 'Internal Server Error';\n default:\n return 'Error';\n }\n }\n\n private extractDetailFromError(error: HttpErrorResponse): string {\n // If error body is a string, use it directly\n if (typeof error.error === 'string' && error.error.length > 0) {\n return error.error;\n }\n\n // If there's an error message property\n if (error.error?.message) {\n return error.error.message;\n }\n\n // Use HTTP status text as fallback\n if (error.statusText && error.statusText !== 'Unknown Error') {\n return error.statusText;\n }\n\n // Final fallback\n return 'An unexpected error occurred. Please try again later.';\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n HttpInterceptor,\n HttpRequest,\n HttpHandler,\n HttpEvent,\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nconst CSRF_COOKIE_NAME = 'csrft';\nconst CSRF_HEADER_NAME = 'X-CSRF-Token';\n\nconst STATE_CHANGING_METHODS = new Set<string>([\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n]);\n\n/**\n * Phase 4.3 of the security review: companion to the server-side\n * CsrfGuard middleware.\n *\n * On every state-changing request, read the `csrft` cookie that the\n * backend set at login time (Phase 4.1), and copy its value into the\n * `X-CSRF-Token` header. The double-submit pattern: an attacker on\n * a different origin cannot read the cookie value across origins, so\n * they can't forge a matching header.\n *\n * GETs / HEADs / OPTIONS pass through untouched. Requests that fire\n * before the user has logged in (no cookie present) pass through\n * unmodified — the server-side guard exempts the bootstrap endpoints\n * (login / register / remember / verify) explicitly, so these still\n * succeed.\n */\n@Injectable()\nexport class CsrfInterceptor implements HttpInterceptor {\n intercept(\n request: HttpRequest<unknown>,\n next: HttpHandler\n ): Observable<HttpEvent<unknown>> {\n if (!STATE_CHANGING_METHODS.has(request.method.toUpperCase())) {\n return next.handle(request);\n }\n\n const token = this.readCsrfCookie();\n if (!token) {\n return next.handle(request);\n }\n\n const cloned = request.clone({\n setHeaders: { [CSRF_HEADER_NAME]: token },\n });\n return next.handle(cloned);\n }\n\n private readCsrfCookie(): string | null {\n if (typeof document === 'undefined' || !document.cookie) return null;\n const pairs = document.cookie.split(';');\n for (const pair of pairs) {\n const eq = pair.indexOf('=');\n if (eq < 0) continue;\n const key = pair.slice(0, eq).trim();\n if (key === CSRF_COOKIE_NAME) {\n return pair.slice(eq + 1).trim();\n }\n }\n return null;\n }\n}\n","import { ColumnDataInfo } from './ColumnDataInfo';\n\nexport function ColumnDataInfoFromJSON(obj: unknown): ColumnDataInfo {\n const input = obj as Record<string, unknown>;\n\n function parseString(val: unknown): string | unknown {\n if (val === null) return undefined;\n return typeof val === 'string' ? val : undefined;\n }\n\n function parseBool(val: unknown): boolean | unknown {\n if (val === null) return undefined;\n if (val === 't') return true;\n if (val === 'f') return false;\n return undefined;\n }\n\n function parseNumber(val: unknown): number | unknown {\n if (val === null) return undefined;\n if (typeof val === 'string') {\n const num = Number(val);\n return isNaN(num) ? undefined : num;\n }\n return undefined;\n }\n\n function parseStringArray(val: unknown): string[] | undefined {\n if (!Array.isArray(val)) return undefined;\n return val.filter((v): v is string => typeof v === 'string');\n }\n\n return {\n column_name: parseString(input['column_name']) as string,\n type: parseString(input['type']) as string,\n primary_key: parseBool(input['primary_key']) as boolean,\n unique: parseBool(input['unique']) as boolean,\n nullable: parseBool(input['nullable']) as boolean,\n\n column_friendly_name: parseString(input['column_friendly_name']) as string | undefined,\n label: parseString(input['label']) as string | undefined,\n hint: parseString(input['hint']) as string | undefined,\n place_holder: parseString(input['place_holder']) as string | undefined,\n regex: parseString(input['regex']) as string | undefined,\n html_input_type: parseString(input['html_input_type']) as string | undefined,\n required: parseBool(input['required']) as boolean | undefined,\n max_length: parseNumber(input['max_length']) as number | undefined,\n default_value: parseString(input['default_value']) as string | undefined,\n rows: parseNumber(input['rows']) as number | undefined,\n hidden: parseBool(input['hidden']) as boolean | undefined,\n readonly: parseBool(input['readonly']) as boolean | undefined,\n enum_values: parseStringArray(input['enum_values']),\n };\n}\n\n","/*\n * @honuware/ui/access\n *\n * The framework server-access seam: the narrow CrudAccess / AuthAccess /\n * PhotoAccess interfaces + injection tokens, the framework DTO types\n * (ColumnDataInfo + JSON conversion, DataResults, DatabaseSchema, TableSchema,\n * ForeignKeyInfo, admin.types, photo.types), the RFC 7807 stack (ApiError +\n * ErrorService), CsrfInterceptor, PhotoUrlBuilder, the request-serializing\n * proxy, and the default HTTP implementations (provideHonuwareAccess).\n */\n\n// Interfaces + request/response types\nexport * from './crud-access';\nexport * from './auth-access';\nexport * from './photo-access';\n\n// Tokens + provider helper\nexport * from './access-tokens';\nexport * from './api-base';\n\n// Runtime: proxy, HTTP implementations, services, interceptor\nexport * from './honuware-access-proxy';\nexport * from './crud-http-access';\nexport * from './auth-http-access';\nexport * from './photo-http-access';\nexport * from './photo-url-builder';\nexport * from './error.service';\nexport * from './csrf.interceptor';\nexport * from './conversion';\n\n// Framework DTO types\nexport * from './ColumnDataInfo';\nexport * from './DataResults';\nexport * from './DatabaseSchema';\nexport * from './TableSchema';\nexport * from './ForeignKeyInfo';\nexport * from './admin.types';\nexport * from './photo.types';\nexport * from './ApiError';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CrudHttpAccess","i2.AuthHttpAccess","i3.PhotoHttpAccess"],"mappings":"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"}
|