@rebasepro/server-core 0.0.1-canary.09e5ec5

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 (300) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +40 -0
  3. package/build-errors.txt +52 -0
  4. package/coverage/clover.xml +3739 -0
  5. package/coverage/coverage-final.json +31 -0
  6. package/coverage/lcov-report/base.css +224 -0
  7. package/coverage/lcov-report/block-navigation.js +87 -0
  8. package/coverage/lcov-report/favicon.png +0 -0
  9. package/coverage/lcov-report/index.html +266 -0
  10. package/coverage/lcov-report/prettify.css +1 -0
  11. package/coverage/lcov-report/prettify.js +2 -0
  12. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  13. package/coverage/lcov-report/sorter.js +210 -0
  14. package/coverage/lcov-report/src/api/ast-schema-editor.ts.html +952 -0
  15. package/coverage/lcov-report/src/api/errors.ts.html +472 -0
  16. package/coverage/lcov-report/src/api/graphql/graphql-schema-generator.ts.html +1069 -0
  17. package/coverage/lcov-report/src/api/graphql/index.html +116 -0
  18. package/coverage/lcov-report/src/api/index.html +176 -0
  19. package/coverage/lcov-report/src/api/openapi-generator.ts.html +565 -0
  20. package/coverage/lcov-report/src/api/rest/api-generator.ts.html +994 -0
  21. package/coverage/lcov-report/src/api/rest/index.html +131 -0
  22. package/coverage/lcov-report/src/api/rest/query-parser.ts.html +550 -0
  23. package/coverage/lcov-report/src/api/schema-editor-routes.ts.html +202 -0
  24. package/coverage/lcov-report/src/api/server.ts.html +823 -0
  25. package/coverage/lcov-report/src/auth/admin-routes.ts.html +973 -0
  26. package/coverage/lcov-report/src/auth/index.html +176 -0
  27. package/coverage/lcov-report/src/auth/jwt.ts.html +574 -0
  28. package/coverage/lcov-report/src/auth/middleware.ts.html +745 -0
  29. package/coverage/lcov-report/src/auth/password.ts.html +310 -0
  30. package/coverage/lcov-report/src/auth/services.ts.html +2074 -0
  31. package/coverage/lcov-report/src/collections/index.html +116 -0
  32. package/coverage/lcov-report/src/collections/loader.ts.html +232 -0
  33. package/coverage/lcov-report/src/db/auth-schema.ts.html +523 -0
  34. package/coverage/lcov-report/src/db/data-transformer.ts.html +1753 -0
  35. package/coverage/lcov-report/src/db/entityService.ts.html +700 -0
  36. package/coverage/lcov-report/src/db/index.html +146 -0
  37. package/coverage/lcov-report/src/db/services/EntityFetchService.ts.html +4048 -0
  38. package/coverage/lcov-report/src/db/services/EntityPersistService.ts.html +883 -0
  39. package/coverage/lcov-report/src/db/services/RelationService.ts.html +3121 -0
  40. package/coverage/lcov-report/src/db/services/entity-helpers.ts.html +442 -0
  41. package/coverage/lcov-report/src/db/services/index.html +176 -0
  42. package/coverage/lcov-report/src/db/services/index.ts.html +124 -0
  43. package/coverage/lcov-report/src/generate-drizzle-schema-logic.ts.html +1960 -0
  44. package/coverage/lcov-report/src/index.html +116 -0
  45. package/coverage/lcov-report/src/services/driver-registry.ts.html +631 -0
  46. package/coverage/lcov-report/src/services/index.html +131 -0
  47. package/coverage/lcov-report/src/services/postgresDataDriver.ts.html +3025 -0
  48. package/coverage/lcov-report/src/storage/LocalStorageController.ts.html +1189 -0
  49. package/coverage/lcov-report/src/storage/S3StorageController.ts.html +970 -0
  50. package/coverage/lcov-report/src/storage/index.html +161 -0
  51. package/coverage/lcov-report/src/storage/storage-registry.ts.html +646 -0
  52. package/coverage/lcov-report/src/storage/types.ts.html +451 -0
  53. package/coverage/lcov-report/src/utils/drizzle-conditions.ts.html +3082 -0
  54. package/coverage/lcov-report/src/utils/index.html +116 -0
  55. package/coverage/lcov.info +7179 -0
  56. package/dist/common/src/collections/CollectionRegistry.d.ts +56 -0
  57. package/dist/common/src/collections/index.d.ts +1 -0
  58. package/dist/common/src/data/buildRebaseData.d.ts +14 -0
  59. package/dist/common/src/index.d.ts +3 -0
  60. package/dist/common/src/util/builders.d.ts +57 -0
  61. package/dist/common/src/util/callbacks.d.ts +6 -0
  62. package/dist/common/src/util/collections.d.ts +11 -0
  63. package/dist/common/src/util/common.d.ts +2 -0
  64. package/dist/common/src/util/conditions.d.ts +26 -0
  65. package/dist/common/src/util/entities.d.ts +58 -0
  66. package/dist/common/src/util/enums.d.ts +3 -0
  67. package/dist/common/src/util/index.d.ts +16 -0
  68. package/dist/common/src/util/navigation_from_path.d.ts +34 -0
  69. package/dist/common/src/util/navigation_utils.d.ts +20 -0
  70. package/dist/common/src/util/parent_references_from_path.d.ts +6 -0
  71. package/dist/common/src/util/paths.d.ts +14 -0
  72. package/dist/common/src/util/permissions.d.ts +5 -0
  73. package/dist/common/src/util/references.d.ts +2 -0
  74. package/dist/common/src/util/relations.d.ts +22 -0
  75. package/dist/common/src/util/resolutions.d.ts +72 -0
  76. package/dist/common/src/util/storage.d.ts +24 -0
  77. package/dist/index-DXVBFp5V.js +37 -0
  78. package/dist/index-DXVBFp5V.js.map +1 -0
  79. package/dist/index.es.js +49934 -0
  80. package/dist/index.es.js.map +1 -0
  81. package/dist/index.umd.js +49968 -0
  82. package/dist/index.umd.js.map +1 -0
  83. package/dist/server-core/src/api/ast-schema-editor.d.ts +21 -0
  84. package/dist/server-core/src/api/collections_for_test/callbacks_test_collection.d.ts +2 -0
  85. package/dist/server-core/src/api/errors.d.ts +35 -0
  86. package/dist/server-core/src/api/graphql/graphql-schema-generator.d.ts +35 -0
  87. package/dist/server-core/src/api/graphql/index.d.ts +1 -0
  88. package/dist/server-core/src/api/index.d.ts +9 -0
  89. package/dist/server-core/src/api/openapi-generator.d.ts +16 -0
  90. package/dist/server-core/src/api/rest/api-generator.d.ts +64 -0
  91. package/dist/server-core/src/api/rest/index.d.ts +1 -0
  92. package/dist/server-core/src/api/rest/query-parser.d.ts +9 -0
  93. package/dist/server-core/src/api/schema-editor-routes.d.ts +3 -0
  94. package/dist/server-core/src/api/server.d.ts +40 -0
  95. package/dist/server-core/src/api/types.d.ts +90 -0
  96. package/dist/server-core/src/auth/admin-routes.d.ts +16 -0
  97. package/dist/server-core/src/auth/apple-oauth.d.ts +30 -0
  98. package/dist/server-core/src/auth/bitbucket-oauth.d.ts +11 -0
  99. package/dist/server-core/src/auth/discord-oauth.d.ts +14 -0
  100. package/dist/server-core/src/auth/facebook-oauth.d.ts +14 -0
  101. package/dist/server-core/src/auth/github-oauth.d.ts +15 -0
  102. package/dist/server-core/src/auth/gitlab-oauth.d.ts +13 -0
  103. package/dist/server-core/src/auth/google-oauth.d.ts +14 -0
  104. package/dist/server-core/src/auth/index.d.ts +23 -0
  105. package/dist/server-core/src/auth/interfaces.d.ts +309 -0
  106. package/dist/server-core/src/auth/jwt.d.ts +43 -0
  107. package/dist/server-core/src/auth/linkedin-oauth.d.ts +18 -0
  108. package/dist/server-core/src/auth/microsoft-oauth.d.ts +16 -0
  109. package/dist/server-core/src/auth/middleware.d.ts +81 -0
  110. package/dist/server-core/src/auth/password.d.ts +22 -0
  111. package/dist/server-core/src/auth/rate-limiter.d.ts +31 -0
  112. package/dist/server-core/src/auth/routes.d.ts +27 -0
  113. package/dist/server-core/src/auth/slack-oauth.d.ts +12 -0
  114. package/dist/server-core/src/auth/spotify-oauth.d.ts +12 -0
  115. package/dist/server-core/src/auth/twitter-oauth.d.ts +18 -0
  116. package/dist/server-core/src/bootstrappers/index.d.ts +0 -0
  117. package/dist/server-core/src/collections/BackendCollectionRegistry.d.ts +13 -0
  118. package/dist/server-core/src/collections/loader.d.ts +5 -0
  119. package/dist/server-core/src/cron/cron-loader.d.ts +17 -0
  120. package/dist/server-core/src/cron/cron-routes.d.ts +14 -0
  121. package/dist/server-core/src/cron/cron-scheduler.d.ts +61 -0
  122. package/dist/server-core/src/cron/cron-store.d.ts +32 -0
  123. package/dist/server-core/src/cron/index.d.ts +6 -0
  124. package/dist/server-core/src/db/interfaces.d.ts +18 -0
  125. package/dist/server-core/src/email/index.d.ts +6 -0
  126. package/dist/server-core/src/email/smtp-email-service.d.ts +25 -0
  127. package/dist/server-core/src/email/templates.d.ts +42 -0
  128. package/dist/server-core/src/email/types.d.ts +107 -0
  129. package/dist/server-core/src/functions/function-loader.d.ts +17 -0
  130. package/dist/server-core/src/functions/function-routes.d.ts +10 -0
  131. package/dist/server-core/src/functions/index.d.ts +3 -0
  132. package/dist/server-core/src/history/history-routes.d.ts +23 -0
  133. package/dist/server-core/src/history/index.d.ts +1 -0
  134. package/dist/server-core/src/index.d.ts +29 -0
  135. package/dist/server-core/src/init.d.ts +159 -0
  136. package/dist/server-core/src/serve-spa.d.ts +30 -0
  137. package/dist/server-core/src/services/driver-registry.d.ts +78 -0
  138. package/dist/server-core/src/singleton.d.ts +35 -0
  139. package/dist/server-core/src/storage/LocalStorageController.d.ts +46 -0
  140. package/dist/server-core/src/storage/S3StorageController.d.ts +36 -0
  141. package/dist/server-core/src/storage/index.d.ts +25 -0
  142. package/dist/server-core/src/storage/routes.d.ts +38 -0
  143. package/dist/server-core/src/storage/storage-registry.d.ts +78 -0
  144. package/dist/server-core/src/storage/types.d.ts +103 -0
  145. package/dist/server-core/src/types/index.d.ts +11 -0
  146. package/dist/server-core/src/utils/dev-port.d.ts +35 -0
  147. package/dist/server-core/src/utils/logger.d.ts +31 -0
  148. package/dist/server-core/src/utils/logging.d.ts +9 -0
  149. package/dist/server-core/src/utils/request-logger.d.ts +19 -0
  150. package/dist/server-core/src/utils/sql.d.ts +27 -0
  151. package/dist/types/src/controllers/analytics_controller.d.ts +7 -0
  152. package/dist/types/src/controllers/auth.d.ts +119 -0
  153. package/dist/types/src/controllers/client.d.ts +170 -0
  154. package/dist/types/src/controllers/collection_registry.d.ts +45 -0
  155. package/dist/types/src/controllers/customization_controller.d.ts +60 -0
  156. package/dist/types/src/controllers/data.d.ts +168 -0
  157. package/dist/types/src/controllers/data_driver.d.ts +160 -0
  158. package/dist/types/src/controllers/database_admin.d.ts +11 -0
  159. package/dist/types/src/controllers/dialogs_controller.d.ts +36 -0
  160. package/dist/types/src/controllers/effective_role.d.ts +4 -0
  161. package/dist/types/src/controllers/email.d.ts +34 -0
  162. package/dist/types/src/controllers/index.d.ts +18 -0
  163. package/dist/types/src/controllers/local_config_persistence.d.ts +20 -0
  164. package/dist/types/src/controllers/navigation.d.ts +213 -0
  165. package/dist/types/src/controllers/registry.d.ts +54 -0
  166. package/dist/types/src/controllers/side_dialogs_controller.d.ts +67 -0
  167. package/dist/types/src/controllers/side_entity_controller.d.ts +90 -0
  168. package/dist/types/src/controllers/snackbar.d.ts +24 -0
  169. package/dist/types/src/controllers/storage.d.ts +171 -0
  170. package/dist/types/src/index.d.ts +4 -0
  171. package/dist/types/src/rebase_context.d.ts +105 -0
  172. package/dist/types/src/types/backend.d.ts +536 -0
  173. package/dist/types/src/types/builders.d.ts +15 -0
  174. package/dist/types/src/types/chips.d.ts +5 -0
  175. package/dist/types/src/types/collections.d.ts +856 -0
  176. package/dist/types/src/types/cron.d.ts +102 -0
  177. package/dist/types/src/types/data_source.d.ts +64 -0
  178. package/dist/types/src/types/entities.d.ts +145 -0
  179. package/dist/types/src/types/entity_actions.d.ts +98 -0
  180. package/dist/types/src/types/entity_callbacks.d.ts +173 -0
  181. package/dist/types/src/types/entity_link_builder.d.ts +7 -0
  182. package/dist/types/src/types/entity_overrides.d.ts +10 -0
  183. package/dist/types/src/types/entity_views.d.ts +61 -0
  184. package/dist/types/src/types/export_import.d.ts +21 -0
  185. package/dist/types/src/types/index.d.ts +23 -0
  186. package/dist/types/src/types/locales.d.ts +4 -0
  187. package/dist/types/src/types/modify_collections.d.ts +5 -0
  188. package/dist/types/src/types/plugins.d.ts +279 -0
  189. package/dist/types/src/types/properties.d.ts +1176 -0
  190. package/dist/types/src/types/property_config.d.ts +70 -0
  191. package/dist/types/src/types/relations.d.ts +336 -0
  192. package/dist/types/src/types/slots.d.ts +252 -0
  193. package/dist/types/src/types/translations.d.ts +870 -0
  194. package/dist/types/src/types/user_management_delegate.d.ts +121 -0
  195. package/dist/types/src/types/websockets.d.ts +78 -0
  196. package/dist/types/src/users/index.d.ts +2 -0
  197. package/dist/types/src/users/roles.d.ts +22 -0
  198. package/dist/types/src/users/user.d.ts +46 -0
  199. package/history_diff.log +385 -0
  200. package/jest.config.cjs +16 -0
  201. package/package.json +86 -0
  202. package/scratch.ts +9 -0
  203. package/src/api/ast-schema-editor.ts +289 -0
  204. package/src/api/collections_for_test/callbacks_test_collection.ts +60 -0
  205. package/src/api/errors.ts +179 -0
  206. package/src/api/graphql/graphql-schema-generator.ts +336 -0
  207. package/src/api/graphql/index.ts +2 -0
  208. package/src/api/index.ts +11 -0
  209. package/src/api/openapi-generator.ts +715 -0
  210. package/src/api/rest/api-generator.ts +472 -0
  211. package/src/api/rest/index.ts +2 -0
  212. package/src/api/rest/query-parser.ts +155 -0
  213. package/src/api/schema-editor-routes.ts +41 -0
  214. package/src/api/server.ts +248 -0
  215. package/src/api/types.ts +90 -0
  216. package/src/auth/admin-routes.ts +529 -0
  217. package/src/auth/apple-oauth.ts +130 -0
  218. package/src/auth/bitbucket-oauth.ts +82 -0
  219. package/src/auth/discord-oauth.ts +83 -0
  220. package/src/auth/facebook-oauth.ts +72 -0
  221. package/src/auth/github-oauth.ts +110 -0
  222. package/src/auth/gitlab-oauth.ts +70 -0
  223. package/src/auth/google-oauth.ts +48 -0
  224. package/src/auth/index.ts +34 -0
  225. package/src/auth/interfaces.ts +363 -0
  226. package/src/auth/jwt.ts +181 -0
  227. package/src/auth/linkedin-oauth.ts +81 -0
  228. package/src/auth/microsoft-oauth.ts +88 -0
  229. package/src/auth/middleware.ts +384 -0
  230. package/src/auth/password.ts +77 -0
  231. package/src/auth/rate-limiter.ts +129 -0
  232. package/src/auth/routes.ts +788 -0
  233. package/src/auth/slack-oauth.ts +71 -0
  234. package/src/auth/spotify-oauth.ts +67 -0
  235. package/src/auth/twitter-oauth.ts +120 -0
  236. package/src/bootstrappers/index.ts +1 -0
  237. package/src/collections/BackendCollectionRegistry.ts +20 -0
  238. package/src/collections/loader.ts +49 -0
  239. package/src/cron/cron-loader.ts +89 -0
  240. package/src/cron/cron-routes.test.ts +265 -0
  241. package/src/cron/cron-routes.ts +85 -0
  242. package/src/cron/cron-scheduler.test.ts +421 -0
  243. package/src/cron/cron-scheduler.ts +413 -0
  244. package/src/cron/cron-store.ts +163 -0
  245. package/src/cron/index.ts +6 -0
  246. package/src/db/interfaces.ts +60 -0
  247. package/src/email/index.ts +18 -0
  248. package/src/email/smtp-email-service.ts +91 -0
  249. package/src/email/templates.ts +388 -0
  250. package/src/email/types.ts +105 -0
  251. package/src/functions/function-loader.ts +119 -0
  252. package/src/functions/function-routes.ts +31 -0
  253. package/src/functions/index.ts +3 -0
  254. package/src/history/history-routes.ts +129 -0
  255. package/src/history/index.ts +2 -0
  256. package/src/index.ts +66 -0
  257. package/src/init.ts +727 -0
  258. package/src/serve-spa.ts +81 -0
  259. package/src/services/driver-registry.ts +182 -0
  260. package/src/singleton.test.ts +28 -0
  261. package/src/singleton.ts +70 -0
  262. package/src/storage/LocalStorageController.ts +365 -0
  263. package/src/storage/S3StorageController.ts +298 -0
  264. package/src/storage/index.ts +43 -0
  265. package/src/storage/routes.ts +264 -0
  266. package/src/storage/storage-registry.ts +187 -0
  267. package/src/storage/types.ts +134 -0
  268. package/src/types/index.ts +27 -0
  269. package/src/utils/dev-port.ts +176 -0
  270. package/src/utils/logger.ts +143 -0
  271. package/src/utils/logging.ts +38 -0
  272. package/src/utils/request-logger.ts +66 -0
  273. package/src/utils/sql.ts +38 -0
  274. package/test/admin-routes.test.ts +640 -0
  275. package/test/api-generator.test.ts +501 -0
  276. package/test/ast-schema-editor.test.ts +63 -0
  277. package/test/auth-middleware-hono.test.ts +556 -0
  278. package/test/auth-routes.test.ts +1047 -0
  279. package/test/driver-registry.test.ts +282 -0
  280. package/test/error-propagation.test.ts +226 -0
  281. package/test/errors-hono.test.ts +133 -0
  282. package/test/errors.test.ts +155 -0
  283. package/test/jwt-security.test.ts +182 -0
  284. package/test/jwt.test.ts +324 -0
  285. package/test/middleware.test.ts +300 -0
  286. package/test/password.test.ts +165 -0
  287. package/test/query-parser.test.ts +263 -0
  288. package/test/rate-limiter.test.ts +102 -0
  289. package/test/safe-compare.test.ts +66 -0
  290. package/test/singleton.test.ts +59 -0
  291. package/test/storage-local.test.ts +271 -0
  292. package/test/storage-registry.test.ts +282 -0
  293. package/test/storage-routes.test.ts +222 -0
  294. package/test/storage-s3.test.ts +304 -0
  295. package/test-ast.ts +28 -0
  296. package/test.ts +6 -0
  297. package/test_output.txt +1133 -0
  298. package/tsconfig.json +49 -0
  299. package/tsconfig.prod.json +20 -0
  300. package/vite.config.ts +80 -0
@@ -0,0 +1,21 @@
1
+ export declare class AstSchemaEditor {
2
+ private project;
3
+ private collectionsDir;
4
+ constructor(collectionsDir: string);
5
+ /**
6
+ * Sanitize collectionId to prevent path traversal attacks.
7
+ * Only allows alphanumeric characters, underscores, and hyphens.
8
+ */
9
+ private sanitizeCollectionId;
10
+ /**
11
+ * Resolve a file path and ensure it falls within the collectionsDir.
12
+ */
13
+ private safePath;
14
+ private getCollectionFile;
15
+ private getCollectionObject;
16
+ private convertJsonToAstString;
17
+ saveProperty(collectionId: string, propertyKey: string, propertyConfig: Record<string, unknown>): Promise<void>;
18
+ deleteProperty(collectionId: string, propertyKey: string): Promise<void>;
19
+ saveCollection(collectionId: string, collectionData: Record<string, unknown>): Promise<void>;
20
+ deleteCollection(collectionId: string): Promise<void>;
21
+ }
@@ -0,0 +1,2 @@
1
+ import { PostgresCollection } from "@rebasepro/types";
2
+ export declare const callbacksTestCollection: PostgresCollection;
@@ -0,0 +1,35 @@
1
+ import { ErrorHandler } from "hono";
2
+ /**
3
+ * Standardized API error class.
4
+ * Throw this from any route handler — the errorHandler middleware
5
+ * will format it into `{ error: { message, code, details? } }`.
6
+ */
7
+ export declare class ApiError extends Error {
8
+ readonly statusCode: number;
9
+ readonly code: string;
10
+ readonly details?: unknown;
11
+ constructor(statusCode: number, code: string, message: string, details?: unknown);
12
+ static badRequest(message: string, code?: string, details?: unknown): ApiError;
13
+ static unauthorized(message: string, code?: string): ApiError;
14
+ static forbidden(message: string, code?: string): ApiError;
15
+ static notFound(message: string, code?: string): ApiError;
16
+ static conflict(message: string, code?: string): ApiError;
17
+ static internal(message: string, code?: string): ApiError;
18
+ static serviceUnavailable(message: string, code?: string): ApiError;
19
+ }
20
+ /**
21
+ * Canonical error response shape:
22
+ * `{ error: { message: string, code: string, details?: unknown } }`
23
+ */
24
+ export interface ErrorResponse {
25
+ error: {
26
+ message: string;
27
+ code: string;
28
+ details?: unknown;
29
+ };
30
+ }
31
+ /**
32
+ * Hono error-handling middleware (`app.onError`).
33
+ * Converts any error into the canonical `{ error: { message, code } }` shape.
34
+ */
35
+ export declare const errorHandler: ErrorHandler;
@@ -0,0 +1,35 @@
1
+ import { GraphQLSchema } from "graphql";
2
+ import { DataDriver, EntityCollection } from "@rebasepro/types";
3
+ /**
4
+ * Lightweight GraphQL schema generator that leverages existing DataDriver
5
+ * No duplication - uses your existing data layer and services
6
+ */
7
+ export declare class GraphQLSchemaGenerator {
8
+ private collections;
9
+ private driver;
10
+ private typeRegistry;
11
+ private inputTypeRegistry;
12
+ constructor(collections: EntityCollection[], driver: DataDriver);
13
+ /**
14
+ * Generate complete GraphQL schema using existing DataDriver
15
+ */
16
+ generateSchema(): GraphQLSchema;
17
+ /**
18
+ * Create GraphQL type for an entity collection
19
+ */
20
+ private createEntityType;
21
+ private convertPropertyToField;
22
+ private createInputType;
23
+ private convertPropertyToInputType;
24
+ /**
25
+ * Create Query type using existing DataDriver methods
26
+ */
27
+ private createQueryType;
28
+ /**
29
+ * Create Mutation type using existing DataDriver methods
30
+ */
31
+ private createMutationType;
32
+ private getTypeName;
33
+ private getSingleQueryName;
34
+ private getListQueryName;
35
+ }
@@ -0,0 +1 @@
1
+ export * from "./graphql-schema-generator";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * API generation infrastructure for Rebase
3
+ * Automatically generates GraphQL and REST APIs from EntityCollection definitions
4
+ */
5
+ export * from "./graphql";
6
+ export * from "./rest";
7
+ export * from "./types";
8
+ export * from "./errors";
9
+ export * from "./server";
@@ -0,0 +1,16 @@
1
+ import { EntityCollection } from "@rebasepro/types";
2
+ /**
3
+ * OpenAPI 3.0.3 specification generator.
4
+ *
5
+ * Produces a spec that exactly mirrors the REST API consumed by the
6
+ * Rebase SDK client (`@rebasepro/client`).
7
+ *
8
+ * Routes are mounted at `{basePath}/data/{slug}` by `initializeRebaseBackend`.
9
+ */
10
+ export interface OpenApiGeneratorOptions {
11
+ /** Base path for the API (e.g. "/api"). Defaults to "/api". */
12
+ basePath?: string;
13
+ /** Whether auth is enabled on data routes. Defaults to true. */
14
+ requireAuth?: boolean;
15
+ }
16
+ export declare function generateOpenApiSpec(collections: EntityCollection[], options?: OpenApiGeneratorOptions): Record<string, unknown>;
@@ -0,0 +1,64 @@
1
+ import { Hono } from "hono";
2
+ import { DataDriver, EntityCollection } from "@rebasepro/types";
3
+ import { HonoEnv } from "../types";
4
+ /**
5
+ * Lightweight REST API generator that leverages existing Rebase DataDriver.
6
+ * Supports `include` query parameter for eager-loading relations via Drizzle.
7
+ */
8
+ export declare class RestApiGenerator {
9
+ private collections;
10
+ private router;
11
+ private driver;
12
+ constructor(collections: EntityCollection[], driver: DataDriver);
13
+ /**
14
+ * Generate REST routes using existing DataDriver
15
+ */
16
+ generateRoutes(): Hono<HonoEnv>;
17
+ /**
18
+ * Get the EntityFetchService from a driver if it exposes one (for include support)
19
+ */
20
+ private getFetchService;
21
+ /**
22
+ * Create REST routes for a collection using existing Rebase patterns
23
+ */
24
+ private createCollectionRoutes;
25
+ /**
26
+ * Catch-all routes for subcollection paths.
27
+ *
28
+ * Matches URL patterns like:
29
+ * GET /authors/111094/posts → list child collection
30
+ * GET /authors/111094/posts/43 → get child entity
31
+ * POST /authors/111094/posts → create child entity
32
+ * PUT /authors/111094/posts/43 → update child entity
33
+ * DELETE /authors/111094/posts/43 → delete child entity
34
+ *
35
+ * The `:rest{.+}` regex param captures the full remainder of the URL
36
+ * path (Hono v4 `*` wildcard does not populate `c.req.param("*")`).
37
+ * We split it into segments and reconstruct the `collectionPath`
38
+ * (e.g. "authors/111094/posts") and optional `entityId` (e.g. "43").
39
+ *
40
+ * The DataDriver.saveEntity / fetchCollection / etc. already know how to
41
+ * resolve multi-segment relation paths, so we just forward to them.
42
+ */
43
+ private createSubcollectionRoutes;
44
+ /**
45
+ * Format successful API response - flattened for traditional REST API
46
+ */
47
+ private formatResponse;
48
+ /**
49
+ * Flatten Rebase entity structure to traditional REST format
50
+ */
51
+ private flattenEntity;
52
+ /**
53
+ * Fetch raw collection data without Entity wrapper (fallback for non-Postgres)
54
+ */
55
+ private fetchRawCollection;
56
+ /**
57
+ * Count raw entities for a collection
58
+ */
59
+ private countRawEntities;
60
+ /**
61
+ * Fetch single entity raw data without Entity wrapper (fallback)
62
+ */
63
+ private fetchRawEntity;
64
+ }
@@ -0,0 +1 @@
1
+ export * from "./api-generator";
@@ -0,0 +1,9 @@
1
+ import { QueryOptions } from "../types";
2
+ /**
3
+ * Map PostgREST-style operators to Rebase WhereFilterOp
4
+ */
5
+ export declare function mapOperator(op: string): string | null;
6
+ /**
7
+ * Parse query parameters into QueryOptions
8
+ */
9
+ export declare function parseQueryOptions(query: Record<string, unknown>): QueryOptions;
@@ -0,0 +1,3 @@
1
+ import { Hono } from "hono";
2
+ import { HonoEnv } from "./types";
3
+ export declare function createSchemaEditorRoutes(collectionsDir: string): Hono<HonoEnv>;
@@ -0,0 +1,40 @@
1
+ import { Hono } from "hono";
2
+ import { DataDriver } from "@rebasepro/types";
3
+ import { ApiConfig, HonoEnv } from "./types";
4
+ /**
5
+ * Simplified API server that leverages existing Rebase infrastructure
6
+ * Can be used standalone or mounted on existing Hono app
7
+ */
8
+ export declare class RebaseApiServer {
9
+ private app;
10
+ private router;
11
+ private config;
12
+ private driver;
13
+ private constructor();
14
+ /**
15
+ * Factory method to create an asynchronously initialized ApiServer instance
16
+ */
17
+ static create(config: ApiConfig & {
18
+ driver: DataDriver;
19
+ }): Promise<RebaseApiServer>;
20
+ /**
21
+ * Setup Hono middleware
22
+ */
23
+ private setupMiddleware;
24
+ /**
25
+ * Setup API routes using existing services
26
+ */
27
+ private setupRoutes;
28
+ /**
29
+ * Get the Hono router with all API routes
30
+ */
31
+ getRouter(): Hono<HonoEnv>;
32
+ /**
33
+ * Get the standalone Hono app
34
+ */
35
+ getApp(): Hono<HonoEnv>;
36
+ /**
37
+ * Start the server (standalone mode) via @hono/node-server
38
+ */
39
+ listen(port?: number, callback?: () => void): void;
40
+ }
@@ -0,0 +1,90 @@
1
+ import { EntityCollection } from "@rebasepro/types";
2
+ import { AuthResult } from "../auth/middleware";
3
+ import { NodePgDatabase } from "drizzle-orm/node-postgres";
4
+ import { DataDriver } from "@rebasepro/types";
5
+ /**
6
+ * Hono Environment Variables
7
+ * Passed to generic Hono<HonoEnv> to type `c.get()`
8
+ */
9
+ export type HonoEnv = {
10
+ Variables: {
11
+ user?: AuthResult | {
12
+ userId?: string;
13
+ roles?: string[];
14
+ };
15
+ driver?: DataDriver;
16
+ };
17
+ };
18
+ /**
19
+ * Configuration for API generation
20
+ */
21
+ /**
22
+ * Configuration for API generation
23
+ */
24
+ export interface ApiConfig {
25
+ collections?: EntityCollection[];
26
+ collectionsDir?: string;
27
+ basePath?: string;
28
+ enableGraphQL?: boolean;
29
+ enableREST?: boolean;
30
+ cors?: {
31
+ origin?: string | string[] | boolean;
32
+ credentials?: boolean;
33
+ };
34
+ /** Whether auth is required for API endpoints (default: true) */
35
+ requireAuth?: boolean;
36
+ /** Optional custom validator for authentication */
37
+ authValidator?: (c: import("hono").Context<import("./types").HonoEnv>) => Promise<AuthResult>;
38
+ pagination?: {
39
+ defaultLimit: number;
40
+ maxLimit: number;
41
+ };
42
+ }
43
+ /**
44
+ * Context passed to resolvers and handlers
45
+ */
46
+ export interface ApiContext {
47
+ user?: AuthResult;
48
+ collections: Map<string, EntityCollection>;
49
+ db: NodePgDatabase;
50
+ }
51
+ /**
52
+ * Standard API response format
53
+ */
54
+ export interface ApiResponse<T = unknown> {
55
+ data?: T;
56
+ error?: {
57
+ message: string;
58
+ code?: string;
59
+ details?: unknown;
60
+ };
61
+ meta?: {
62
+ total?: number;
63
+ page?: number;
64
+ limit?: number;
65
+ hasMore?: boolean;
66
+ };
67
+ }
68
+ /**
69
+ * Query options for API endpoints
70
+ */
71
+ export interface QueryOptions {
72
+ limit?: number;
73
+ offset?: number;
74
+ where?: Record<string, unknown>;
75
+ orderBy?: Array<{
76
+ field: string;
77
+ direction: "asc" | "desc";
78
+ }>;
79
+ include?: string[];
80
+ /** Columns to return in the response (field-level selection) */
81
+ fields?: string[];
82
+ }
83
+ /**
84
+ * Relation resolution configuration
85
+ */
86
+ export interface RelationConfig {
87
+ relationName: string;
88
+ depth?: number;
89
+ include?: string[];
90
+ }
@@ -0,0 +1,16 @@
1
+ import { Hono } from "hono";
2
+ import { AuthModuleConfig } from "./routes";
3
+ interface AdminRouteOptions extends AuthModuleConfig {
4
+ serviceKey?: string;
5
+ /**
6
+ * Callback to persistently mark bootstrap as completed.
7
+ * Invoked after the first admin user is promoted via POST /admin/bootstrap.
8
+ */
9
+ setBootstrapCompleted?: () => Promise<void>;
10
+ }
11
+ import { HonoEnv } from "../api/types";
12
+ /**
13
+ * Create admin routes for user and role management
14
+ */
15
+ export declare function createAdminRoutes(config: AdminRouteOptions): Hono<HonoEnv>;
16
+ export {};
@@ -0,0 +1,30 @@
1
+ import type { OAuthProvider } from "./interfaces";
2
+ /**
3
+ * Creates an Apple Sign In OAuth Provider integration.
4
+ *
5
+ * Apple requires a client secret that is a signed JWT, regenerated on each
6
+ * token exchange (valid up to 6 months). This provider handles that automatically.
7
+ *
8
+ * Required Apple Developer configuration:
9
+ * - Services ID (clientId)
10
+ * - Key ID from the private key registered with Apple
11
+ * - Team ID from Apple Developer account
12
+ * - Private key (.p8 file contents) downloaded from Apple Developer portal
13
+ */
14
+ export declare function createAppleProvider(config: {
15
+ clientId: string;
16
+ teamId: string;
17
+ keyId: string;
18
+ /** The raw PEM contents of the .p8 private key file */
19
+ privateKey: string;
20
+ }): OAuthProvider<{
21
+ code: string;
22
+ redirectUri: string;
23
+ user?: {
24
+ name?: {
25
+ firstName?: string;
26
+ lastName?: string;
27
+ };
28
+ email?: string;
29
+ };
30
+ }>;
@@ -0,0 +1,11 @@
1
+ import type { OAuthProvider } from "./interfaces";
2
+ /**
3
+ * Creates a Bitbucket OAuth Provider integration (OAuth 2.0 consumer).
4
+ */
5
+ export declare function createBitbucketProvider(config: {
6
+ clientId: string;
7
+ clientSecret: string;
8
+ }): OAuthProvider<{
9
+ code: string;
10
+ redirectUri: string;
11
+ }>;
@@ -0,0 +1,14 @@
1
+ import type { OAuthProvider } from "./interfaces";
2
+ /**
3
+ * Creates a Discord OAuth2 Provider integration.
4
+ *
5
+ * Uses the authorization code flow. Requires the "identify" and "email"
6
+ * scopes to retrieve the user's email and profile information.
7
+ */
8
+ export declare function createDiscordProvider(config: {
9
+ clientId: string;
10
+ clientSecret: string;
11
+ }): OAuthProvider<{
12
+ code: string;
13
+ redirectUri: string;
14
+ }>;
@@ -0,0 +1,14 @@
1
+ import type { OAuthProvider } from "./interfaces";
2
+ /**
3
+ * Creates a Facebook / Meta OAuth Provider integration.
4
+ *
5
+ * Uses the authorization code flow to exchange a code for an access token,
6
+ * then fetches user profile from the Facebook Graph API.
7
+ */
8
+ export declare function createFacebookProvider(config: {
9
+ clientId: string;
10
+ clientSecret: string;
11
+ }): OAuthProvider<{
12
+ code: string;
13
+ redirectUri: string;
14
+ }>;
@@ -0,0 +1,15 @@
1
+ import type { OAuthProvider } from "./interfaces";
2
+ /**
3
+ * Creates a GitHub OAuth Provider integration.
4
+ *
5
+ * Flow: Frontend receives an authorization `code` via the GitHub OAuth redirect.
6
+ * This provider exchanges the code for an access token, then fetches the user's
7
+ * profile and primary email from the GitHub API.
8
+ */
9
+ export declare function createGitHubProvider(config: {
10
+ clientId: string;
11
+ clientSecret: string;
12
+ }): OAuthProvider<{
13
+ code: string;
14
+ redirectUri: string;
15
+ }>;
@@ -0,0 +1,13 @@
1
+ import type { OAuthProvider } from "./interfaces";
2
+ /**
3
+ * Creates a GitLab OAuth Provider integration.
4
+ * Works with both GitLab.com and self-hosted instances.
5
+ */
6
+ export declare function createGitLabProvider(config: {
7
+ clientId: string;
8
+ clientSecret: string;
9
+ baseUrl?: string;
10
+ }): OAuthProvider<{
11
+ code: string;
12
+ redirectUri: string;
13
+ }>;
@@ -0,0 +1,14 @@
1
+ import type { OAuthProvider } from "./interfaces";
2
+ export interface GoogleUserInfo {
3
+ googleId: string;
4
+ email: string;
5
+ displayName: string | null;
6
+ photoUrl: string | null;
7
+ emailVerified: boolean;
8
+ }
9
+ /**
10
+ * Creates a Google OAuth Provider integration
11
+ */
12
+ export declare function createGoogleProvider(clientId: string): OAuthProvider<{
13
+ idToken: string;
14
+ }>;
@@ -0,0 +1,23 @@
1
+ export * from "./interfaces";
2
+ export { configureJwt, generateAccessToken, verifyAccessToken, generateRefreshToken, hashRefreshToken, getRefreshTokenExpiry, getAccessTokenExpiry } from "./jwt";
3
+ export type { JwtConfig, AccessTokenPayload } from "./jwt";
4
+ export { hashPassword, verifyPassword, validatePasswordStrength } from "./password";
5
+ export type { PasswordValidationResult } from "./password";
6
+ export { createGoogleProvider } from "./google-oauth";
7
+ export { createLinkedinProvider } from "./linkedin-oauth";
8
+ export { createGitHubProvider } from "./github-oauth";
9
+ export { createMicrosoftProvider } from "./microsoft-oauth";
10
+ export { createAppleProvider } from "./apple-oauth";
11
+ export { createFacebookProvider } from "./facebook-oauth";
12
+ export { createTwitterProvider } from "./twitter-oauth";
13
+ export { createDiscordProvider } from "./discord-oauth";
14
+ export { createGitLabProvider } from "./gitlab-oauth";
15
+ export { createBitbucketProvider } from "./bitbucket-oauth";
16
+ export { createSlackProvider } from "./slack-oauth";
17
+ export { createSpotifyProvider } from "./spotify-oauth";
18
+ export { requireAuth, requireAdmin, optionalAuth, extractUserFromToken, createAuthMiddleware } from "./middleware";
19
+ export type { AuthMiddlewareOptions, AuthResult } from "./middleware";
20
+ export { createAuthRoutes } from "./routes";
21
+ export type { AuthModuleConfig } from "./routes";
22
+ export { createAdminRoutes } from "./admin-routes";
23
+ export { createRateLimiter, defaultAuthLimiter, strictAuthLimiter } from "./rate-limiter";