@selvajs/local-provider 0.11.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 (295) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -0
  3. package/dist/auth/LocalAuthProvider.d.ts +28 -0
  4. package/dist/auth/LocalAuthProvider.d.ts.map +1 -0
  5. package/dist/auth/LocalAuthProvider.js +142 -0
  6. package/dist/auth/LocalAuthProvider.js.map +1 -0
  7. package/dist/auth/__tests__/conformance.test.d.ts +2 -0
  8. package/dist/auth/__tests__/conformance.test.d.ts.map +1 -0
  9. package/dist/auth/__tests__/conformance.test.js +36 -0
  10. package/dist/auth/__tests__/conformance.test.js.map +1 -0
  11. package/dist/auth/hmac.d.ts +18 -0
  12. package/dist/auth/hmac.d.ts.map +1 -0
  13. package/dist/auth/hmac.js +41 -0
  14. package/dist/auth/hmac.js.map +1 -0
  15. package/dist/auth/index.d.ts +6 -0
  16. package/dist/auth/index.d.ts.map +1 -0
  17. package/dist/auth/index.js +4 -0
  18. package/dist/auth/index.js.map +1 -0
  19. package/dist/auth/users.d.ts +38 -0
  20. package/dist/auth/users.d.ts.map +1 -0
  21. package/dist/auth/users.js +100 -0
  22. package/dist/auth/users.js.map +1 -0
  23. package/dist/compute/FilesystemComputeProvider.d.ts +16 -0
  24. package/dist/compute/FilesystemComputeProvider.d.ts.map +1 -0
  25. package/dist/compute/FilesystemComputeProvider.js +51 -0
  26. package/dist/compute/FilesystemComputeProvider.js.map +1 -0
  27. package/dist/compute/SingleComputeServerProvider.d.ts +15 -0
  28. package/dist/compute/SingleComputeServerProvider.d.ts.map +1 -0
  29. package/dist/compute/SingleComputeServerProvider.js +26 -0
  30. package/dist/compute/SingleComputeServerProvider.js.map +1 -0
  31. package/dist/compute/types.d.ts +30 -0
  32. package/dist/compute/types.d.ts.map +1 -0
  33. package/dist/compute/types.js +2 -0
  34. package/dist/compute/types.js.map +1 -0
  35. package/dist/computeServer/FilesystemComputeServerStore.d.ts +14 -0
  36. package/dist/computeServer/FilesystemComputeServerStore.d.ts.map +1 -0
  37. package/dist/computeServer/FilesystemComputeServerStore.js +35 -0
  38. package/dist/computeServer/FilesystemComputeServerStore.js.map +1 -0
  39. package/dist/computeServer/LocalComputeServerProvider.d.ts +18 -0
  40. package/dist/computeServer/LocalComputeServerProvider.d.ts.map +1 -0
  41. package/dist/computeServer/LocalComputeServerProvider.js +29 -0
  42. package/dist/computeServer/LocalComputeServerProvider.js.map +1 -0
  43. package/dist/computeServer/__tests__/conformance.test.d.ts +2 -0
  44. package/dist/computeServer/__tests__/conformance.test.d.ts.map +1 -0
  45. package/dist/computeServer/__tests__/conformance.test.js +20 -0
  46. package/dist/computeServer/__tests__/conformance.test.js.map +1 -0
  47. package/dist/computeServer/index.d.ts +2 -0
  48. package/dist/computeServer/index.d.ts.map +1 -0
  49. package/dist/computeServer/index.js +2 -0
  50. package/dist/computeServer/index.js.map +1 -0
  51. package/dist/data/LocalComputeServerStore.d.ts +72 -0
  52. package/dist/data/LocalComputeServerStore.d.ts.map +1 -0
  53. package/dist/data/LocalComputeServerStore.js +207 -0
  54. package/dist/data/LocalComputeServerStore.js.map +1 -0
  55. package/dist/data/LocalDataProvider.d.ts +47 -0
  56. package/dist/data/LocalDataProvider.d.ts.map +1 -0
  57. package/dist/data/LocalDataProvider.js +118 -0
  58. package/dist/data/LocalDataProvider.js.map +1 -0
  59. package/dist/data/LocalDefinitionMetaProvider.d.ts +22 -0
  60. package/dist/data/LocalDefinitionMetaProvider.d.ts.map +1 -0
  61. package/dist/data/LocalDefinitionMetaProvider.js +131 -0
  62. package/dist/data/LocalDefinitionMetaProvider.js.map +1 -0
  63. package/dist/data/LocalDefinitionStore.d.ts +33 -0
  64. package/dist/data/LocalDefinitionStore.d.ts.map +1 -0
  65. package/dist/data/LocalDefinitionStore.js +274 -0
  66. package/dist/data/LocalDefinitionStore.js.map +1 -0
  67. package/dist/data/LocalInviteStore.d.ts +23 -0
  68. package/dist/data/LocalInviteStore.d.ts.map +1 -0
  69. package/dist/data/LocalInviteStore.js +98 -0
  70. package/dist/data/LocalInviteStore.js.map +1 -0
  71. package/dist/data/LocalOrgStore.d.ts +67 -0
  72. package/dist/data/LocalOrgStore.d.ts.map +1 -0
  73. package/dist/data/LocalOrgStore.js +255 -0
  74. package/dist/data/LocalOrgStore.js.map +1 -0
  75. package/dist/data/LocalPlatformProjectGrantStore.d.ts +14 -0
  76. package/dist/data/LocalPlatformProjectGrantStore.d.ts.map +1 -0
  77. package/dist/data/LocalPlatformProjectGrantStore.js +62 -0
  78. package/dist/data/LocalPlatformProjectGrantStore.js.map +1 -0
  79. package/dist/data/LocalProjectStore.d.ts +30 -0
  80. package/dist/data/LocalProjectStore.d.ts.map +1 -0
  81. package/dist/data/LocalProjectStore.js +171 -0
  82. package/dist/data/LocalProjectStore.js.map +1 -0
  83. package/dist/data/LocalShareLinkStore.d.ts +39 -0
  84. package/dist/data/LocalShareLinkStore.d.ts.map +1 -0
  85. package/dist/data/LocalShareLinkStore.js +108 -0
  86. package/dist/data/LocalShareLinkStore.js.map +1 -0
  87. package/dist/data/__tests__/LocalDefinitionMetaProvider.test.d.ts +2 -0
  88. package/dist/data/__tests__/LocalDefinitionMetaProvider.test.d.ts.map +1 -0
  89. package/dist/data/__tests__/LocalDefinitionMetaProvider.test.js +21 -0
  90. package/dist/data/__tests__/LocalDefinitionMetaProvider.test.js.map +1 -0
  91. package/dist/data/__tests__/cascade.test.d.ts +2 -0
  92. package/dist/data/__tests__/cascade.test.d.ts.map +1 -0
  93. package/dist/data/__tests__/cascade.test.js +265 -0
  94. package/dist/data/__tests__/cascade.test.js.map +1 -0
  95. package/dist/data/__tests__/compute-server-conformance.test.d.ts +2 -0
  96. package/dist/data/__tests__/compute-server-conformance.test.d.ts.map +1 -0
  97. package/dist/data/__tests__/compute-server-conformance.test.js +21 -0
  98. package/dist/data/__tests__/compute-server-conformance.test.js.map +1 -0
  99. package/dist/data/__tests__/compute-server-encryption.test.d.ts +2 -0
  100. package/dist/data/__tests__/compute-server-encryption.test.d.ts.map +1 -0
  101. package/dist/data/__tests__/compute-server-encryption.test.js +131 -0
  102. package/dist/data/__tests__/compute-server-encryption.test.js.map +1 -0
  103. package/dist/data/__tests__/definition-conformance.test.d.ts +2 -0
  104. package/dist/data/__tests__/definition-conformance.test.d.ts.map +1 -0
  105. package/dist/data/__tests__/definition-conformance.test.js +20 -0
  106. package/dist/data/__tests__/definition-conformance.test.js.map +1 -0
  107. package/dist/data/__tests__/event-sink-conformance.test.d.ts +2 -0
  108. package/dist/data/__tests__/event-sink-conformance.test.d.ts.map +1 -0
  109. package/dist/data/__tests__/event-sink-conformance.test.js +24 -0
  110. package/dist/data/__tests__/event-sink-conformance.test.js.map +1 -0
  111. package/dist/data/__tests__/invite-conformance.test.d.ts +2 -0
  112. package/dist/data/__tests__/invite-conformance.test.d.ts.map +1 -0
  113. package/dist/data/__tests__/invite-conformance.test.js +21 -0
  114. package/dist/data/__tests__/invite-conformance.test.js.map +1 -0
  115. package/dist/data/__tests__/org-conformance.test.d.ts +2 -0
  116. package/dist/data/__tests__/org-conformance.test.d.ts.map +1 -0
  117. package/dist/data/__tests__/org-conformance.test.js +36 -0
  118. package/dist/data/__tests__/org-conformance.test.js.map +1 -0
  119. package/dist/data/__tests__/platform-project-grant-conformance.test.d.ts +2 -0
  120. package/dist/data/__tests__/platform-project-grant-conformance.test.d.ts.map +1 -0
  121. package/dist/data/__tests__/platform-project-grant-conformance.test.js +20 -0
  122. package/dist/data/__tests__/platform-project-grant-conformance.test.js.map +1 -0
  123. package/dist/data/__tests__/project-conformance.test.d.ts +2 -0
  124. package/dist/data/__tests__/project-conformance.test.d.ts.map +1 -0
  125. package/dist/data/__tests__/project-conformance.test.js +53 -0
  126. package/dist/data/__tests__/project-conformance.test.js.map +1 -0
  127. package/dist/data/__tests__/rules.test.d.ts +2 -0
  128. package/dist/data/__tests__/rules.test.d.ts.map +1 -0
  129. package/dist/data/__tests__/rules.test.js +484 -0
  130. package/dist/data/__tests__/rules.test.js.map +1 -0
  131. package/dist/data/__tests__/share-link-conformance.test.d.ts +2 -0
  132. package/dist/data/__tests__/share-link-conformance.test.d.ts.map +1 -0
  133. package/dist/data/__tests__/share-link-conformance.test.js +20 -0
  134. package/dist/data/__tests__/share-link-conformance.test.js.map +1 -0
  135. package/dist/data/fsJson.d.ts +12 -0
  136. package/dist/data/fsJson.d.ts.map +1 -0
  137. package/dist/data/fsJson.js +29 -0
  138. package/dist/data/fsJson.js.map +1 -0
  139. package/dist/data/index.d.ts +13 -0
  140. package/dist/data/index.d.ts.map +1 -0
  141. package/dist/data/index.js +9 -0
  142. package/dist/data/index.js.map +1 -0
  143. package/dist/data/pagination.d.ts +15 -0
  144. package/dist/data/pagination.d.ts.map +1 -0
  145. package/dist/data/pagination.js +36 -0
  146. package/dist/data/pagination.js.map +1 -0
  147. package/dist/data/secretCrypto.d.ts +23 -0
  148. package/dist/data/secretCrypto.d.ts.map +1 -0
  149. package/dist/data/secretCrypto.js +64 -0
  150. package/dist/data/secretCrypto.js.map +1 -0
  151. package/dist/data/userData.d.ts +40 -0
  152. package/dist/data/userData.d.ts.map +1 -0
  153. package/dist/data/userData.js +84 -0
  154. package/dist/data/userData.js.map +1 -0
  155. package/dist/definitions/LocalDefinitionMetaProvider.d.ts +27 -0
  156. package/dist/definitions/LocalDefinitionMetaProvider.d.ts.map +1 -0
  157. package/dist/definitions/LocalDefinitionMetaProvider.js +188 -0
  158. package/dist/definitions/LocalDefinitionMetaProvider.js.map +1 -0
  159. package/dist/definitions/__tests__/conformance.test.d.ts +2 -0
  160. package/dist/definitions/__tests__/conformance.test.d.ts.map +1 -0
  161. package/dist/definitions/__tests__/conformance.test.js +20 -0
  162. package/dist/definitions/__tests__/conformance.test.js.map +1 -0
  163. package/dist/definitions/index.d.ts +2 -0
  164. package/dist/definitions/index.d.ts.map +1 -0
  165. package/dist/definitions/index.js +2 -0
  166. package/dist/definitions/index.js.map +1 -0
  167. package/dist/definitions/providers/filesystem-files.d.ts +24 -0
  168. package/dist/definitions/providers/filesystem-files.d.ts.map +1 -0
  169. package/dist/definitions/providers/filesystem-files.js +170 -0
  170. package/dist/definitions/providers/filesystem-files.js.map +1 -0
  171. package/dist/definitions/providers/filesystem-meta.d.ts +17 -0
  172. package/dist/definitions/providers/filesystem-meta.d.ts.map +1 -0
  173. package/dist/definitions/providers/filesystem-meta.js +216 -0
  174. package/dist/definitions/providers/filesystem-meta.js.map +1 -0
  175. package/dist/fsJson.d.ts +12 -0
  176. package/dist/fsJson.d.ts.map +1 -0
  177. package/dist/fsJson.js +29 -0
  178. package/dist/fsJson.js.map +1 -0
  179. package/dist/index.d.ts +13 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +16 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/invites/LocalInviteProvider.d.ts +24 -0
  184. package/dist/invites/LocalInviteProvider.d.ts.map +1 -0
  185. package/dist/invites/LocalInviteProvider.js +89 -0
  186. package/dist/invites/LocalInviteProvider.js.map +1 -0
  187. package/dist/invites/__tests__/conformance.test.d.ts +2 -0
  188. package/dist/invites/__tests__/conformance.test.d.ts.map +1 -0
  189. package/dist/invites/__tests__/conformance.test.js +21 -0
  190. package/dist/invites/__tests__/conformance.test.js.map +1 -0
  191. package/dist/organizations/LocalOrganizationProvider.d.ts +41 -0
  192. package/dist/organizations/LocalOrganizationProvider.d.ts.map +1 -0
  193. package/dist/organizations/LocalOrganizationProvider.js +198 -0
  194. package/dist/organizations/LocalOrganizationProvider.js.map +1 -0
  195. package/dist/organizations/__tests__/conformance.test.d.ts +2 -0
  196. package/dist/organizations/__tests__/conformance.test.d.ts.map +1 -0
  197. package/dist/organizations/__tests__/conformance.test.js +20 -0
  198. package/dist/organizations/__tests__/conformance.test.js.map +1 -0
  199. package/dist/organizations/index.d.ts +2 -0
  200. package/dist/organizations/index.d.ts.map +1 -0
  201. package/dist/organizations/index.js +2 -0
  202. package/dist/organizations/index.js.map +1 -0
  203. package/dist/pagination.d.ts +15 -0
  204. package/dist/pagination.d.ts.map +1 -0
  205. package/dist/pagination.js +36 -0
  206. package/dist/pagination.js.map +1 -0
  207. package/dist/permissions/LocalPlatformPermissionStore.d.ts +39 -0
  208. package/dist/permissions/LocalPlatformPermissionStore.d.ts.map +1 -0
  209. package/dist/permissions/LocalPlatformPermissionStore.js +117 -0
  210. package/dist/permissions/LocalPlatformPermissionStore.js.map +1 -0
  211. package/dist/permissions/__tests__/conformance.test.d.ts +2 -0
  212. package/dist/permissions/__tests__/conformance.test.d.ts.map +1 -0
  213. package/dist/permissions/__tests__/conformance.test.js +37 -0
  214. package/dist/permissions/__tests__/conformance.test.js.map +1 -0
  215. package/dist/permissions/index.d.ts +2 -0
  216. package/dist/permissions/index.d.ts.map +1 -0
  217. package/dist/permissions/index.js +2 -0
  218. package/dist/permissions/index.js.map +1 -0
  219. package/dist/projects/LocalProjectProvider.d.ts +21 -0
  220. package/dist/projects/LocalProjectProvider.d.ts.map +1 -0
  221. package/dist/projects/LocalProjectProvider.js +125 -0
  222. package/dist/projects/LocalProjectProvider.js.map +1 -0
  223. package/dist/projects/__tests__/conformance.test.d.ts +2 -0
  224. package/dist/projects/__tests__/conformance.test.d.ts.map +1 -0
  225. package/dist/projects/__tests__/conformance.test.js +44 -0
  226. package/dist/projects/__tests__/conformance.test.js.map +1 -0
  227. package/dist/projects/index.d.ts +2 -0
  228. package/dist/projects/index.d.ts.map +1 -0
  229. package/dist/projects/index.js +2 -0
  230. package/dist/projects/index.js.map +1 -0
  231. package/dist/storage/LocalStorageProvider.d.ts +27 -0
  232. package/dist/storage/LocalStorageProvider.d.ts.map +1 -0
  233. package/dist/storage/LocalStorageProvider.js +74 -0
  234. package/dist/storage/LocalStorageProvider.js.map +1 -0
  235. package/dist/storage/__tests__/conformance.test.d.ts +2 -0
  236. package/dist/storage/__tests__/conformance.test.d.ts.map +1 -0
  237. package/dist/storage/__tests__/conformance.test.js +20 -0
  238. package/dist/storage/__tests__/conformance.test.js.map +1 -0
  239. package/dist/storage/index.d.ts +2 -0
  240. package/dist/storage/index.d.ts.map +1 -0
  241. package/dist/storage/index.js +2 -0
  242. package/dist/storage/index.js.map +1 -0
  243. package/dist/userProfile/LocalUserProfileProvider.d.ts +25 -0
  244. package/dist/userProfile/LocalUserProfileProvider.d.ts.map +1 -0
  245. package/dist/userProfile/LocalUserProfileProvider.js +110 -0
  246. package/dist/userProfile/LocalUserProfileProvider.js.map +1 -0
  247. package/dist/userProfile/__tests__/conformance.test.d.ts +2 -0
  248. package/dist/userProfile/__tests__/conformance.test.d.ts.map +1 -0
  249. package/dist/userProfile/__tests__/conformance.test.js +40 -0
  250. package/dist/userProfile/__tests__/conformance.test.js.map +1 -0
  251. package/dist/userProfile/index.d.ts +2 -0
  252. package/dist/userProfile/index.d.ts.map +1 -0
  253. package/dist/userProfile/index.js +2 -0
  254. package/dist/userProfile/index.js.map +1 -0
  255. package/package.json +70 -0
  256. package/src/README.md +37 -0
  257. package/src/auth/LocalAuthProvider.ts +165 -0
  258. package/src/auth/__tests__/conformance.test.ts +40 -0
  259. package/src/auth/hmac.ts +53 -0
  260. package/src/auth/index.ts +5 -0
  261. package/src/auth/users.ts +151 -0
  262. package/src/data/LocalComputeServerStore.ts +290 -0
  263. package/src/data/LocalDataProvider.ts +148 -0
  264. package/src/data/LocalDefinitionStore.ts +369 -0
  265. package/src/data/LocalInviteStore.ts +117 -0
  266. package/src/data/LocalOrgStore.ts +356 -0
  267. package/src/data/LocalPlatformProjectGrantStore.ts +85 -0
  268. package/src/data/LocalProjectStore.ts +274 -0
  269. package/src/data/LocalShareLinkStore.ts +138 -0
  270. package/src/data/__tests__/cascade.test.ts +300 -0
  271. package/src/data/__tests__/compute-server-conformance.test.ts +26 -0
  272. package/src/data/__tests__/compute-server-encryption.test.ts +185 -0
  273. package/src/data/__tests__/definition-conformance.test.ts +23 -0
  274. package/src/data/__tests__/event-sink-conformance.test.ts +28 -0
  275. package/src/data/__tests__/invite-conformance.test.ts +24 -0
  276. package/src/data/__tests__/org-conformance.test.ts +43 -0
  277. package/src/data/__tests__/platform-project-grant-conformance.test.ts +24 -0
  278. package/src/data/__tests__/project-conformance.test.ts +64 -0
  279. package/src/data/__tests__/rules.test.ts +682 -0
  280. package/src/data/__tests__/share-link-conformance.test.ts +23 -0
  281. package/src/data/fsJson.ts +28 -0
  282. package/src/data/index.ts +16 -0
  283. package/src/data/pagination.ts +48 -0
  284. package/src/data/secretCrypto.ts +69 -0
  285. package/src/data/userData.ts +134 -0
  286. package/src/index.ts +42 -0
  287. package/src/permissions/LocalPlatformPermissionStore.ts +129 -0
  288. package/src/permissions/__tests__/conformance.test.ts +40 -0
  289. package/src/permissions/index.ts +1 -0
  290. package/src/storage/LocalStorageProvider.ts +78 -0
  291. package/src/storage/__tests__/conformance.test.ts +23 -0
  292. package/src/storage/index.ts +1 -0
  293. package/src/userProfile/LocalUserProfileProvider.ts +135 -0
  294. package/src/userProfile/__tests__/conformance.test.ts +43 -0
  295. package/src/userProfile/index.ts +1 -0
@@ -0,0 +1,47 @@
1
+ import type { IDataProvider, IOrgStore, IProjectStore, IDefinitionStore, IComputeServerStore, IInviteStore, IShareLinkStore, IUserProfileStore, IPlatformPermissionStore, IPlatformProjectGrantStore, IEventSink, RequestContext } from '@selvajs/platform';
2
+ /**
3
+ * Composition of every local-provider data store. One `LocalOrgStoreLoader`
4
+ * is shared across org + project stores so they see the same cache and
5
+ * atomic write path.
6
+ *
7
+ * The `LocalUserDataStore` is similarly shared across the permissions and
8
+ * profile stores: both write to `user-data.json`, and `ensureUser` seeds
9
+ * exactly the same row both stores read from. This is the local equivalent
10
+ * of Supabase's `handle_new_auth_user` trigger.
11
+ *
12
+ * Stores are passed as a record so adding a new store doesn't ripple through
13
+ * test fixtures and call sites.
14
+ */
15
+ export declare class LocalDataProvider implements IDataProvider {
16
+ readonly orgs: IOrgStore;
17
+ readonly projects: IProjectStore;
18
+ readonly definitions: IDefinitionStore;
19
+ readonly computeServer: IComputeServerStore;
20
+ readonly invites: IInviteStore;
21
+ readonly shareLinks: IShareLinkStore;
22
+ readonly userProfile: IUserProfileStore;
23
+ readonly permissions: IPlatformPermissionStore;
24
+ readonly platformProjectGrants: IPlatformProjectGrantStore;
25
+ private readonly userData;
26
+ private constructor();
27
+ /**
28
+ * Idempotently register a user in the data layer. Called from
29
+ * `hooks.server.ts` on every authed request — the local equivalent of
30
+ * Supabase's `handle_new_auth_user` trigger. After this completes the
31
+ * user has an empty row in `user-data.json` that the permissions and
32
+ * profile stores can read and update.
33
+ *
34
+ * `ctx` is unused — registration runs as a system operation regardless of
35
+ * the calling user. Argument is kept for interface symmetry with adapters
36
+ * that need it.
37
+ */
38
+ ensureUser(_ctx: RequestContext, userId: string): Promise<void>;
39
+ /**
40
+ * Cascade hook called after the auth provider deletes a user. Removes the
41
+ * matching `user-data.json` row so the data layer doesn't accumulate
42
+ * orphans. Tolerates missing rows.
43
+ */
44
+ onUserDeleted(_ctx: RequestContext, userId: string): Promise<void>;
45
+ static fromEnv(env: Record<string, string | undefined>, events?: IEventSink): LocalDataProvider;
46
+ }
47
+ //# sourceMappingURL=LocalDataProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalDataProvider.d.ts","sourceRoot":"","sources":["../../src/data/LocalDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,EAC1B,UAAU,EACV,cAAc,EACd,MAAM,mBAAmB,CAAC;AAc3B;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACtD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;IAE3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAE9C,OAAO;IAgBP;;;;;;;;;;OAUG;IACG,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxE,MAAM,CAAC,OAAO,CACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,MAAM,GAAE,UAAgC,GACtC,iBAAiB;CA+CpB"}
@@ -0,0 +1,118 @@
1
+ import { NoopEventSink } from '@selvajs/platform';
2
+ import * as path from 'node:path';
3
+ import { LocalOrgStore, LocalOrgStoreLoader } from './LocalOrgStore.js';
4
+ import { LocalProjectStore } from './LocalProjectStore.js';
5
+ import { LocalDefinitionStore } from './LocalDefinitionStore.js';
6
+ import { LocalComputeServerStore } from './LocalComputeServerStore.js';
7
+ import { LocalInviteStore } from './LocalInviteStore.js';
8
+ import { LocalShareLinkStore } from './LocalShareLinkStore.js';
9
+ import { LocalPlatformProjectGrantStore } from './LocalPlatformProjectGrantStore.js';
10
+ import { LocalUserProfileProvider } from '../userProfile/LocalUserProfileProvider.js';
11
+ import { LocalPlatformPermissionStore } from '../permissions/LocalPlatformPermissionStore.js';
12
+ import { createLocalUserDataStore } from './userData.js';
13
+ /**
14
+ * Composition of every local-provider data store. One `LocalOrgStoreLoader`
15
+ * is shared across org + project stores so they see the same cache and
16
+ * atomic write path.
17
+ *
18
+ * The `LocalUserDataStore` is similarly shared across the permissions and
19
+ * profile stores: both write to `user-data.json`, and `ensureUser` seeds
20
+ * exactly the same row both stores read from. This is the local equivalent
21
+ * of Supabase's `handle_new_auth_user` trigger.
22
+ *
23
+ * Stores are passed as a record so adding a new store doesn't ripple through
24
+ * test fixtures and call sites.
25
+ */
26
+ export class LocalDataProvider {
27
+ orgs;
28
+ projects;
29
+ definitions;
30
+ computeServer;
31
+ invites;
32
+ shareLinks;
33
+ userProfile;
34
+ permissions;
35
+ platformProjectGrants;
36
+ userData;
37
+ constructor(stores, userData) {
38
+ this.orgs = stores.orgs;
39
+ this.projects = stores.projects;
40
+ this.definitions = stores.definitions;
41
+ this.computeServer = stores.computeServer;
42
+ this.invites = stores.invites;
43
+ this.shareLinks = stores.shareLinks;
44
+ this.userProfile = stores.userProfile;
45
+ this.permissions = stores.permissions;
46
+ this.platformProjectGrants = stores.platformProjectGrants;
47
+ this.userData = userData;
48
+ }
49
+ /**
50
+ * Idempotently register a user in the data layer. Called from
51
+ * `hooks.server.ts` on every authed request — the local equivalent of
52
+ * Supabase's `handle_new_auth_user` trigger. After this completes the
53
+ * user has an empty row in `user-data.json` that the permissions and
54
+ * profile stores can read and update.
55
+ *
56
+ * `ctx` is unused — registration runs as a system operation regardless of
57
+ * the calling user. Argument is kept for interface symmetry with adapters
58
+ * that need it.
59
+ */
60
+ async ensureUser(_ctx, userId) {
61
+ await this.userData.ensure(userId);
62
+ }
63
+ /**
64
+ * Cascade hook called after the auth provider deletes a user. Removes the
65
+ * matching `user-data.json` row so the data layer doesn't accumulate
66
+ * orphans. Tolerates missing rows.
67
+ */
68
+ async onUserDeleted(_ctx, userId) {
69
+ try {
70
+ await this.userData.deleteUser(userId);
71
+ }
72
+ catch {
73
+ // Already absent — nothing to clean up.
74
+ }
75
+ }
76
+ static fromEnv(env, events = new NoopEventSink()) {
77
+ if (!env.DATA_PATH)
78
+ throw new Error('Missing required env var: DATA_PATH');
79
+ const dataPath = env.DATA_PATH;
80
+ const userDataFilePath = path.join(dataPath, 'user-data.json');
81
+ const loader = new LocalOrgStoreLoader(dataPath);
82
+ const platformProjectGrants = LocalPlatformProjectGrantStore.fromEnv(env);
83
+ const invites = LocalInviteStore.fromEnv(env, events);
84
+ const computeServer = LocalComputeServerStore.fromEnv(env);
85
+ const projects = new LocalProjectStore({ loader, grants: platformProjectGrants, events });
86
+ const definitions = new LocalDefinitionStore(dataPath, undefined, events);
87
+ const shareLinks = new LocalShareLinkStore({
88
+ filePath: path.join(dataPath, 'share-links.json'),
89
+ events
90
+ });
91
+ const orgs = new LocalOrgStore({
92
+ loader,
93
+ invites,
94
+ computeServer,
95
+ grants: platformProjectGrants,
96
+ events
97
+ });
98
+ // Wire cross-store deps that aren't constructor-injected:
99
+ // - canEditDefinition needs the project store for `listPublic`
100
+ // - share-link resolution needs the definition store to enforce the §7
101
+ // soft-delete cascade (Supabase does the equivalent via JOIN)
102
+ definitions.setProjectProvider(projects);
103
+ shareLinks.setDefinitionProvider(definitions);
104
+ const userData = createLocalUserDataStore(userDataFilePath);
105
+ return new LocalDataProvider({
106
+ orgs,
107
+ projects,
108
+ definitions,
109
+ computeServer,
110
+ invites,
111
+ shareLinks,
112
+ userProfile: new LocalUserProfileProvider(userDataFilePath),
113
+ permissions: new LocalPlatformPermissionStore(userDataFilePath),
114
+ platformProjectGrants
115
+ }, userData);
116
+ }
117
+ }
118
+ //# sourceMappingURL=LocalDataProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalDataProvider.js","sourceRoot":"","sources":["../../src/data/LocalDataProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { IDefinitionStore, DefinitionRecord, DefinitionRecordPatch, HistoryEntry, RequestContext, ListOptions, Page } from '@selva/platform';
2
+ export declare class LocalDefinitionMetaProvider implements IDefinitionStore {
3
+ private readonly configPath;
4
+ static fromEnv(env: Record<string, string | undefined>): LocalDefinitionMetaProvider;
5
+ constructor(definitionsPath: string);
6
+ private readConfig;
7
+ private writeConfig;
8
+ private sortedRecords;
9
+ /** Apply the default 'ready' filter, respecting ListOptions.includePending. */
10
+ private visibleRecords;
11
+ list(_ctx: RequestContext, opts?: ListOptions): Promise<Page<DefinitionRecord>>;
12
+ listByProject(_ctx: RequestContext, projectId: string, opts?: ListOptions): Promise<Page<DefinitionRecord>>;
13
+ listPublic(ctx: RequestContext, opts?: ListOptions): Promise<Page<DefinitionRecord>>;
14
+ get(_ctx: RequestContext, guid: string): Promise<DefinitionRecord | null>;
15
+ create(_ctx: RequestContext, record: DefinitionRecord): Promise<void>;
16
+ update(_ctx: RequestContext, guid: string, patch: DefinitionRecordPatch): Promise<void>;
17
+ addHistoryEntry(_ctx: RequestContext, guid: string, entry: HistoryEntry): Promise<void>;
18
+ removeHistoryEntry(_ctx: RequestContext, guid: string, ref: string): Promise<void>;
19
+ delete(_ctx: RequestContext, guid: string): Promise<void>;
20
+ listStalePending(_ctx: RequestContext, olderThanIso: string): Promise<DefinitionRecord[]>;
21
+ }
22
+ //# sourceMappingURL=LocalDefinitionMetaProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalDefinitionMetaProvider.d.ts","sourceRoot":"","sources":["../../src/data/LocalDefinitionMetaProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,IAAI,EACJ,MAAM,iBAAiB,CAAC;AAQzB,qBAAa,2BAA4B,YAAW,gBAAgB;IACnE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,2BAA2B;gBAKxE,eAAe,EAAE,MAAM;YAIrB,UAAU;YAgBV,WAAW;IAOzB,OAAO,CAAC,aAAa;IAgBrB,+EAA+E;IAC/E,OAAO,CAAC,cAAc;IAMhB,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAM/E,aAAa,CAClB,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAS5B,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAIpF,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAKzE,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrE,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvF,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvF,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASlF,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzD,gBAAgB,CACrB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAM9B"}
@@ -0,0 +1,131 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { ProviderError } from '@selva/platform';
4
+ import { paginate } from '../pagination.js';
5
+ export class LocalDefinitionMetaProvider {
6
+ configPath;
7
+ static fromEnv(env) {
8
+ if (!env.DATA_PATH)
9
+ throw new Error('Missing required env var: DATA_PATH');
10
+ return new LocalDefinitionMetaProvider(env.DATA_PATH);
11
+ }
12
+ constructor(definitionsPath) {
13
+ this.configPath = path.join(definitionsPath, 'definitions-config.json');
14
+ }
15
+ async readConfig() {
16
+ try {
17
+ const content = await fs.readFile(this.configPath, 'utf-8');
18
+ const parsed = JSON.parse(content);
19
+ // Backfill status for records written before Phase 4 landed.
20
+ // Anything on disk is by definition fully written, so treat as 'ready'.
21
+ for (const record of Object.values(parsed.definitions)) {
22
+ if (record && !record.status)
23
+ record.status = 'ready';
24
+ }
25
+ return parsed;
26
+ }
27
+ catch (err) {
28
+ if (err.code === 'ENOENT')
29
+ return { definitions: {} };
30
+ throw err;
31
+ }
32
+ }
33
+ async writeConfig(config) {
34
+ await fs.mkdir(path.dirname(this.configPath), { recursive: true });
35
+ const tmpPath = `${this.configPath}.tmp`;
36
+ await fs.writeFile(tmpPath, JSON.stringify(config, null, '\t'), 'utf-8');
37
+ await fs.rename(tmpPath, this.configPath);
38
+ }
39
+ sortedRecords(records, opts) {
40
+ const field = opts?.orderBy ?? 'name';
41
+ const dir = opts?.orderDir ?? 'asc';
42
+ const mul = dir === 'asc' ? 1 : -1;
43
+ return [...records].sort((a, b) => {
44
+ if (field === 'name') {
45
+ return a.meta.displayName.localeCompare(b.meta.displayName) * mul;
46
+ }
47
+ const av = a[field] ?? '';
48
+ const bv = b[field] ?? '';
49
+ if (av < bv)
50
+ return -1 * mul;
51
+ if (av > bv)
52
+ return 1 * mul;
53
+ return 0;
54
+ });
55
+ }
56
+ /** Apply the default 'ready' filter, respecting ListOptions.includePending. */
57
+ visibleRecords(records, opts) {
58
+ const filtered = records.filter((r) => r?.meta?.displayName);
59
+ if (opts?.includePending)
60
+ return filtered;
61
+ return filtered.filter((r) => r.status === 'ready');
62
+ }
63
+ async list(_ctx, opts) {
64
+ const config = await this.readConfig();
65
+ const records = this.visibleRecords(Object.values(config.definitions), opts);
66
+ return paginate(this.sortedRecords(records, opts), opts);
67
+ }
68
+ async listByProject(_ctx, projectId, opts) {
69
+ const config = await this.readConfig();
70
+ const records = this.visibleRecords(Object.values(config.definitions).filter((r) => r?.projectId === projectId), opts);
71
+ return paginate(this.sortedRecords(records, opts), opts);
72
+ }
73
+ async listPublic(ctx, opts) {
74
+ return this.list(ctx, opts);
75
+ }
76
+ async get(_ctx, guid) {
77
+ const config = await this.readConfig();
78
+ return config.definitions[guid] ?? null;
79
+ }
80
+ async create(_ctx, record) {
81
+ const config = await this.readConfig();
82
+ config.definitions[record.guid] = record;
83
+ await this.writeConfig(config);
84
+ }
85
+ async update(_ctx, guid, patch) {
86
+ const config = await this.readConfig();
87
+ const existing = config.definitions[guid];
88
+ if (!existing)
89
+ throw new ProviderError(`Definition '${guid}' not found`, 404);
90
+ config.definitions[guid] = {
91
+ ...existing,
92
+ ...(patch.fileExt !== undefined && { fileExt: patch.fileExt }),
93
+ ...(patch.maxHistory !== undefined && { maxHistory: patch.maxHistory }),
94
+ ...(patch.projectId !== undefined && { projectId: patch.projectId }),
95
+ ...(patch.computeServerId !== undefined && {
96
+ computeServerId: patch.computeServerId ?? undefined
97
+ }),
98
+ ...(patch.status !== undefined && { status: patch.status }),
99
+ meta: patch.meta ? { ...existing.meta, ...patch.meta } : existing.meta,
100
+ updatedAt: new Date().toISOString()
101
+ };
102
+ await this.writeConfig(config);
103
+ }
104
+ async addHistoryEntry(_ctx, guid, entry) {
105
+ const config = await this.readConfig();
106
+ const existing = config.definitions[guid];
107
+ if (!existing)
108
+ throw new ProviderError(`Definition '${guid}' not found`, 404);
109
+ const history = [entry, ...existing.history];
110
+ existing.history = existing.maxHistory > 0 ? history.slice(0, existing.maxHistory) : history;
111
+ await this.writeConfig(config);
112
+ }
113
+ async removeHistoryEntry(_ctx, guid, ref) {
114
+ const config = await this.readConfig();
115
+ const existing = config.definitions[guid];
116
+ if (!existing)
117
+ throw new ProviderError(`Definition '${guid}' not found`, 404);
118
+ existing.history = existing.history.filter((e) => e.ref !== ref);
119
+ await this.writeConfig(config);
120
+ }
121
+ async delete(_ctx, guid) {
122
+ const config = await this.readConfig();
123
+ delete config.definitions[guid];
124
+ await this.writeConfig(config);
125
+ }
126
+ async listStalePending(_ctx, olderThanIso) {
127
+ const config = await this.readConfig();
128
+ return Object.values(config.definitions).filter((r) => r?.status === 'pending' && r.createdAt <= olderThanIso);
129
+ }
130
+ }
131
+ //# sourceMappingURL=LocalDefinitionMetaProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalDefinitionMetaProvider.js","sourceRoot":"","sources":["../../src/data/LocalDefinitionMetaProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { IDefinitionStore, IProjectStore, IEventSink, DefinitionRecord, DefinitionRecordPatch, DefinitionVersion, RequestContext, DefinitionListOptions, ListOptions, Page } from '@selvajs/platform';
2
+ export declare class LocalDefinitionStore implements IDefinitionStore {
3
+ private readonly configPath;
4
+ private readonly events;
5
+ private projectProvider?;
6
+ static fromEnv(env: Record<string, string | undefined>): LocalDefinitionStore;
7
+ constructor(definitionsPath: string, projectProvider?: IProjectStore, events?: IEventSink);
8
+ setProjectProvider(projectProvider: IProjectStore): void;
9
+ private readConfig;
10
+ private live;
11
+ private writeConfig;
12
+ private sortedRecords;
13
+ private visibleRecords;
14
+ list(_ctx: RequestContext, opts?: DefinitionListOptions): Promise<Page<DefinitionRecord>>;
15
+ listByProject(_ctx: RequestContext, projectId: string, opts?: DefinitionListOptions): Promise<Page<DefinitionRecord>>;
16
+ listPublic(ctx: RequestContext, opts?: DefinitionListOptions & {
17
+ orgId?: string;
18
+ }): Promise<Page<DefinitionRecord>>;
19
+ get(_ctx: RequestContext, guid: string): Promise<DefinitionRecord | null>;
20
+ create(ctx: RequestContext, record: DefinitionRecord): Promise<void>;
21
+ update(ctx: RequestContext, guid: string, patch: DefinitionRecordPatch): Promise<void>;
22
+ delete(ctx: RequestContext, guid: string): Promise<void>;
23
+ incrementSolveCount(_ctx: RequestContext, guid: string): Promise<void>;
24
+ createVersion(ctx: RequestContext, version: DefinitionVersion): Promise<void>;
25
+ listVersions(_ctx: RequestContext, definitionId: string, opts?: ListOptions): Promise<Page<DefinitionVersion>>;
26
+ getVersion(_ctx: RequestContext, versionId: string): Promise<DefinitionVersion | null>;
27
+ deleteVersion(ctx: RequestContext, versionId: string): Promise<void>;
28
+ setLiveVersion(ctx: RequestContext, definitionId: string, versionId: string): Promise<void>;
29
+ setDraftVersion(ctx: RequestContext, definitionId: string, versionId: string): Promise<void>;
30
+ attachInitialVersion(ctx: RequestContext, definitionId: string, versionId: string): Promise<void>;
31
+ private repoint;
32
+ }
33
+ //# sourceMappingURL=LocalDefinitionStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalDefinitionStore.d.ts","sourceRoot":"","sources":["../../src/data/LocalDefinitionStore.ts"],"names":[],"mappings":"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"}