@modern-admin/react 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.
Files changed (261) hide show
  1. package/dist/action-guard.d.ts +13 -0
  2. package/dist/action-guard.d.ts.map +1 -0
  3. package/dist/action-guard.js +15 -0
  4. package/dist/action-guard.js.map +1 -0
  5. package/dist/action-menu.d.ts +17 -0
  6. package/dist/action-menu.d.ts.map +1 -0
  7. package/dist/action-menu.jsx +80 -0
  8. package/dist/action-menu.jsx.map +1 -0
  9. package/dist/admin-app.d.ts +23 -0
  10. package/dist/admin-app.d.ts.map +1 -0
  11. package/dist/admin-app.jsx +407 -0
  12. package/dist/admin-app.jsx.map +1 -0
  13. package/dist/admin-router.d.ts +29 -0
  14. package/dist/admin-router.d.ts.map +1 -0
  15. package/dist/admin-router.jsx +215 -0
  16. package/dist/admin-router.jsx.map +1 -0
  17. package/dist/breadcrumbs.d.ts +17 -0
  18. package/dist/breadcrumbs.d.ts.map +1 -0
  19. package/dist/breadcrumbs.jsx +40 -0
  20. package/dist/breadcrumbs.jsx.map +1 -0
  21. package/dist/client.d.ts +526 -0
  22. package/dist/client.d.ts.map +1 -0
  23. package/dist/client.js +582 -0
  24. package/dist/client.js.map +1 -0
  25. package/dist/component-loader.d.ts +10 -0
  26. package/dist/component-loader.d.ts.map +1 -0
  27. package/dist/component-loader.js +23 -0
  28. package/dist/component-loader.js.map +1 -0
  29. package/dist/components/ai-assistant-widget.d.ts +3 -0
  30. package/dist/components/ai-assistant-widget.d.ts.map +1 -0
  31. package/dist/components/ai-assistant-widget.jsx +390 -0
  32. package/dist/components/ai-assistant-widget.jsx.map +1 -0
  33. package/dist/components/ai-fill-dialog.d.ts +9 -0
  34. package/dist/components/ai-fill-dialog.d.ts.map +1 -0
  35. package/dist/components/ai-fill-dialog.jsx +105 -0
  36. package/dist/components/ai-fill-dialog.jsx.map +1 -0
  37. package/dist/components/chart-builder-dialog.d.ts +10 -0
  38. package/dist/components/chart-builder-dialog.d.ts.map +1 -0
  39. package/dist/components/chart-builder-dialog.jsx +433 -0
  40. package/dist/components/chart-builder-dialog.jsx.map +1 -0
  41. package/dist/components/chart-widget.d.ts +12 -0
  42. package/dist/components/chart-widget.d.ts.map +1 -0
  43. package/dist/components/chart-widget.jsx +365 -0
  44. package/dist/components/chart-widget.jsx.map +1 -0
  45. package/dist/components/global-search-dialog.d.ts +7 -0
  46. package/dist/components/global-search-dialog.d.ts.map +1 -0
  47. package/dist/components/global-search-dialog.jsx +187 -0
  48. package/dist/components/global-search-dialog.jsx.map +1 -0
  49. package/dist/components/group-settings-dialog.d.ts +13 -0
  50. package/dist/components/group-settings-dialog.d.ts.map +1 -0
  51. package/dist/components/group-settings-dialog.jsx +53 -0
  52. package/dist/components/group-settings-dialog.jsx.map +1 -0
  53. package/dist/components/move-chart-dialog.d.ts +18 -0
  54. package/dist/components/move-chart-dialog.d.ts.map +1 -0
  55. package/dist/components/move-chart-dialog.jsx +68 -0
  56. package/dist/components/move-chart-dialog.jsx.map +1 -0
  57. package/dist/components/reference-multi-table-dialog.d.ts +12 -0
  58. package/dist/components/reference-multi-table-dialog.d.ts.map +1 -0
  59. package/dist/components/reference-multi-table-dialog.jsx +126 -0
  60. package/dist/components/reference-multi-table-dialog.jsx.map +1 -0
  61. package/dist/components/related-records-tabs.d.ts +8 -0
  62. package/dist/components/related-records-tabs.d.ts.map +1 -0
  63. package/dist/components/related-records-tabs.jsx +75 -0
  64. package/dist/components/related-records-tabs.jsx.map +1 -0
  65. package/dist/components/revisions-button.d.ts +7 -0
  66. package/dist/components/revisions-button.d.ts.map +1 -0
  67. package/dist/components/revisions-button.jsx +152 -0
  68. package/dist/components/revisions-button.jsx.map +1 -0
  69. package/dist/components/wizard-form.d.ts +43 -0
  70. package/dist/components/wizard-form.d.ts.map +1 -0
  71. package/dist/components/wizard-form.jsx +136 -0
  72. package/dist/components/wizard-form.jsx.map +1 -0
  73. package/dist/dashboard/time-series.d.ts +20 -0
  74. package/dist/dashboard/time-series.d.ts.map +1 -0
  75. package/dist/dashboard/time-series.js +108 -0
  76. package/dist/dashboard/time-series.js.map +1 -0
  77. package/dist/dialogs.d.ts +35 -0
  78. package/dist/dialogs.d.ts.map +1 -0
  79. package/dist/dialogs.jsx +152 -0
  80. package/dist/dialogs.jsx.map +1 -0
  81. package/dist/export.d.ts +39 -0
  82. package/dist/export.d.ts.map +1 -0
  83. package/dist/export.js +114 -0
  84. package/dist/export.js.map +1 -0
  85. package/dist/extension-registry.d.ts +122 -0
  86. package/dist/extension-registry.d.ts.map +1 -0
  87. package/dist/extension-registry.js +93 -0
  88. package/dist/extension-registry.js.map +1 -0
  89. package/dist/header-controls.d.ts +4 -0
  90. package/dist/header-controls.d.ts.map +1 -0
  91. package/dist/header-controls.jsx +70 -0
  92. package/dist/header-controls.jsx.map +1 -0
  93. package/dist/hooks.d.ts +104 -0
  94. package/dist/hooks.d.ts.map +1 -0
  95. package/dist/hooks.js +374 -0
  96. package/dist/hooks.js.map +1 -0
  97. package/dist/hotkey-help.d.ts +3 -0
  98. package/dist/hotkey-help.d.ts.map +1 -0
  99. package/dist/hotkey-help.jsx +32 -0
  100. package/dist/hotkey-help.jsx.map +1 -0
  101. package/dist/hotkey-registry.d.ts +18 -0
  102. package/dist/hotkey-registry.d.ts.map +1 -0
  103. package/dist/hotkey-registry.jsx +34 -0
  104. package/dist/hotkey-registry.jsx.map +1 -0
  105. package/dist/i18n.d.ts +74 -0
  106. package/dist/i18n.d.ts.map +1 -0
  107. package/dist/i18n.jsx +127 -0
  108. package/dist/i18n.jsx.map +1 -0
  109. package/dist/index.d.ts +35 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +36 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/notify.d.ts +41 -0
  114. package/dist/notify.d.ts.map +1 -0
  115. package/dist/notify.jsx +58 -0
  116. package/dist/notify.jsx.map +1 -0
  117. package/dist/pages/ai-assistant-settings-section.d.ts +3 -0
  118. package/dist/pages/ai-assistant-settings-section.d.ts.map +1 -0
  119. package/dist/pages/ai-assistant-settings-section.jsx +126 -0
  120. package/dist/pages/ai-assistant-settings-section.jsx.map +1 -0
  121. package/dist/pages/audit-log-page.d.ts +3 -0
  122. package/dist/pages/audit-log-page.d.ts.map +1 -0
  123. package/dist/pages/audit-log-page.jsx +354 -0
  124. package/dist/pages/audit-log-page.jsx.map +1 -0
  125. package/dist/pages/edit-page.d.ts +7 -0
  126. package/dist/pages/edit-page.d.ts.map +1 -0
  127. package/dist/pages/edit-page.jsx +614 -0
  128. package/dist/pages/edit-page.jsx.map +1 -0
  129. package/dist/pages/export-dialog.d.ts +11 -0
  130. package/dist/pages/export-dialog.d.ts.map +1 -0
  131. package/dist/pages/export-dialog.jsx +102 -0
  132. package/dist/pages/export-dialog.jsx.map +1 -0
  133. package/dist/pages/home-page.d.ts +3 -0
  134. package/dist/pages/home-page.d.ts.map +1 -0
  135. package/dist/pages/home-page.jsx +211 -0
  136. package/dist/pages/home-page.jsx.map +1 -0
  137. package/dist/pages/list-page.d.ts +42 -0
  138. package/dist/pages/list-page.d.ts.map +1 -0
  139. package/dist/pages/list-page.jsx +1596 -0
  140. package/dist/pages/list-page.jsx.map +1 -0
  141. package/dist/pages/login-page.d.ts +11 -0
  142. package/dist/pages/login-page.d.ts.map +1 -0
  143. package/dist/pages/login-page.jsx +157 -0
  144. package/dist/pages/login-page.jsx.map +1 -0
  145. package/dist/pages/settings-page.d.ts +5 -0
  146. package/dist/pages/settings-page.d.ts.map +1 -0
  147. package/dist/pages/settings-page.jsx +787 -0
  148. package/dist/pages/settings-page.jsx.map +1 -0
  149. package/dist/pages/settings-shared.d.ts +51 -0
  150. package/dist/pages/settings-shared.d.ts.map +1 -0
  151. package/dist/pages/settings-shared.jsx +66 -0
  152. package/dist/pages/settings-shared.jsx.map +1 -0
  153. package/dist/pages/show-page.d.ts +7 -0
  154. package/dist/pages/show-page.d.ts.map +1 -0
  155. package/dist/pages/show-page.jsx +147 -0
  156. package/dist/pages/show-page.jsx.map +1 -0
  157. package/dist/pages/wizard-create-page.d.ts +14 -0
  158. package/dist/pages/wizard-create-page.d.ts.map +1 -0
  159. package/dist/pages/wizard-create-page.jsx +106 -0
  160. package/dist/pages/wizard-create-page.jsx.map +1 -0
  161. package/dist/property-renderer.d.ts +8 -0
  162. package/dist/property-renderer.d.ts.map +1 -0
  163. package/dist/property-renderer.jsx +690 -0
  164. package/dist/property-renderer.jsx.map +1 -0
  165. package/dist/provider.d.ts +20 -0
  166. package/dist/provider.d.ts.map +1 -0
  167. package/dist/provider.jsx +32 -0
  168. package/dist/provider.jsx.map +1 -0
  169. package/dist/realtime.d.ts +22 -0
  170. package/dist/realtime.d.ts.map +1 -0
  171. package/dist/realtime.js +38 -0
  172. package/dist/realtime.js.map +1 -0
  173. package/dist/reference.d.ts +52 -0
  174. package/dist/reference.d.ts.map +1 -0
  175. package/dist/reference.jsx +224 -0
  176. package/dist/reference.jsx.map +1 -0
  177. package/dist/relations.d.ts +11 -0
  178. package/dist/relations.d.ts.map +1 -0
  179. package/dist/relations.js +36 -0
  180. package/dist/relations.js.map +1 -0
  181. package/dist/router.d.ts +82 -0
  182. package/dist/router.d.ts.map +1 -0
  183. package/dist/router.jsx +187 -0
  184. package/dist/router.jsx.map +1 -0
  185. package/dist/show-when.d.ts +7 -0
  186. package/dist/show-when.d.ts.map +1 -0
  187. package/dist/show-when.js +77 -0
  188. package/dist/show-when.js.map +1 -0
  189. package/dist/types.d.ts +194 -0
  190. package/dist/types.d.ts.map +1 -0
  191. package/dist/types.js +18 -0
  192. package/dist/types.js.map +1 -0
  193. package/dist/use-dashboard-charts.d.ts +93 -0
  194. package/dist/use-dashboard-charts.d.ts.map +1 -0
  195. package/dist/use-dashboard-charts.js +263 -0
  196. package/dist/use-dashboard-charts.js.map +1 -0
  197. package/dist/use-hotkey.d.ts +17 -0
  198. package/dist/use-hotkey.d.ts.map +1 -0
  199. package/dist/use-hotkey.js +103 -0
  200. package/dist/use-hotkey.js.map +1 -0
  201. package/dist/user-directory.d.ts +18 -0
  202. package/dist/user-directory.d.ts.map +1 -0
  203. package/dist/user-directory.js +51 -0
  204. package/dist/user-directory.js.map +1 -0
  205. package/dist/validation.d.ts +22 -0
  206. package/dist/validation.d.ts.map +1 -0
  207. package/dist/validation.js +338 -0
  208. package/dist/validation.js.map +1 -0
  209. package/package.json +59 -0
  210. package/src/action-guard.ts +20 -0
  211. package/src/action-menu.tsx +161 -0
  212. package/src/admin-app.tsx +630 -0
  213. package/src/admin-router.tsx +273 -0
  214. package/src/breadcrumbs.tsx +75 -0
  215. package/src/client.ts +1093 -0
  216. package/src/component-loader.ts +33 -0
  217. package/src/components/ai-assistant-widget.tsx +565 -0
  218. package/src/components/ai-fill-dialog.tsx +143 -0
  219. package/src/components/chart-builder-dialog.tsx +618 -0
  220. package/src/components/chart-widget.tsx +654 -0
  221. package/src/components/global-search-dialog.tsx +272 -0
  222. package/src/components/group-settings-dialog.tsx +93 -0
  223. package/src/components/move-chart-dialog.tsx +130 -0
  224. package/src/components/reference-multi-table-dialog.tsx +196 -0
  225. package/src/components/related-records-tabs.tsx +130 -0
  226. package/src/components/revisions-button.tsx +237 -0
  227. package/src/components/wizard-form.tsx +302 -0
  228. package/src/dashboard/time-series.ts +125 -0
  229. package/src/dialogs.tsx +265 -0
  230. package/src/export.ts +140 -0
  231. package/src/extension-registry.ts +195 -0
  232. package/src/header-controls.tsx +125 -0
  233. package/src/hooks.ts +509 -0
  234. package/src/hotkey-help.tsx +56 -0
  235. package/src/hotkey-registry.tsx +60 -0
  236. package/src/i18n.tsx +267 -0
  237. package/src/index.ts +192 -0
  238. package/src/notify.tsx +94 -0
  239. package/src/pages/ai-assistant-settings-section.tsx +167 -0
  240. package/src/pages/audit-log-page.tsx +580 -0
  241. package/src/pages/edit-page.tsx +743 -0
  242. package/src/pages/export-dialog.tsx +154 -0
  243. package/src/pages/home-page.tsx +318 -0
  244. package/src/pages/list-page.tsx +2645 -0
  245. package/src/pages/login-page.tsx +242 -0
  246. package/src/pages/settings-page.tsx +1143 -0
  247. package/src/pages/settings-shared.tsx +134 -0
  248. package/src/pages/show-page.tsx +223 -0
  249. package/src/pages/wizard-create-page.tsx +164 -0
  250. package/src/property-renderer.tsx +1143 -0
  251. package/src/provider.tsx +70 -0
  252. package/src/realtime.ts +55 -0
  253. package/src/reference.tsx +386 -0
  254. package/src/relations.ts +55 -0
  255. package/src/router.tsx +211 -0
  256. package/src/show-when.ts +76 -0
  257. package/src/types.ts +198 -0
  258. package/src/use-dashboard-charts.ts +362 -0
  259. package/src/use-hotkey.ts +128 -0
  260. package/src/user-directory.ts +56 -0
  261. package/src/validation.ts +361 -0
@@ -0,0 +1,526 @@
1
+ import type { DashboardBlob } from '@modern-admin/core';
2
+ import type { AdminConfig, CustomActionResponse, CurrentUser, ListQuery, ListResponse, RecordResponse } from './types.js';
3
+ export interface AuthUiProps {
4
+ /** Enabled OAuth provider ids, e.g. ['google', 'github']. */
5
+ providers: string[];
6
+ emailAndPassword: boolean;
7
+ }
8
+ export interface AdminClientOptions {
9
+ /** Absolute base URL of the API, e.g. http://localhost:3001 — defaults to same-origin. */
10
+ baseUrl?: string;
11
+ /** Send credentials with every request (cookies for Better Auth sessions). */
12
+ credentials?: RequestCredentials;
13
+ /** Optional global headers (auth tokens, CSRF). */
14
+ headers?: Record<string, string>;
15
+ persistDemoSession?: boolean;
16
+ demoSessionStorageKey?: string;
17
+ /**
18
+ * Path under which the host mounts Better Auth's Node handler
19
+ * (`toNodeHandler(auth)`) AND configures `betterAuth({ basePath })`.
20
+ * Drives the sign-in / sign-out endpoints — defaults to
21
+ * `/admin/api/auth`, matching the canonical CLI scaffold. Override only
22
+ * if the host mounts Better Auth elsewhere; pass *without* a trailing
23
+ * slash, e.g. `'/api/auth'` (Better Auth's own default).
24
+ */
25
+ authBasePath?: string;
26
+ }
27
+ export declare class AdminClient {
28
+ private readonly baseUrl;
29
+ private readonly credentials;
30
+ private readonly headers;
31
+ private readonly demoSessionStorageKey;
32
+ private readonly authBasePath;
33
+ private readonly signInPath;
34
+ private readonly signOutPath;
35
+ constructor(opts?: AdminClientOptions);
36
+ private requestOnce;
37
+ private request;
38
+ private readDemoSession;
39
+ private writeDemoSession;
40
+ private clearDemoSession;
41
+ private restoreDemoSession;
42
+ config(): Promise<AdminConfig>;
43
+ /** Resolve the current authenticated admin. Throws AdminApiError(401) when
44
+ * unauthenticated — callers should branch on that to render login. */
45
+ me(): Promise<{
46
+ user: CurrentUser;
47
+ }>;
48
+ /** Email/password login via the host-mounted Better Auth handler. The
49
+ * endpoint sets an http-only session cookie that subsequent requests
50
+ * rely on (`credentials: 'include'`). The audit-log entry is written
51
+ * server-side by Better Auth's `session.create.after` hook, which
52
+ * covers email/password, OAuth, passkey and api-key flows uniformly. */
53
+ login(email: string, password: string): Promise<void>;
54
+ /** Fetch public auth UI metadata: which social providers are enabled,
55
+ * whether email/password login is active. The endpoint is unauthenticated. */
56
+ getAuthUiProps(): Promise<AuthUiProps>;
57
+ /** Initiate an OAuth social-login flow. Calls Better Auth's sign-in/social
58
+ * endpoint which returns a redirect URL, then navigates the browser there.
59
+ * `callbackUrl` defaults to the current page so the app re-checks auth
60
+ * after the provider redirects back. */
61
+ loginSocial(provider: string, callbackUrl?: string): Promise<void>;
62
+ /** Sign the current session out. Better Auth's sign-out endpoint requires
63
+ * an explicit JSON body (even if empty) when Content-Type is JSON. */
64
+ logout(): Promise<void>;
65
+ list(resourceId: string, query?: ListQuery): Promise<ListResponse>;
66
+ show(resourceId: string, recordId: string): Promise<RecordResponse>;
67
+ create(resourceId: string, payload: Record<string, unknown>): Promise<RecordResponse>;
68
+ update(resourceId: string, recordId: string, payload: Record<string, unknown>): Promise<RecordResponse>;
69
+ delete(resourceId: string, recordId: string): Promise<void>;
70
+ /** Bulk-delete a set of records via the resource's `bulkDelete` action. */
71
+ bulkDelete(resourceId: string, recordIds: ReadonlyArray<string>): Promise<unknown>;
72
+ /** Fetch distinct values for a field — used by the filter value picker.
73
+ * Returns `{ values, hasMore }`. */
74
+ distinctValues(resourceId: string, field: string, options?: {
75
+ search?: string;
76
+ limit?: number;
77
+ }): Promise<{
78
+ values: string[];
79
+ hasMore: boolean;
80
+ }>;
81
+ search(resourceId: string, query: string): Promise<ListResponse>;
82
+ /** Cross-resource search. Fans `query` out to every registered resource's
83
+ * `search` action; resources the principal cannot access are omitted.
84
+ *
85
+ * Accepts an optional `AbortSignal` so the command-palette dialog can
86
+ * cancel an in-flight request when the user keeps typing — without this
87
+ * the server is hit once per keystroke and stale responses race with
88
+ * newer ones. */
89
+ globalSearch(query: string, perResourceLimit?: number, options?: {
90
+ signal?: AbortSignal;
91
+ }): Promise<GlobalSearchResponse>;
92
+ /** Invoke a custom record-scoped action (actionType: 'record'). */
93
+ invokeRecordAction(resourceId: string, recordId: string, actionName: string, payload?: Record<string, unknown>): Promise<CustomActionResponse>;
94
+ /** Invoke a custom bulk-scoped action (actionType: 'bulk'). */
95
+ invokeBulkAction(resourceId: string, actionName: string, recordIds: ReadonlyArray<string>): Promise<CustomActionResponse>;
96
+ /** Invoke a custom resource-scoped action (actionType: 'resource'). */
97
+ invokeResourceAction(resourceId: string, actionName: string, payload?: Record<string, unknown>): Promise<CustomActionResponse>;
98
+ /**
99
+ * Run a time-series aggregation. KPI mode = `step: 'all'`. Multi-series
100
+ * via secondary `groupBy` (top-N truncation server-side).
101
+ */
102
+ timeseries(query: TimeSeriesQuery): Promise<TimeSeriesResponse>;
103
+ listHistory(resourceId: string, recordId: string, query?: {
104
+ limit?: number;
105
+ offset?: number;
106
+ }): Promise<HistoryListResponse>;
107
+ getHistoryRevision(resourceId: string, recordId: string, revisionId: string): Promise<HistoryRevisionResponse>;
108
+ revertHistoryRevision(resourceId: string, recordId: string, revisionId: string, body?: {
109
+ reason?: string;
110
+ }): Promise<RecordResponse>;
111
+ listAuditLog(query?: AuditLogQuery): Promise<AuditLogResponse>;
112
+ /**
113
+ * Upload a single file for a `type: 'file'` property, reporting progress
114
+ * via `options.onProgress`. Uses `XMLHttpRequest` because the fetch API
115
+ * does not expose upload-side progress events.
116
+ *
117
+ * Returns the metadata record for the uploaded file. The server endpoint
118
+ * (`POST /admin/api/resources/:id/actions/upload`) accepts batch uploads
119
+ * and replies with an array; we send one file per request and unwrap the
120
+ * single result so the caller gets per-file progress and per-file errors.
121
+ */
122
+ uploadFile(resourceId: string, field: string, file: File, options?: UploadFileOptions): Promise<UploadedFileInfo>;
123
+ /**
124
+ * Upload many files with bounded concurrency, reporting per-file progress
125
+ * via `options.onItem*` callbacks. Each file is sent in its own request,
126
+ * so partial failures do not affect already-completed uploads.
127
+ *
128
+ * Returns the array of successful results in the order files were passed.
129
+ * Failed entries are omitted from the returned array; consumers wanting
130
+ * to react to failures should observe `onItemError`.
131
+ */
132
+ uploadFiles(resourceId: string, field: string, files: ReadonlyArray<File>, options?: UploadFilesOptions): Promise<UploadedFileInfo[]>;
133
+ /** Load the current user's dashboard layout from the server config store. */
134
+ loadDashboard(): Promise<{
135
+ dashboard: DashboardBlob;
136
+ }>;
137
+ /** Persist the current user's dashboard layout to the server config store. */
138
+ saveDashboard(dashboard: DashboardBlob): Promise<{
139
+ ok: boolean;
140
+ }>;
141
+ /** List API keys belonging to the current admin. */
142
+ listApiKeys(): Promise<{
143
+ keys: ApiKeyRecord[];
144
+ }>;
145
+ /** Create a new API key. The plaintext secret is returned exactly once. */
146
+ createApiKey(payload: {
147
+ name: string;
148
+ permissions: Record<string, string[]>;
149
+ expiresInDays?: number | null;
150
+ }): Promise<{
151
+ key: string;
152
+ record: ApiKeyRecord;
153
+ }>;
154
+ /** Patch a key — name/enabled/permissions/expiry. */
155
+ updateApiKey(id: string, payload: {
156
+ name?: string;
157
+ enabled?: boolean;
158
+ permissions?: Record<string, string[]>;
159
+ expiresInDays?: number | null;
160
+ }): Promise<{
161
+ record: ApiKeyRecord;
162
+ }>;
163
+ /** Permanently revoke (delete) an API key. */
164
+ deleteApiKey(id: string): Promise<{
165
+ success: true;
166
+ }>;
167
+ listWebhooks(): Promise<{
168
+ webhooks: WebhookRecord[];
169
+ }>;
170
+ createWebhook(payload: WebhookInput): Promise<{
171
+ webhook: WebhookRecord;
172
+ }>;
173
+ updateWebhook(id: string, payload: Partial<WebhookInput>): Promise<{
174
+ webhook: WebhookRecord;
175
+ }>;
176
+ deleteWebhook(id: string): Promise<{
177
+ success: true;
178
+ }>;
179
+ listWebhookDeliveries(id: string, limit?: number): Promise<{
180
+ deliveries: WebhookDeliveryRecord[];
181
+ }>;
182
+ testWebhook(id: string): Promise<{
183
+ success: true;
184
+ }>;
185
+ /**
186
+ * Cancel a still-pending upload — deletes the file from storage immediately.
187
+ * Use when the user removes a freshly uploaded file *before* saving the
188
+ * form. Files that have already been confirmed (record saved) cannot be
189
+ * cancelled via this endpoint and the call will reject with 404.
190
+ */
191
+ cancelUpload(resourceId: string, field: string, key: string): Promise<void>;
192
+ /**
193
+ * Send a single image to the resource's `aiFill` action and receive a
194
+ * `values` map the edit form can hydrate from. Uses multipart/form-data
195
+ * because vision models expect raw bytes, not base64-stringified payloads.
196
+ *
197
+ * Supports an optional `signal` for cancellation and the demo-session 401
198
+ * auto-restore logic (matching the behaviour of `request()`). Cannot use
199
+ * `requestOnce` directly because that always sets `Content-Type: application/json`,
200
+ * which would override the browser-generated multipart boundary.
201
+ */
202
+ aiFillFromImage(resourceId: string, file: File, options?: {
203
+ signal?: AbortSignal;
204
+ }): Promise<AiFillResponse>;
205
+ getAiAssistantSettings(): Promise<AiAssistantSettings>;
206
+ updateAiAssistantSettings(payload: {
207
+ enabled: boolean;
208
+ model: string;
209
+ apiKey?: string;
210
+ systemPrompt?: string;
211
+ }): Promise<AiAssistantSettings>;
212
+ sendAiAssistantChat(messages: AiAssistantChatMessage[], requestId?: string, locale?: string, conversationId?: string, clientContext?: AiClientContext): Promise<AiAssistantChatEnqueueResponse>;
213
+ listAiAssistantChats(): Promise<AiAssistantChatHistoryItem[]>;
214
+ getAiAssistantTask(taskId: string): Promise<AiAssistantTask>;
215
+ }
216
+ export type TimeSeriesMetric = 'count' | 'sum' | 'avg' | 'min' | 'max';
217
+ export type TimeSeriesStep = 'day' | 'week' | 'month' | 'year' | 'all';
218
+ export interface TimeSeriesQuery {
219
+ resource: string;
220
+ /** Property path of the date/datetime column used for X-axis bucketing. */
221
+ dateField: string;
222
+ step: TimeSeriesStep;
223
+ metric: TimeSeriesMetric;
224
+ /** Required for non-count metrics. */
225
+ field?: string;
226
+ /** Optional secondary breakdown — produces one series per distinct value. */
227
+ groupBy?: string;
228
+ /** Maximum series count for grouped charts. Default 10. */
229
+ topN?: number;
230
+ /**
231
+ * When set, the server resolves each non-special series key (FK id) to a
232
+ * human-readable title via `findMany` on this resource.
233
+ */
234
+ groupByLabelResource?: string;
235
+ /** ISO datetime, inclusive start. */
236
+ from: string;
237
+ /** ISO datetime, inclusive end. */
238
+ to: string;
239
+ /** List-page-style filters narrowing the dataset. */
240
+ filters?: Record<string, string>;
241
+ /** When true, response includes the equal-length previous window (KPI delta). */
242
+ comparePrevious?: boolean;
243
+ }
244
+ export interface TimeSeriesPoint {
245
+ /** ISO date `YYYY-MM-DD`. */
246
+ date: string;
247
+ value: number;
248
+ }
249
+ export interface TimeSeriesSeries {
250
+ /** Series identifier. `'__total__'` when no `groupBy` is set, `'__other__'` for the topN remainder. */
251
+ key: string;
252
+ points: TimeSeriesPoint[];
253
+ }
254
+ export interface TimeSeriesResponse {
255
+ series: TimeSeriesSeries[];
256
+ /** Populated when the request used `comparePrevious: true`. */
257
+ previous?: TimeSeriesSeries[];
258
+ /** Captured raw SQL — only present for callers whose role is allowed. */
259
+ sql?: string;
260
+ /** `false` when the resource's adapter does not implement aggregateTimeSeries. */
261
+ supported: boolean;
262
+ /** Populated when `groupByLabelResource` was set — maps series key → title. */
263
+ resolvedLabels?: Record<string, string>;
264
+ }
265
+ export type HistoryOp = 'create' | 'update' | 'delete';
266
+ export interface HistoryDiffEntry {
267
+ path: string;
268
+ before?: unknown;
269
+ after?: unknown;
270
+ kind: 'added' | 'changed' | 'removed';
271
+ }
272
+ export interface HistoryRevision {
273
+ id: string;
274
+ resourceId: string;
275
+ recordId: string;
276
+ op: HistoryOp;
277
+ userId?: string;
278
+ snapshot: Record<string, unknown>;
279
+ snapshotBefore?: Record<string, unknown>;
280
+ createdAt: string;
281
+ }
282
+ export interface HistoryListResponse {
283
+ revisions: HistoryRevision[];
284
+ }
285
+ export interface HistoryRevisionResponse {
286
+ revision: HistoryRevision;
287
+ }
288
+ export interface AuditLogEntry {
289
+ /** UUID v7 assigned by the writer; optional for legacy in-memory rows. */
290
+ id?: string;
291
+ resourceId: string;
292
+ action: string;
293
+ recordId?: string;
294
+ recordIds?: string[];
295
+ /** Human-readable title of the affected record, stored at write time. */
296
+ recordTitle?: string;
297
+ userId?: string;
298
+ payload?: Record<string, unknown>;
299
+ result?: Record<string, unknown>;
300
+ at: number;
301
+ }
302
+ export interface AuditLogQuery {
303
+ resourceId?: string;
304
+ recordId?: string;
305
+ userId?: string;
306
+ actions?: string[];
307
+ from?: string;
308
+ to?: string;
309
+ limit?: number;
310
+ offset?: number;
311
+ /** Cursor: fetch only entries with `at` strictly before this unix-ms value. */
312
+ before?: number;
313
+ }
314
+ export interface AuditLogResponse {
315
+ events: AuditLogEntry[];
316
+ }
317
+ /** Wire shape of an API key record exposed by `/admin/api/api-keys/*`. */
318
+ export interface ApiKeyRecord {
319
+ id: string;
320
+ name: string | null;
321
+ start: string | null;
322
+ prefix: string | null;
323
+ enabled: boolean;
324
+ permissions: Record<string, string[]>;
325
+ expiresAt: string | null;
326
+ lastRequest: string | null;
327
+ createdAt: string;
328
+ updatedAt: string;
329
+ }
330
+ export interface WebhookInput {
331
+ name: string;
332
+ url: string;
333
+ events: string[];
334
+ resourceId?: string | null;
335
+ enabled?: boolean;
336
+ secret?: string;
337
+ headers?: Record<string, string>;
338
+ filters?: Record<string, string>;
339
+ payloadFields?: string[];
340
+ }
341
+ export interface WebhookRecord extends Required<Omit<WebhookInput, 'secret'>> {
342
+ id: string;
343
+ secret?: string;
344
+ createdAt: string;
345
+ updatedAt: string;
346
+ }
347
+ export interface WebhookDeliveryRecord {
348
+ id: string;
349
+ webhookId: string;
350
+ event: string;
351
+ payload: Record<string, unknown>;
352
+ status: 'pending' | 'success' | 'failed';
353
+ responseStatus?: number;
354
+ responseBody?: string;
355
+ error?: string;
356
+ attempt: number;
357
+ createdAt: string;
358
+ deliveredAt?: string;
359
+ }
360
+ export interface AiAssistantSettings {
361
+ enabled: boolean;
362
+ configured: boolean;
363
+ provider: 'openrouter';
364
+ model: string;
365
+ maskedApiKey: string | null;
366
+ systemPrompt: string;
367
+ canManage: boolean;
368
+ canChat: boolean;
369
+ readOnly: boolean;
370
+ }
371
+ export interface AiAssistantChatMessage {
372
+ role: 'user' | 'assistant';
373
+ content: string;
374
+ }
375
+ /**
376
+ * Snapshot of the admin frontend at the moment the user sent the message,
377
+ * passed alongside the chat payload so the assistant can ground itself.
378
+ */
379
+ export interface AiClientContext {
380
+ /** Current window pathname, e.g. "/" or "/resources/posts/abc". */
381
+ pathname?: string;
382
+ }
383
+ /** Allowed navigation targets — mirrors the safe subset of `Route`. */
384
+ export type AiNavigateRoute = {
385
+ name: 'home';
386
+ } | {
387
+ name: 'audit-log';
388
+ } | {
389
+ name: 'list';
390
+ resourceId: string;
391
+ } | {
392
+ name: 'show';
393
+ resourceId: string;
394
+ recordId: string;
395
+ } | {
396
+ name: 'settings';
397
+ section?: string;
398
+ };
399
+ /** Side-effect emitted by the assistant for the frontend to execute. */
400
+ export type AiUiAction = {
401
+ kind: 'navigate';
402
+ route: AiNavigateRoute;
403
+ } | {
404
+ kind: 'refresh';
405
+ target: 'dashboard';
406
+ };
407
+ export interface AiAssistantCitation {
408
+ resourceId: string;
409
+ recordId?: string;
410
+ label: string;
411
+ }
412
+ export interface AiAssistantChatResponse {
413
+ message: {
414
+ role: 'assistant';
415
+ content: string;
416
+ };
417
+ citations: AiAssistantCitation[];
418
+ toolCalls: Array<{
419
+ toolName: string;
420
+ state: string;
421
+ }>;
422
+ taskId?: string;
423
+ }
424
+ export interface AiAssistantChatEnqueueResponse {
425
+ taskId: string;
426
+ status: 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled';
427
+ }
428
+ export interface AiAssistantChatHistoryItem {
429
+ conversationId: string;
430
+ taskId: string;
431
+ title: string;
432
+ status: 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled';
433
+ updatedAt: string;
434
+ }
435
+ export interface AiAssistantTask {
436
+ id: string;
437
+ kind: string;
438
+ resourceId?: string;
439
+ recordId?: string;
440
+ userId?: string;
441
+ status: 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled';
442
+ input: Record<string, unknown>;
443
+ output?: {
444
+ text?: string;
445
+ citations?: AiAssistantCitation[];
446
+ toolCalls?: Array<{
447
+ toolName: string;
448
+ }>;
449
+ uiActions?: AiUiAction[];
450
+ [key: string]: unknown;
451
+ };
452
+ error?: string;
453
+ progress: number | null;
454
+ createdAt: string;
455
+ updatedAt: string;
456
+ startedAt?: string;
457
+ finishedAt?: string;
458
+ }
459
+ export interface AiFillResponse {
460
+ /** Map of property path → extracted value. Only fields the model could
461
+ * confidently extract are present; the form merges them into existing
462
+ * values without clobbering unrelated columns. */
463
+ values: Record<string, unknown>;
464
+ }
465
+ /** Metadata returned by `POST /upload` for one file. */
466
+ export interface UploadedFileInfo {
467
+ key: string;
468
+ url: string;
469
+ name: string;
470
+ size: number;
471
+ mimeType: string;
472
+ }
473
+ /** Bytes-loaded snapshot emitted by `XMLHttpRequest.upload.onprogress`. */
474
+ export interface UploadProgress {
475
+ loaded: number;
476
+ total: number;
477
+ /** 0–100, rounded. */
478
+ percent: number;
479
+ }
480
+ export interface UploadFileOptions {
481
+ onProgress?: (p: UploadProgress) => void;
482
+ signal?: AbortSignal;
483
+ }
484
+ export interface UploadFilesOptions {
485
+ /** Maximum concurrent in-flight requests. Default 3. */
486
+ concurrency?: number;
487
+ signal?: AbortSignal;
488
+ onItemStart?: (index: number, file: File) => void;
489
+ onItemProgress?: (index: number, file: File, p: UploadProgress) => void;
490
+ onItemComplete?: (index: number, file: File, info: UploadedFileInfo) => void;
491
+ onItemError?: (index: number, file: File, error: Error) => void;
492
+ }
493
+ export interface GlobalSearchHit {
494
+ resourceId: string;
495
+ resourceName: string;
496
+ recordId: string;
497
+ title: string;
498
+ /** Property path whose value matched the query (omitted when matched on title or id). */
499
+ matchedField?: string;
500
+ /** ~80-char excerpt with the matched substring near its center. */
501
+ snippet?: string;
502
+ /** Relevance ranking — higher is better. Mirrors the server-side rubric. */
503
+ score?: number;
504
+ }
505
+ export interface GlobalSearchGroup {
506
+ resourceId: string;
507
+ resourceName: string;
508
+ records: GlobalSearchHit[];
509
+ }
510
+ export interface GlobalSearchResponse {
511
+ query: string;
512
+ groups: GlobalSearchGroup[];
513
+ total: number;
514
+ }
515
+ export declare class AdminApiError extends Error {
516
+ readonly status: number;
517
+ constructor(status: number, message: string);
518
+ }
519
+ /** Extract a human-readable message from any error thrown by AdminClient.
520
+ * The raw message is the HTTP response body text (often JSON). We try to
521
+ * parse the `.message` field from the JSON payload before falling back. */
522
+ export declare function parseApiError(err: unknown): {
523
+ status?: number;
524
+ message: string;
525
+ };
526
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}