@tekki-forge/runtime-api 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 (74) hide show
  1. package/README.md +5 -0
  2. package/dist/access.d.ts +15 -0
  3. package/dist/access.js +51 -0
  4. package/dist/access.js.map +1 -0
  5. package/dist/api-keys.d.ts +140 -0
  6. package/dist/api-keys.js +361 -0
  7. package/dist/api-keys.js.map +1 -0
  8. package/dist/backup.d.ts +142 -0
  9. package/dist/backup.js +280 -0
  10. package/dist/backup.js.map +1 -0
  11. package/dist/bootstrap.d.ts +57 -0
  12. package/dist/bootstrap.js +191 -0
  13. package/dist/bootstrap.js.map +1 -0
  14. package/dist/comments.d.ts +139 -0
  15. package/dist/comments.js +370 -0
  16. package/dist/comments.js.map +1 -0
  17. package/dist/computed.d.ts +27 -0
  18. package/dist/computed.js +174 -0
  19. package/dist/computed.js.map +1 -0
  20. package/dist/controllers.d.ts +309 -0
  21. package/dist/controllers.js +634 -0
  22. package/dist/controllers.js.map +1 -0
  23. package/dist/dashboard.d.ts +58 -0
  24. package/dist/dashboard.js +258 -0
  25. package/dist/dashboard.js.map +1 -0
  26. package/dist/errors.d.ts +6 -0
  27. package/dist/errors.js +55 -0
  28. package/dist/errors.js.map +1 -0
  29. package/dist/events.d.ts +39 -0
  30. package/dist/events.js +36 -0
  31. package/dist/events.js.map +1 -0
  32. package/dist/extension.d.ts +103 -0
  33. package/dist/extension.js +8 -0
  34. package/dist/extension.js.map +1 -0
  35. package/dist/import.d.ts +69 -0
  36. package/dist/import.js +347 -0
  37. package/dist/import.js.map +1 -0
  38. package/dist/index.d.ts +22 -0
  39. package/dist/index.js +23 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/jobs.d.ts +41 -0
  42. package/dist/jobs.js +10 -0
  43. package/dist/jobs.js.map +1 -0
  44. package/dist/notifications.d.ts +61 -0
  45. package/dist/notifications.js +195 -0
  46. package/dist/notifications.js.map +1 -0
  47. package/dist/plugin.d.ts +43 -0
  48. package/dist/plugin.js +4 -0
  49. package/dist/plugin.js.map +1 -0
  50. package/dist/query.d.ts +29 -0
  51. package/dist/query.js +192 -0
  52. package/dist/query.js.map +1 -0
  53. package/dist/saved-views.d.ts +42 -0
  54. package/dist/saved-views.js +130 -0
  55. package/dist/saved-views.js.map +1 -0
  56. package/dist/search.d.ts +17 -0
  57. package/dist/search.js +42 -0
  58. package/dist/search.js.map +1 -0
  59. package/dist/seed.d.ts +12 -0
  60. package/dist/seed.js +132 -0
  61. package/dist/seed.js.map +1 -0
  62. package/dist/serialize.d.ts +37 -0
  63. package/dist/serialize.js +165 -0
  64. package/dist/serialize.js.map +1 -0
  65. package/dist/service.d.ts +168 -0
  66. package/dist/service.js +757 -0
  67. package/dist/service.js.map +1 -0
  68. package/dist/teams.d.ts +63 -0
  69. package/dist/teams.js +131 -0
  70. package/dist/teams.js.map +1 -0
  71. package/dist/testing.d.ts +63 -0
  72. package/dist/testing.js +420 -0
  73. package/dist/testing.js.map +1 -0
  74. package/package.json +61 -0
@@ -0,0 +1,309 @@
1
+ import type { Request, Response } from "express";
2
+ import type { ForgeRequestContext } from "./extension.js";
3
+ import { ForgeService } from "./service.js";
4
+ export declare const FORGE_SERVICE = "FORGE_SERVICE";
5
+ type ForgeRequest = Request & {
6
+ forgeContext?: Promise<ForgeRequestContext>;
7
+ };
8
+ /**
9
+ * Resolve (once per request) the caller's session, roles and organization. Use it in plugin controllers.
10
+ * API keys only work on resource endpoints: plugin routes refuse them.
11
+ */
12
+ export declare function requestContext(service: ForgeService, req: ForgeRequest): Promise<ForgeRequestContext>;
13
+ /** Framework endpoints that are not tied to a single resource. Registered before resources. */
14
+ export declare class SystemController {
15
+ private readonly forge;
16
+ constructor(forge: ForgeService);
17
+ health(): {
18
+ status: string;
19
+ };
20
+ /** Public client configuration (e.g. which social sign-in buttons to show). */
21
+ config(): {
22
+ socialProviders: string[];
23
+ };
24
+ me(req: ForgeRequest): Promise<{
25
+ apiKey?: {
26
+ id: string;
27
+ name: string;
28
+ scopes: string[];
29
+ } | undefined;
30
+ user: {
31
+ id: string;
32
+ name: string;
33
+ email: string;
34
+ role?: string | null;
35
+ } | null;
36
+ roles: string[];
37
+ organizationId: string | null;
38
+ impersonating: boolean;
39
+ teamIds: string[];
40
+ }>;
41
+ stats(req: ForgeRequest): Promise<{
42
+ data: {
43
+ entity: string;
44
+ path: string;
45
+ label: string;
46
+ count: number;
47
+ }[];
48
+ }>;
49
+ /** Widgets declared in `dashboard`, computed within the caller's permissions. `widgets: null` = default dashboard. */
50
+ dashboard(req: ForgeRequest): Promise<{
51
+ widgets: null;
52
+ } | {
53
+ widgets: {
54
+ [x: string]: any;
55
+ }[];
56
+ }>;
57
+ /** ⌘K search across every readable entity. */
58
+ search(req: ForgeRequest, query: Record<string, unknown>): Promise<{
59
+ data: import("./search.js").SearchGroup[];
60
+ }>;
61
+ savedViews(req: ForgeRequest, resource: string): Promise<{
62
+ data: any;
63
+ }>;
64
+ createSavedView(req: ForgeRequest, body: Record<string, unknown>): Promise<{
65
+ id: any;
66
+ resource: any;
67
+ name: any;
68
+ query: any;
69
+ shared: any;
70
+ mine: boolean;
71
+ createdAt: any;
72
+ }>;
73
+ updateSavedView(req: ForgeRequest, id: string, body: Record<string, unknown>): Promise<{
74
+ id: any;
75
+ resource: any;
76
+ name: any;
77
+ query: any;
78
+ shared: any;
79
+ mine: boolean;
80
+ createdAt: any;
81
+ }>;
82
+ deleteSavedView(req: ForgeRequest, id: string): Promise<void>;
83
+ users(req: ForgeRequest, query: Record<string, unknown>): Promise<{
84
+ data: any;
85
+ }>;
86
+ teams(req: ForgeRequest): Promise<{
87
+ data: {
88
+ id: any;
89
+ name: any;
90
+ description: any;
91
+ members: any;
92
+ createdAt: any;
93
+ }[];
94
+ }>;
95
+ teamLookup(req: ForgeRequest, query: Record<string, unknown>): Promise<{
96
+ data: {
97
+ id: any;
98
+ label: any;
99
+ }[];
100
+ }>;
101
+ createTeam(req: ForgeRequest, body: Record<string, unknown>): Promise<{
102
+ id: any;
103
+ name: any;
104
+ description: any;
105
+ members: number;
106
+ createdAt: any;
107
+ }>;
108
+ updateTeam(req: ForgeRequest, id: string, body: Record<string, unknown>): Promise<{
109
+ id: any;
110
+ name: any;
111
+ description: any;
112
+ }>;
113
+ deleteTeam(req: ForgeRequest, id: string): Promise<void>;
114
+ teamMembers(req: ForgeRequest, id: string): Promise<{
115
+ data: {
116
+ id: any;
117
+ userId: any;
118
+ name: any;
119
+ email: any;
120
+ addedAt: any;
121
+ }[];
122
+ }>;
123
+ addTeamMember(req: ForgeRequest, id: string, body: Record<string, unknown>): Promise<{
124
+ id: any;
125
+ userId: string;
126
+ teamId: string;
127
+ }>;
128
+ removeTeamMember(req: ForgeRequest, id: string, userId: string): Promise<void>;
129
+ apiKeys(req: ForgeRequest): Promise<{
130
+ data: {
131
+ id: any;
132
+ name: any;
133
+ prefix: any;
134
+ scopes: any;
135
+ role: any;
136
+ expiresAt: any;
137
+ lastUsedAt: any;
138
+ revokedAt: any;
139
+ createdAt: any;
140
+ createdBy: {
141
+ id: any;
142
+ name: any;
143
+ email: any;
144
+ } | null;
145
+ status: string;
146
+ }[];
147
+ }>;
148
+ /** The plain key is only in this response. */
149
+ createApiKey(req: ForgeRequest, body: Record<string, unknown>): Promise<{
150
+ key: string;
151
+ apiKey: ReturnType<typeof import("./api-keys.js").presentApiKey>;
152
+ }>;
153
+ /** Revokes the key (kept for the audit log). */
154
+ revokeApiKey(req: ForgeRequest, id: string): Promise<{
155
+ id: any;
156
+ name: any;
157
+ prefix: any;
158
+ scopes: any;
159
+ role: any;
160
+ expiresAt: any;
161
+ lastUsedAt: any;
162
+ revokedAt: any;
163
+ createdAt: any;
164
+ createdBy: {
165
+ id: any;
166
+ name: any;
167
+ email: any;
168
+ } | null;
169
+ status: string;
170
+ }>;
171
+ notifications(req: ForgeRequest, query: Record<string, unknown>): Promise<{
172
+ data: any;
173
+ unread: any;
174
+ meta: {
175
+ page: number;
176
+ pageSize: number;
177
+ total: any;
178
+ pages: number;
179
+ };
180
+ }>;
181
+ markRead(req: ForgeRequest, body: Record<string, unknown>): Promise<{
182
+ updated: any;
183
+ }>;
184
+ /** Server-sent events: live notifications for the signed-in user. */
185
+ stream(req: ForgeRequest, res: Response): Promise<void>;
186
+ auditLogs(req: ForgeRequest, query: Record<string, unknown>): Promise<{
187
+ data: any;
188
+ meta: {
189
+ page: number;
190
+ pageSize: number;
191
+ total: any;
192
+ pages: number;
193
+ };
194
+ }>;
195
+ }
196
+ /** One generic controller serves every entity; the `:resource` segment selects its IR. */
197
+ export declare class ResourceController {
198
+ private readonly forge;
199
+ constructor(forge: ForgeService);
200
+ list(resource: string, query: Record<string, unknown>, req: ForgeRequest): Promise<{
201
+ data: any[];
202
+ meta: {
203
+ page: number;
204
+ pageSize: number;
205
+ total: any;
206
+ pages: number;
207
+ };
208
+ }>;
209
+ create(resource: string, body: unknown, req: ForgeRequest): Promise<{
210
+ [x: string]: any;
211
+ }>;
212
+ lookup(resource: string, query: Record<string, unknown>, req: ForgeRequest): Promise<{
213
+ data: any;
214
+ }>;
215
+ export(resource: string, query: Record<string, unknown>, req: ForgeRequest, res: Response): Promise<string>;
216
+ /** CSV import (rows already mapped to field names by the client; at most 1000 per request). */
217
+ import(resource: string, body: unknown, req: ForgeRequest): Promise<{
218
+ dryRun: boolean;
219
+ summary: {
220
+ create: number;
221
+ update: number;
222
+ errors: number;
223
+ skipped: number;
224
+ created?: undefined;
225
+ updated?: undefined;
226
+ } | {
227
+ created: number;
228
+ updated: number;
229
+ errors: number;
230
+ skipped: number;
231
+ create?: undefined;
232
+ update?: undefined;
233
+ };
234
+ rows: import("./import.js").ImportRowResult[];
235
+ }>;
236
+ bulkDelete(resource: string, body: unknown, req: ForgeRequest): Promise<{
237
+ deleted: number;
238
+ }>;
239
+ get(resource: string, id: string, query: Record<string, unknown>, req: ForgeRequest): Promise<{
240
+ [x: string]: any;
241
+ }>;
242
+ update(resource: string, id: string, body: unknown, req: ForgeRequest): Promise<{
243
+ [x: string]: any;
244
+ }>;
245
+ remove(resource: string, id: string, req: ForgeRequest): Promise<void>;
246
+ restore(resource: string, id: string, req: ForgeRequest): Promise<{
247
+ [x: string]: any;
248
+ }>;
249
+ transition(resource: string, id: string, transition: string, body: unknown, req: ForgeRequest): Promise<{
250
+ [x: string]: any;
251
+ }>;
252
+ action(resource: string, id: string, action: string, body: unknown, req: ForgeRequest): Promise<{
253
+ ok: boolean;
254
+ result: {} | null;
255
+ }>;
256
+ /** Comments on a record (entities with `features: { comments: true }`). */
257
+ comments(resource: string, id: string, query: Record<string, unknown>, req: ForgeRequest): Promise<{
258
+ data: any;
259
+ meta: {
260
+ page: number;
261
+ pageSize: number;
262
+ total: any;
263
+ pages: number;
264
+ };
265
+ }>;
266
+ createComment(resource: string, id: string, body: unknown, req: ForgeRequest): Promise<{
267
+ id: any;
268
+ body: any;
269
+ mentions: any;
270
+ author: {
271
+ id: any;
272
+ name: any;
273
+ image: any;
274
+ } | null;
275
+ createdAt: any;
276
+ editedAt: any;
277
+ canEdit: boolean;
278
+ canDelete: boolean;
279
+ }>;
280
+ /** People the caller can @mention on this record (`?search=`). */
281
+ mentionable(resource: string, id: string, query: Record<string, unknown>, req: ForgeRequest): Promise<{
282
+ data: {
283
+ id: any;
284
+ name: any;
285
+ image: any;
286
+ }[];
287
+ }>;
288
+ updateComment(resource: string, id: string, commentId: string, body: unknown, req: ForgeRequest): Promise<{
289
+ id: any;
290
+ body: any;
291
+ mentions: any;
292
+ author: {
293
+ id: any;
294
+ name: any;
295
+ image: any;
296
+ } | null;
297
+ createdAt: any;
298
+ editedAt: any;
299
+ canEdit: boolean;
300
+ canDelete: boolean;
301
+ }>;
302
+ deleteComment(resource: string, id: string, commentId: string, req: ForgeRequest): Promise<void>;
303
+ /** Audit history and comments of a record, newest first (`?before=<nextCursor>&limit=`). */
304
+ timeline(resource: string, id: string, query: Record<string, unknown>, req: ForgeRequest): Promise<{
305
+ data: import("./comments.js").TimelineEvent[];
306
+ nextCursor: string | null;
307
+ }>;
308
+ }
309
+ export {};