@riffdb/better-auth 0.0.0-stage → 0.2.1

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 (226) hide show
  1. package/DESIGN.md +273 -0
  2. package/LICENSE-APACHE +201 -0
  3. package/LICENSE-MIT +27 -0
  4. package/README.md +323 -2
  5. package/dist/adapter.d.ts +34 -0
  6. package/dist/adapter.d.ts.map +1 -0
  7. package/dist/adapter.js +1600 -0
  8. package/dist/adapter.js.map +1 -0
  9. package/dist/generated/client.d.ts +2166 -0
  10. package/dist/generated/client.d.ts.map +1 -0
  11. package/dist/generated/client.js +2454 -0
  12. package/dist/generated/client.js.map +1 -0
  13. package/dist/index.d.ts +7 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +7 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/plugin-dispatch.d.ts +37 -0
  18. package/dist/plugin-dispatch.d.ts.map +1 -0
  19. package/dist/plugin-dispatch.js +293 -0
  20. package/dist/plugin-dispatch.js.map +1 -0
  21. package/dist/profile-contract.d.ts +63 -0
  22. package/dist/profile-contract.d.ts.map +1 -0
  23. package/dist/profile-contract.js +543 -0
  24. package/dist/profile-contract.js.map +1 -0
  25. package/dist/profile-plan.d.ts +69 -0
  26. package/dist/profile-plan.d.ts.map +1 -0
  27. package/dist/profile-plan.js +180 -0
  28. package/dist/profile-plan.js.map +1 -0
  29. package/dist/profile.d.ts +48 -0
  30. package/dist/profile.d.ts.map +1 -0
  31. package/dist/profile.js +132 -0
  32. package/dist/profile.js.map +1 -0
  33. package/dist/profiles/custom-fields/profile.d.ts +3 -0
  34. package/dist/profiles/custom-fields/profile.d.ts.map +1 -0
  35. package/dist/profiles/custom-fields/profile.js +475 -0
  36. package/dist/profiles/custom-fields/profile.js.map +1 -0
  37. package/dist/profiles/custom-fields/src/generated/client.d.ts +2710 -0
  38. package/dist/profiles/custom-fields/src/generated/client.d.ts.map +1 -0
  39. package/dist/profiles/custom-fields/src/generated/client.js +2663 -0
  40. package/dist/profiles/custom-fields/src/generated/client.js.map +1 -0
  41. package/dist/profiles/runtime/profile.d.ts +3 -0
  42. package/dist/profiles/runtime/profile.d.ts.map +1 -0
  43. package/dist/profiles/runtime/profile.js +1065 -0
  44. package/dist/profiles/runtime/profile.js.map +1 -0
  45. package/dist/profiles/runtime/src/generated/client.d.ts +4274 -0
  46. package/dist/profiles/runtime/src/generated/client.d.ts.map +1 -0
  47. package/dist/profiles/runtime/src/generated/client.js +4607 -0
  48. package/dist/profiles/runtime/src/generated/client.js.map +1 -0
  49. package/dist/runtime-materialize.d.ts +10 -0
  50. package/dist/runtime-materialize.d.ts.map +1 -0
  51. package/dist/runtime-materialize.js +344 -0
  52. package/dist/runtime-materialize.js.map +1 -0
  53. package/dist/runtime-profile.d.ts +34 -0
  54. package/dist/runtime-profile.d.ts.map +1 -0
  55. package/dist/runtime-profile.js +203 -0
  56. package/dist/runtime-profile.js.map +1 -0
  57. package/dist/testing.d.ts +11 -0
  58. package/dist/testing.d.ts.map +1 -0
  59. package/dist/testing.js +12 -0
  60. package/dist/testing.js.map +1 -0
  61. package/generated/go/client.go +2250 -0
  62. package/generated/mcp/tools.json +13922 -0
  63. package/generated/python/client.py +4454 -0
  64. package/generated/riffdb.application.exact.json +1 -0
  65. package/generated/riffdb.contract.bundle +0 -0
  66. package/generated/rust/client.rs +6524 -0
  67. package/package.json +83 -4
  68. package/profiles/custom-fields/generated/go/client.go +2578 -0
  69. package/profiles/custom-fields/generated/mcp/tools.json +15998 -0
  70. package/profiles/custom-fields/generated/python/client.py +5141 -0
  71. package/profiles/custom-fields/generated/riffdb.application.exact.json +1 -0
  72. package/profiles/custom-fields/generated/riffdb.contract.bundle +0 -0
  73. package/profiles/custom-fields/generated/rust/client.rs +7980 -0
  74. package/profiles/custom-fields/profile.ts +474 -0
  75. package/profiles/custom-fields/riffdb/contract.riff +568 -0
  76. package/profiles/custom-fields/riffdb/queries/admin_users_all_email_asc.riffq +24 -0
  77. package/profiles/custom-fields/riffdb/queries/admin_users_contains_asc.riffq +24 -0
  78. package/profiles/custom-fields/riffdb/queries/admin_users_contains_desc.riffq +24 -0
  79. package/profiles/custom-fields/riffdb/queries/admin_users_email_contains_created_desc.riffq +24 -0
  80. package/profiles/custom-fields/riffdb/queries/admin_users_email_contains_image_asc.riffq +24 -0
  81. package/profiles/custom-fields/riffdb/queries/admin_users_ends_with_asc.riffq +24 -0
  82. package/profiles/custom-fields/riffdb/queries/admin_users_ends_with_desc.riffq +24 -0
  83. package/profiles/custom-fields/riffdb/queries/admin_users_starts_with_asc.riffq +24 -0
  84. package/profiles/custom-fields/riffdb/queries/admin_users_starts_with_desc.riffq +24 -0
  85. package/profiles/custom-fields/riffdb/queries/find_account_by_id.riffq +24 -0
  86. package/profiles/custom-fields/riffdb/queries/find_account_by_provider.riffq +26 -0
  87. package/profiles/custom-fields/riffdb/queries/find_accounts_by_user_id.riffq +25 -0
  88. package/profiles/custom-fields/riffdb/queries/find_accounts_by_user_provider.riffq +27 -0
  89. package/profiles/custom-fields/riffdb/queries/find_active_sessions_by_user_id.riffq +23 -0
  90. package/profiles/custom-fields/riffdb/queries/find_credential_account.riffq +25 -0
  91. package/profiles/custom-fields/riffdb/queries/find_expired_verification_ids.riffq +17 -0
  92. package/profiles/custom-fields/riffdb/queries/find_latest_verification.riffq +20 -0
  93. package/profiles/custom-fields/riffdb/queries/find_session_by_id.riffq +20 -0
  94. package/profiles/custom-fields/riffdb/queries/find_session_by_token.riffq +20 -0
  95. package/profiles/custom-fields/riffdb/queries/find_sessions_by_token_set.riffq +20 -0
  96. package/profiles/custom-fields/riffdb/queries/find_sessions_by_user_id.riffq +21 -0
  97. package/profiles/custom-fields/riffdb/queries/find_user_by_email.riffq +16 -0
  98. package/profiles/custom-fields/riffdb/queries/find_user_by_id.riffq +15 -0
  99. package/profiles/custom-fields/riffdb/queries/find_verification_by_id.riffq +19 -0
  100. package/profiles/custom-fields/riffdb/queries/find_verifications_by_identifier.riffq +21 -0
  101. package/profiles/custom-fields/riffdb/queries/profile_account_with_user_by_provider.riffq +31 -0
  102. package/profiles/custom-fields/riffdb/queries/profile_session_with_user_by_id.riffq +14 -0
  103. package/profiles/custom-fields/riffdb/queries/profile_session_with_user_by_token.riffq +14 -0
  104. package/profiles/custom-fields/riffdb/queries/profile_sessions_with_users_by_token_set.riffq +25 -0
  105. package/profiles/custom-fields/riffdb/queries/profile_user_with_accounts_by_email.riffq +19 -0
  106. package/profiles/custom-fields/riffdb/queries/profile_user_with_accounts_by_id.riffq +19 -0
  107. package/profiles/custom-fields/riffdb.application.json +217 -0
  108. package/profiles/custom-fields/riffdb.application.lock.json +1 -0
  109. package/profiles/custom-fields/riffdb.toml +3 -0
  110. package/profiles/custom-fields/src/generated/client.ts +3096 -0
  111. package/profiles/organization-security/materialization.json +51 -0
  112. package/profiles/organization-security/riffdb/contract.riff +778 -0
  113. package/profiles/organization-security/riffdb/queries/find_account_by_id.riffq +18 -0
  114. package/profiles/organization-security/riffdb/queries/find_invitation_by_email.riffq +17 -0
  115. package/profiles/organization-security/riffdb/queries/find_invitation_by_id.riffq +18 -0
  116. package/profiles/organization-security/riffdb/queries/find_invitation_by_organization_id.riffq +17 -0
  117. package/profiles/organization-security/riffdb/queries/find_member_by_id.riffq +18 -0
  118. package/profiles/organization-security/riffdb/queries/find_member_by_user_id.riffq +17 -0
  119. package/profiles/organization-security/riffdb/queries/find_organization_by_id.riffq +16 -0
  120. package/profiles/organization-security/riffdb/queries/find_organization_by_slug.riffq +16 -0
  121. package/profiles/organization-security/riffdb/queries/find_session_by_id.riffq +18 -0
  122. package/profiles/organization-security/riffdb/queries/find_session_by_token.riffq +16 -0
  123. package/profiles/organization-security/riffdb/queries/find_team_by_id.riffq +18 -0
  124. package/profiles/organization-security/riffdb/queries/find_team_member_by_id.riffq +18 -0
  125. package/profiles/organization-security/riffdb/queries/find_team_member_by_membership_key.riffq +16 -0
  126. package/profiles/organization-security/riffdb/queries/find_team_member_by_team_id.riffq +17 -0
  127. package/profiles/organization-security/riffdb/queries/find_two_factor_by_id.riffq +18 -0
  128. package/profiles/organization-security/riffdb/queries/find_two_factor_by_secret.riffq +17 -0
  129. package/profiles/organization-security/riffdb/queries/find_user_by_email.riffq +16 -0
  130. package/profiles/organization-security/riffdb/queries/find_user_by_id.riffq +16 -0
  131. package/profiles/organization-security/riffdb/queries/find_verification_by_id.riffq +16 -0
  132. package/profiles/organization-security/riffdb/queries/find_verification_by_identifier.riffq +17 -0
  133. package/profiles/organization-security/riffdb.application.json +172 -0
  134. package/profiles/organization-security/riffdb.toml +7 -0
  135. package/profiles/organization-security.profile.json +980 -0
  136. package/profiles/runtime/generated/go/client.go +4511 -0
  137. package/profiles/runtime/generated/mcp/tools.json +30004 -0
  138. package/profiles/runtime/generated/python/client.py +9337 -0
  139. package/profiles/runtime/generated/riffdb.application.exact.json +1 -0
  140. package/profiles/runtime/generated/riffdb.contract.bundle +0 -0
  141. package/profiles/runtime/generated/rust/client.rs +13297 -0
  142. package/profiles/runtime/profile.ts +1064 -0
  143. package/profiles/runtime/riffdb/contract.riff +1053 -0
  144. package/profiles/runtime/riffdb/queries/admin_users_all_email_asc.riffq +24 -0
  145. package/profiles/runtime/riffdb/queries/admin_users_contains_asc.riffq +24 -0
  146. package/profiles/runtime/riffdb/queries/admin_users_contains_desc.riffq +24 -0
  147. package/profiles/runtime/riffdb/queries/admin_users_email_contains_created_desc.riffq +24 -0
  148. package/profiles/runtime/riffdb/queries/admin_users_email_contains_image_asc.riffq +24 -0
  149. package/profiles/runtime/riffdb/queries/admin_users_ends_with_asc.riffq +24 -0
  150. package/profiles/runtime/riffdb/queries/admin_users_ends_with_desc.riffq +24 -0
  151. package/profiles/runtime/riffdb/queries/admin_users_starts_with_asc.riffq +24 -0
  152. package/profiles/runtime/riffdb/queries/admin_users_starts_with_desc.riffq +24 -0
  153. package/profiles/runtime/riffdb/queries/find_account_by_id.riffq +24 -0
  154. package/profiles/runtime/riffdb/queries/find_account_by_provider.riffq +26 -0
  155. package/profiles/runtime/riffdb/queries/find_accounts_by_user_id.riffq +25 -0
  156. package/profiles/runtime/riffdb/queries/find_accounts_by_user_provider.riffq +27 -0
  157. package/profiles/runtime/riffdb/queries/find_active_sessions_by_user_id.riffq +23 -0
  158. package/profiles/runtime/riffdb/queries/find_credential_account.riffq +25 -0
  159. package/profiles/runtime/riffdb/queries/find_expired_verification_ids.riffq +17 -0
  160. package/profiles/runtime/riffdb/queries/find_latest_verification.riffq +20 -0
  161. package/profiles/runtime/riffdb/queries/find_session_by_id.riffq +20 -0
  162. package/profiles/runtime/riffdb/queries/find_session_by_token.riffq +20 -0
  163. package/profiles/runtime/riffdb/queries/find_sessions_by_token_set.riffq +20 -0
  164. package/profiles/runtime/riffdb/queries/find_sessions_by_user_id.riffq +21 -0
  165. package/profiles/runtime/riffdb/queries/find_user_by_email.riffq +16 -0
  166. package/profiles/runtime/riffdb/queries/find_user_by_id.riffq +15 -0
  167. package/profiles/runtime/riffdb/queries/find_verification_by_id.riffq +19 -0
  168. package/profiles/runtime/riffdb/queries/find_verifications_by_identifier.riffq +21 -0
  169. package/profiles/runtime/riffdb/queries/profile_account_with_user_by_provider.riffq +31 -0
  170. package/profiles/runtime/riffdb/queries/profile_invitation_by_email.riffq +17 -0
  171. package/profiles/runtime/riffdb/queries/profile_invitation_by_id.riffq +17 -0
  172. package/profiles/runtime/riffdb/queries/profile_invitation_by_organization_email_status.riffq +19 -0
  173. package/profiles/runtime/riffdb/queries/profile_invitation_by_organization_id.riffq +17 -0
  174. package/profiles/runtime/riffdb/queries/profile_invitation_by_organization_status.riffq +18 -0
  175. package/profiles/runtime/riffdb/queries/profile_member_by_id.riffq +27 -0
  176. package/profiles/runtime/riffdb/queries/profile_member_by_organization.riffq +20 -0
  177. package/profiles/runtime/riffdb/queries/profile_member_by_organization_created_at_asc.riffq +20 -0
  178. package/profiles/runtime/riffdb/queries/profile_member_by_organization_created_at_desc.riffq +20 -0
  179. package/profiles/runtime/riffdb/queries/profile_member_by_organization_role_asc.riffq +20 -0
  180. package/profiles/runtime/riffdb/queries/profile_member_by_organization_role_desc.riffq +20 -0
  181. package/profiles/runtime/riffdb/queries/profile_member_by_organization_user.riffq +28 -0
  182. package/profiles/runtime/riffdb/queries/profile_member_by_user.riffq +27 -0
  183. package/profiles/runtime/riffdb/queries/profile_organization_by_id.riffq +27 -0
  184. package/profiles/runtime/riffdb/queries/profile_organization_by_slug.riffq +27 -0
  185. package/profiles/runtime/riffdb/queries/profile_session_with_user_by_id.riffq +14 -0
  186. package/profiles/runtime/riffdb/queries/profile_session_with_user_by_token.riffq +14 -0
  187. package/profiles/runtime/riffdb/queries/profile_sessions_with_users_by_token_set.riffq +25 -0
  188. package/profiles/runtime/riffdb/queries/profile_two_factor_by_id.riffq +17 -0
  189. package/profiles/runtime/riffdb/queries/profile_two_factor_by_user.riffq +17 -0
  190. package/profiles/runtime/riffdb/queries/profile_user_with_accounts_by_email.riffq +19 -0
  191. package/profiles/runtime/riffdb/queries/profile_user_with_accounts_by_id.riffq +19 -0
  192. package/profiles/runtime/riffdb/queries/profile_users_by_id_set.riffq +8 -0
  193. package/profiles/runtime/riffdb.application.json +324 -0
  194. package/profiles/runtime/riffdb.application.lock.json +1 -0
  195. package/profiles/runtime/riffdb.toml +3 -0
  196. package/profiles/runtime/src/generated/client.ts +5186 -0
  197. package/riffdb/contract.riff +547 -0
  198. package/riffdb/queries/admin_users_all_email_asc.riffq +24 -0
  199. package/riffdb/queries/admin_users_contains_asc.riffq +24 -0
  200. package/riffdb/queries/admin_users_contains_desc.riffq +24 -0
  201. package/riffdb/queries/admin_users_email_contains_created_desc.riffq +24 -0
  202. package/riffdb/queries/admin_users_email_contains_image_asc.riffq +24 -0
  203. package/riffdb/queries/admin_users_ends_with_asc.riffq +24 -0
  204. package/riffdb/queries/admin_users_ends_with_desc.riffq +24 -0
  205. package/riffdb/queries/admin_users_starts_with_asc.riffq +24 -0
  206. package/riffdb/queries/admin_users_starts_with_desc.riffq +24 -0
  207. package/riffdb/queries/find_account_by_id.riffq +24 -0
  208. package/riffdb/queries/find_account_by_provider.riffq +26 -0
  209. package/riffdb/queries/find_accounts_by_user_id.riffq +25 -0
  210. package/riffdb/queries/find_accounts_by_user_provider.riffq +27 -0
  211. package/riffdb/queries/find_active_sessions_by_user_id.riffq +23 -0
  212. package/riffdb/queries/find_credential_account.riffq +25 -0
  213. package/riffdb/queries/find_expired_verification_ids.riffq +17 -0
  214. package/riffdb/queries/find_latest_verification.riffq +20 -0
  215. package/riffdb/queries/find_session_by_id.riffq +20 -0
  216. package/riffdb/queries/find_session_by_token.riffq +20 -0
  217. package/riffdb/queries/find_sessions_by_token_set.riffq +20 -0
  218. package/riffdb/queries/find_sessions_by_user_id.riffq +21 -0
  219. package/riffdb/queries/find_user_by_email.riffq +16 -0
  220. package/riffdb/queries/find_user_by_id.riffq +15 -0
  221. package/riffdb/queries/find_verification_by_id.riffq +19 -0
  222. package/riffdb/queries/find_verifications_by_identifier.riffq +21 -0
  223. package/riffdb.application.json +187 -0
  224. package/riffdb.application.lock.json +1 -0
  225. package/scripts/real-riffdb-runner.mjs +333 -0
  226. package/src/generated/client.ts +2746 -0
@@ -0,0 +1,10 @@
1
+ import type { RiffDBBetterAuthProfilePlan } from "./profile-plan.js";
2
+ import { type RiffDBProfileQuery } from "./runtime-profile.js";
3
+ export interface RiffDBRuntimeMaterialization {
4
+ readonly files: Readonly<Record<string, string>>;
5
+ readonly queries: readonly RiffDBProfileQuery[];
6
+ }
7
+ export declare const profileColumn: (field: string) => string;
8
+ /** Complete runtime sources for reviewed core extensions, organization (without teams), and 2FA. */
9
+ export declare function materializeRiffDBBetterAuthRuntimeProfile(plan: RiffDBBetterAuthProfilePlan): RiffDBRuntimeMaterialization;
10
+ //# sourceMappingURL=runtime-materialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-materialize.d.ts","sourceRoot":"","sources":["../src/runtime-materialize.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAoC,MAAM,mBAAmB,CAAC;AAEvG,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE7E,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACjD;AAKD,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAAqE,CAAC;AAUpH,oGAAoG;AACpG,wBAAgB,yCAAyC,CAAC,IAAI,EAAE,2BAA2B,GAAG,4BAA4B,CAkTzH"}
@@ -0,0 +1,344 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { getAuthTables } from "better-auth/db";
3
+ import { organization, twoFactor as twoFactorPlugin } from "better-auth/plugins";
4
+ import { defineRiffDBBetterAuthProfilePlan } from "./profile-plan.js";
5
+ import { BETTER_AUTH_CORE_FIELDS, BETTER_AUTH_PINNED_VERSION } from "./profile.js";
6
+ import { storageField } from "./runtime-profile.js";
7
+ const coreModels = ["user", "account", "session", "verification"];
8
+ const entityName = (name) => name[0].toUpperCase() + name.slice(1);
9
+ const key = (model) => model === "organization" ? "org_id" : `${storageField(model)}_id`;
10
+ export const profileColumn = (field) => field === "organizationId" ? "org_id" : storageField(field);
11
+ function fieldType(field) {
12
+ if (typeof field.type !== "string")
13
+ throw new Error("runtime enum fields require a reviewed codec");
14
+ const base = field.reference !== undefined ? "uuid" : { string: `string<${{ email: 320, role: 256, status: 32, name: 256, slug: 256 }[field.name] ?? 2048}>`, boolean: "bool",
15
+ number: "i64", date: "timestamp" }[field.type];
16
+ if (base === undefined)
17
+ throw new Error(`runtime profile field type is not supported: ${field.type}`);
18
+ return field.required || field.name === "failedVerificationCount" || field.name === "verified" ? base : `optional<${base}>`;
19
+ }
20
+ /** Complete runtime sources for reviewed core extensions, organization (without teams), and 2FA. */
21
+ export function materializeRiffDBBetterAuthRuntimeProfile(plan) {
22
+ if (plan.betterAuthVersion !== BETTER_AUTH_PINNED_VERSION || plan.plugins.some((id) => !["organization", "two-factor"].includes(id)) ||
23
+ plan.models.some((model) => ![...coreModels, "organization", "member", "invitation", "twoFactor"].includes(model.name))) {
24
+ throw new Error("unsupported runtime profile");
25
+ }
26
+ const org = plan.plugins.includes("organization");
27
+ const twoFactor = plan.plugins.includes("two-factor");
28
+ const baselineOptions = { advanced: { database: { generateId: "uuid" } },
29
+ plugins: [...(org ? [organization()] : []), ...(twoFactor ? [twoFactorPlugin()] : [])] };
30
+ const baseline = defineRiffDBBetterAuthProfilePlan(baselineOptions, getAuthTables(baselineOptions), {
31
+ name: plan.name, contractLineage: plan.contract.lineage, applicationRole: plan.contract.applicationRole,
32
+ });
33
+ if (JSON.stringify(plan.models.map((model) => model.name)) !== JSON.stringify(baseline.models.map((model) => model.name))) {
34
+ throw new Error("unsupported runtime model inventory");
35
+ }
36
+ for (const model of plan.models) {
37
+ const expected = baseline.models.find((entry) => entry.name === model.name);
38
+ for (const field of expected.fields)
39
+ if (JSON.stringify(model.fields.find((entry) => entry.name === field.name)) !== JSON.stringify(field)) {
40
+ throw new Error("unsupported runtime schema override");
41
+ }
42
+ for (const field of model.fields.filter((field) => !expected.fields.some((entry) => entry.name === field.name))) {
43
+ if (model.name !== "user" || field.indexed || field.unique || field.reference !== undefined) {
44
+ throw new Error("unsupported runtime field extension");
45
+ }
46
+ }
47
+ }
48
+ for (const model of plan.models) {
49
+ if (model.storageName !== model.name || model.fields.some((field) => field.storageName !== field.name)) {
50
+ throw new Error("runtime profiles require default storage names");
51
+ }
52
+ for (const field of model.fields)
53
+ fieldType(field);
54
+ }
55
+ const files = {};
56
+ const base = new URL("../", import.meta.url);
57
+ const application = JSON.parse(readFileSync(new URL("riffdb.application.json", base), "utf8"));
58
+ let contract = readFileSync(new URL("riffdb/contract.riff", base), "utf8")
59
+ .replace("contract RiffDBBetterAuthCore version 1", `contract ${plan.contract.lineage} version 1`);
60
+ const extra = new Map();
61
+ for (const model of coreModels) {
62
+ const fields = plan.models.find((entry) => entry.name === model)?.fields;
63
+ if (fields === undefined)
64
+ throw new Error(`missing runtime profile model: ${model}`);
65
+ const known = BETTER_AUTH_CORE_FIELDS[model];
66
+ extra.set(model, fields.filter((field) => !known.includes(field.name)));
67
+ }
68
+ const declarations = new Map();
69
+ const pattern = /^ (?:(?:bulk )?command|entity|aggregate) (\w+) \{/gmu;
70
+ const starts = [...contract.matchAll(pattern)];
71
+ for (let i = 0; i < starts.length; i += 1) {
72
+ declarations.set(starts[i][1], contract.slice(starts[i].index, starts[i + 1]?.index ?? contract.lastIndexOf("}")).trimEnd());
73
+ }
74
+ for (const model of coreModels) {
75
+ const entity = entityName(model);
76
+ const fields = extra.get(model);
77
+ let source = declarations.get(entity);
78
+ const inserted = fields.map((field) => ` field ${field.secret ? "secret " : ""}${storageField(field.name)}: ${fieldType(field)}`).join("\n");
79
+ source = source.replace(/ (unique|index|delete_policy)/u, `${inserted}${inserted ? "\n" : ""} $1`);
80
+ if (model === "user" && fields.length > 0)
81
+ source = source.replace(/cover\(([^)]+)\)/gu, (_match, cover) => `cover(${cover}, ${fields.map((field) => storageField(field.name)).join(", ")})`);
82
+ if (model === "user")
83
+ source = source.replace(" unique user_email", " index by_id (organization_id, user_id)\n unique user_email");
84
+ declarations.set(entity, source);
85
+ for (const command of [`Create${entity}`, `Update${entity}`,
86
+ ...(model === "user" || model === "account" ? ["CreateSignupGraph", "CreateOAuthUserGraph"] : model === "session" ? ["CreateSignupGraph"] : [])]) {
87
+ let body = declarations.get(command);
88
+ const graph = command.endsWith("Graph");
89
+ const binding = model;
90
+ const inputs = fields.map((field) => ` input ${graph ? `${model}_` : ""}${storageField(field.name)}: ${fieldType(field)}`).join("\n");
91
+ body = body.replace(" idempotency_key", `${inputs}${inputs ? "\n" : ""} idempotency_key`);
92
+ const assignments = fields.map((field) => ` set ${binding}.${storageField(field.name)} = ${graph ? `${model}_` : ""}${storageField(field.name)}${command.startsWith("Update") && model !== "user" && model !== "verification" ? " checked_by current_revision" : ""}`).join("\n");
93
+ body = body.replace(` set ${binding}.revision =`, `${assignments}${assignments ? "\n" : ""} set ${binding}.revision =`);
94
+ if (command.startsWith("Update") && (model === "user" || model === "verification"))
95
+ body = body.replace(new RegExp(`( set ${model}\\.(?!revision)[^\\n]+)`, "gu"), "$1 checked_by current_revision");
96
+ declarations.set(command, body);
97
+ }
98
+ }
99
+ for (const query of application.query_modules[0].queries) {
100
+ let source = readFileSync(new URL(query.source, base), "utf8");
101
+ for (const model of coreModels) {
102
+ source = source.replace(new RegExp(`\\b(${model}s?): (${model}s?) \\{([^{}]*)\\}`, "gu"), (_match, label, alias, projection) => {
103
+ const fields = extra.get(model);
104
+ const leaves = fields.map((field) => `${storageField(field.name)}${field.secret ? ` reveals ${alias}.${storageField(field.name)}` : ""}`).join(" ");
105
+ return `${label}: ${alias} {${projection} ${leaves} }`;
106
+ });
107
+ }
108
+ files[query.source] = source;
109
+ }
110
+ // Shared tenant ownership lets organization relationships retain both
111
+ // foreign-key proofs. Organization profiles omit user deletion: the current
112
+ // compiler cannot admit commands binding two cascade-policy entities.
113
+ declarations.delete("UserAuthData");
114
+ declarations.delete("VerificationData");
115
+ if (org) {
116
+ declarations.set("User", declarations.get("User").replace(/ delete_policy cascade \{[^}]*\}/u, ""));
117
+ declarations.delete("DeleteUser");
118
+ }
119
+ else if (twoFactor) {
120
+ declarations.set("User", declarations.get("User").replace(" delete_policy cascade {", " delete_policy cascade {\n relationship TwoFactor.two_factor_user using TwoFactor.by_user_id maximum 1"));
121
+ }
122
+ declarations.set("Tenant", " entity Tenant {\n key (organization_id: uuid)\n delete_policy no_inbound\n }");
123
+ const plugins = plan.models.filter((model) => !coreModels.includes(model.name));
124
+ const projection = (model, alias) => {
125
+ const fields = plan.models.find((entry) => entry.name === model).fields;
126
+ return [key(model), ...fields.map((field) => `${profileColumn(field.name)}${field.secret && field.reference === undefined ? ` reveals ${alias}.${profileColumn(field.name)}` : ""}`), "revision"].join(" ");
127
+ };
128
+ for (const model of plugins) {
129
+ const entity = entityName(model.name);
130
+ const columns = model.fields.map((field) => ` field ${field.secret && field.reference === undefined ? "secret " : ""}${profileColumn(field.name)}: ${fieldType(field)}`);
131
+ if (model.name === "organization")
132
+ columns.push(" field member_count: i64", " field invitation_count: i64");
133
+ if (model.name === "twoFactor")
134
+ columns.push(" field locked_until_millis: i64");
135
+ const indexes = model.fields.filter((field) => field.reference !== undefined || (!field.secret && (field.indexed || field.unique)))
136
+ .map((field) => ` index by_${profileColumn(field.name)} (organization_id, ${profileColumn(field.name)}, ${key(model.name)})${field.type === "string" && field.reference === undefined ? ` text_key(${profileColumn(field.name)}, binary_utf8_v1)` : ""}`);
137
+ const references = model.fields.filter((field) => field.reference !== undefined).map((field) => ` reference ${storageField(model.name)}_${field.name === "userId" ? "user" : storageField(field.name)} (organization_id, ${profileColumn(field.name)}) -> ${entityName(field.reference.model)}(organization_id, ${field.reference.model === "user" ? "user_id" : key(field.reference.model)})`);
138
+ const unique = model.fields.filter((field) => field.unique).map((field) => ` unique unique_${profileColumn(field.name)} (organization_id, ${profileColumn(field.name)})`);
139
+ if (model.name === "member") {
140
+ indexes.push(" index by_role (organization_id, role, member_id) text_key(role, binary_utf8_v1)", " index by_created_at (organization_id, created_at, member_id)");
141
+ unique.push(" unique membership (organization_id, org_id, user_id)");
142
+ indexes.push(" index by_org_user (organization_id, org_id, user_id, member_id)");
143
+ for (const name of ["role", "created_at"])
144
+ indexes.push(` index by_org_${name} (organization_id, org_id, ${name}, member_id)${name === "role" ? " text_key(role, binary_utf8_v1)" : ""}`);
145
+ }
146
+ if (model.name === "invitation") {
147
+ indexes.push(" index by_org_status (organization_id, org_id, status, invitation_id)", " index by_org_email_status (organization_id, org_id, email, status, invitation_id)");
148
+ }
149
+ if (model.name === "twoFactor")
150
+ unique.push(" unique two_factor_user (organization_id, user_id)");
151
+ const policy = model.name === "organization" ? ` delete_policy cascade {\n relationship Member.member_organization_id using Member.by_org_id maximum 100\n relationship Invitation.invitation_organization_id using Invitation.by_org_id maximum 100\n }` : " delete_policy no_inbound";
152
+ declarations.set(entity, [` entity ${entity} {`, ` key (organization_id: uuid, ${key(model.name)}: uuid)`, ...columns,
153
+ " field revision: u64", ...unique, ...indexes, ...references, policy, " }"].join("\n"));
154
+ const inputs = model.fields.map((field) => ` input ${profileColumn(field.name)}: ${fieldType(field)}`);
155
+ if (model.name === "twoFactor")
156
+ inputs.push(" input locked_until_millis: i64");
157
+ const parentReads = model.fields.filter((field) => field.reference !== undefined).map((field) => ` read ${entityName(field.reference.model)}(organization_id, ${profileColumn(field.name)}) as parent_${profileColumn(field.name)} else ${entity}ParentMissing {}`);
158
+ const setters = model.fields.map((field) => ` set record.${profileColumn(field.name)} = ${profileColumn(field.name)}`);
159
+ if (model.name === "twoFactor")
160
+ setters.push(" set record.locked_until_millis = locked_until_millis");
161
+ const initialCounters = model.name === "organization" ? [" set record.member_count = 0", " set record.invitation_count = 0"] : [];
162
+ declarations.set(`Create${entity}`, [` command Create${entity} {`, " input request_id: uuid", " input organization_id: uuid",
163
+ ` input ${key(model.name)}: uuid`, ...inputs, " idempotency_key request_id", ...parentReads,
164
+ ` create ${entity}(organization_id, ${key(model.name)}) as record else ${entity}AlreadyExists {}`,
165
+ ...setters, ...initialCounters, " set record.revision = 1", ` return ${entity}Created {}`, " }"].join("\n"));
166
+ declarations.set(`Update${entity}`, [` command Update${entity} {`, " input request_id: uuid", " input organization_id: uuid",
167
+ ` input ${key(model.name)}: uuid`, " input expected_revision: u64", ...inputs, " idempotency_key request_id", ...parentReads,
168
+ ` mutate ${entity}(organization_id, ${key(model.name)}) as record else ${entity}Missing {}`,
169
+ " require current_revision: record.revision == expected_revision else Stale {}",
170
+ ...setters.map((line) => `${line} checked_by current_revision`), " set record.revision = record.revision + 1",
171
+ ` return ${entity}Updated {}`, " }"].join("\n"));
172
+ declarations.set(`Delete${entity}`, [` bulk command Delete${entity} {`, " input request_id: uuid", " input organization_id: uuid",
173
+ ` input ids: list<uuid, 1..${model.name === "organization" ? 1 : 100}>`, " idempotency_key request_id", " for id in ids {",
174
+ ` delete ${entity}(organization_id, id) as record else ${entity}Missing {}`,
175
+ ...(model.name === "organization" ? [" cascade CascadeLimitExceeded {}"] : []), " }", ` return ${entity}Deleted {}`, " }"].join("\n"));
176
+ }
177
+ if (org) {
178
+ for (const [model, counter] of [["Member", "member_count"], ["Invitation", "invitation_count"]]) {
179
+ let create = declarations.get(`Create${model}`);
180
+ create = create.replace(" read Organization(organization_id, org_id) as parent_org_id", " mutate Organization(organization_id, org_id) as parent_org_id");
181
+ create = create.replace(" set record.", ` require capacity: parent_org_id.${counter} < 100 else CapacityExceeded {}\n set record.`);
182
+ create = create.replace(` return ${model}Created {}`, ` set parent_org_id.${counter} = parent_org_id.${counter} + 1\n set parent_org_id.revision = parent_org_id.revision + 1\n return ${model}Created {}`);
183
+ declarations.set(`Create${model}`, create);
184
+ const deletion = [
185
+ ` bulk command Delete${model} {`, " input request_id: uuid", " input organization_id: uuid",
186
+ " input org_id: uuid", " input ids: list<uuid, 1..1>", " idempotency_key request_id",
187
+ " mutate Organization(organization_id, org_id) as parent else OrganizationMissing {}",
188
+ " for id in ids {", ` delete ${model}(organization_id, id) as record else ${model}Missing {}`,
189
+ " require same_organization: record.org_id == org_id else OrganizationMismatch {}", " }",
190
+ ` require counted: parent.${counter} > 0 else CounterInconsistent {}`,
191
+ ` set parent.${counter} = parent.${counter} - 1 checked_by counted`, " set parent.revision = parent.revision + 1",
192
+ ` return ${model}Deleted {}`, " }",
193
+ ].join("\n");
194
+ declarations.set(`Delete${model}`, deletion);
195
+ }
196
+ }
197
+ const entities = [...declarations.values()].filter((source) => source.startsWith(" entity"));
198
+ declarations.set("TenantData", [" aggregate TenantData {", " root Tenant",
199
+ ...entities.filter((source) => !source.startsWith(" entity Tenant ")).map((source) => ` child ${/^ entity (\w+)/u.exec(source)[1]}`),
200
+ " partition_by organization_id", " conflict_key (organization_id)", " }"].join("\n"));
201
+ const queries = [];
202
+ const addQuery = (model, suffix, where, order = null) => {
203
+ const entity = entityName(model);
204
+ const name = `Profile${entity}${suffix}`;
205
+ const conditions = where.map((clause) => `${clause.field === "id" ? key(model) : profileColumn(clause.field)} ${clause.operator === "in" ? "in" : "=="} $${profileColumn(clause.field)}`);
206
+ const params = where.map((clause) => `$${profileColumn(clause.field)}: ${clause.operator === "in" ? "Set<" : ""}${entity}.${clause.field === "id" ? key(model) : profileColumn(clause.field)}${clause.operator === "in" ? ">" : ""}`);
207
+ const ordered = order === null ? `${key(model)} asc` : `${profileColumn(order[0])} ${order[1]}, ${key(model)} asc`;
208
+ const counted = model === "member" && where.length === 1 && where[0]?.field === "organizationId";
209
+ if (counted) {
210
+ conditions.push("role >= $minimum_role");
211
+ params.push("$minimum_role: Member.role = \"\"");
212
+ }
213
+ const effectiveOrder = counted && order === null ? "role asc, member_id asc" : ordered;
214
+ const hydrate = model === "member" && !counted ? "member" : model === "organization" && where[0]?.operator !== "in" ? "organization" : undefined;
215
+ let body;
216
+ if (hydrate === "organization") {
217
+ body = ` one record from Organization\n where organization_id == $organization_id && ${conditions.join(" && ")}\n else Missing\n\n` +
218
+ ["member", "invitation"].map((child) => ` many ${child}s from ${entityName(child)}\n where organization_id == $organization_id && org_id == record.org_id\n order by ${key(child)} asc\n take 100\n`).join("\n") +
219
+ `\n return Found {\n record: record { ${projection(model, "record")} }\n members: members { ${projection("member", "members")} }\n invitations: invitations { ${projection("invitation", "invitations")} }\n }\n outcomes Found | Missing`;
220
+ }
221
+ else {
222
+ body = ` many rows from ${entity}\n where organization_id == $organization_id && ${conditions.join(" && ")}\n order by ${where[0]?.operator === "in" ? `${key(model)} asc` : effectiveOrder}\n take $limit${counted ? " offset $offset" : " after $after"}\n`;
223
+ if (hydrate === "member") {
224
+ body += `\n many organizations from Organization\n where organization_id == $organization_id && org_id in distinct(rows.org_id)\n take 100\n\n many users from User\n where organization_id == $organization_id && user_id in distinct(rows.user_id)\n take 100\n`;
225
+ }
226
+ if (counted)
227
+ body += "\n aggregate total from rows { exact_count() as value }\n";
228
+ body += `\n return Found {\n rows: rows { ${projection(model, "rows")} }\n${counted ? " total: total { value }\n" : ""}`;
229
+ if (hydrate === "member") {
230
+ const userFields = ["user_id", "name", "email", "email_verified", "image", "created_at", "updated_at", "revision", ...extra.get("user").map((field) => `${storageField(field.name)}${field.secret ? ` reveals users.${storageField(field.name)}` : ""}`)];
231
+ body += ` organizations: organizations { ${projection("organization", "organizations")} }\n users: users { ${userFields.join(" ")} }\n`;
232
+ }
233
+ body += " }\n outcomes Found";
234
+ }
235
+ const cursor = hydrate !== "organization" && !counted;
236
+ if (cursor)
237
+ params.push("$after: Cursor?");
238
+ const path = `riffdb/queries/${storageField(name)}.riffq`;
239
+ files[path] = `query ${name}(\n $organization_id: ${entity}.organization_id,\n ${params.join(",\n ")},\n $limit: Limit<100> = 100,\n $offset: u64 = 0\n) {\n${body}\n}\n`;
240
+ application.query_modules[0].queries.push({ name, source: path });
241
+ application.roles[0].queries.push(name);
242
+ queries.push({ model, ...(cursor ? { cursor: true } : {}), method: name[0].toLowerCase() + name.slice(1), where, order, ...(hydrate === undefined ? {} : { hydrate }) });
243
+ };
244
+ for (const model of plugins) {
245
+ addQuery(model.name, "ById", [{ field: "id", operator: "eq" }]);
246
+ if (model.name === "organization")
247
+ addQuery(model.name, "BySlug", [{ field: "slug", operator: "eq" }]);
248
+ if (model.name === "twoFactor")
249
+ addQuery(model.name, "ByUser", [{ field: "userId", operator: "eq" }]);
250
+ if (model.name === "member") {
251
+ addQuery("member", "ByUser", [{ field: "userId", operator: "eq" }]);
252
+ addQuery("member", "ByOrganization", [{ field: "organizationId", operator: "eq" }]);
253
+ addQuery("member", "ByOrganizationUser", [{ field: "organizationId", operator: "eq" }, { field: "userId", operator: "eq" }]);
254
+ for (const field of ["role", "createdAt"])
255
+ for (const direction of ["asc", "desc"]) {
256
+ addQuery("member", `ByOrganization${entityName(field)}${entityName(direction)}`, [{ field: "organizationId", operator: "eq" }], [field, direction]);
257
+ }
258
+ }
259
+ if (model.name === "invitation") {
260
+ for (const field of ["organizationId", "email"])
261
+ addQuery("invitation", `By${entityName(field)}`, [{ field, operator: "eq" }]);
262
+ addQuery("invitation", "ByOrganizationStatus", [{ field: "organizationId", operator: "eq" }, { field: "status", operator: "eq" }]);
263
+ addQuery("invitation", "ByOrganizationEmailStatus", [{ field: "organizationId", operator: "eq" }, { field: "email", operator: "eq" }, { field: "status", operator: "eq" }]);
264
+ }
265
+ }
266
+ // Exact point-batch hydration used by the organization plugin's user lists.
267
+ if (org) {
268
+ const user = files["riffdb/queries/find_user_by_id.riffq"];
269
+ const leaves = /user: user \{([^}]+)\}/u.exec(user)[1];
270
+ const path = "riffdb/queries/profile_users_by_id_set.riffq";
271
+ files[path] = `query ProfileUsersByIdSet($organization_id: User.organization_id, $ids: Set<User.user_id>) {\n many users from User\n where organization_id == $organization_id && user_id in $ids\n order by user_id asc\n take 100\n return Found { users: users { ${leaves.replaceAll("user.", "users.")} } }\n outcomes Found\n}\n`;
272
+ application.query_modules[0].queries.push({ name: "ProfileUsersByIdSet", source: path });
273
+ application.roles[0].queries.push("ProfileUsersByIdSet");
274
+ }
275
+ const leaves = (path, label) => new RegExp(`${label}: ${label} \\{([^}]+)\\}`, "u").exec(files[path])[1];
276
+ const userLeaves = leaves("riffdb/queries/find_user_by_id.riffq", "user");
277
+ const accountLeaves = leaves("riffdb/queries/find_accounts_by_user_id.riffq", "accounts");
278
+ const sessionLeaves = leaves("riffdb/queries/find_session_by_token.riffq", "sessions");
279
+ const addCoreQuery = (queryName, source) => {
280
+ const path = `riffdb/queries/${storageField(queryName)}.riffq`;
281
+ files[path] = source;
282
+ application.query_modules[0].queries.push({ name: queryName, source: path });
283
+ application.roles[0].queries.push(queryName);
284
+ };
285
+ for (const field of ["id", "email"]) {
286
+ const queryName = `ProfileUserWithAccountsBy${entityName(field)}`;
287
+ addCoreQuery(queryName, `query ${queryName}($organization_id: User.organization_id, $value: User.${field === "id" ? "user_id" : "email"}) {\n one user from User\n where organization_id == $organization_id && ${field === "id" ? "user_id" : "email"} == $value\n else Missing\n many accounts from Account\n where organization_id == $organization_id && user_id == user.user_id\n order by id asc\n take 33\n return Found { user: user { ${userLeaves} } accounts: accounts { ${accountLeaves} } }\n outcomes Found | Missing\n}\n`);
288
+ }
289
+ for (const field of ["id", "token"]) {
290
+ const queryName = `ProfileSessionWithUserBy${entityName(field)}`;
291
+ addCoreQuery(queryName, `query ${queryName}($organization_id: Session.organization_id, $value: Session.${field}) {\n one session from Session\n where organization_id == $organization_id && ${field} == $value\n else Missing\n one user from User\n where organization_id == $organization_id && user_id == session.user_id\n else IntegrityFailure\n return Found { session: session { ${sessionLeaves.replaceAll("sessions.", "session.")} } user: user { ${userLeaves} } }\n outcomes Found | Missing | IntegrityFailure\n}\n`);
292
+ }
293
+ for (const [basePath, originalName, queryName, label, bound] of [
294
+ ["riffdb/queries/find_account_by_provider.riffq", "FindAccountByProvider", "ProfileAccountWithUserByProvider", "accounts", 1],
295
+ ["riffdb/queries/find_sessions_by_token_set.riffq", "FindSessionsByTokenSet", "ProfileSessionsWithUsersByTokenSet", "sessions", 32],
296
+ ]) {
297
+ const source = files[basePath].replace(originalName, queryName).replace(" return Found {", ` many users from User\n where organization_id == $organization_id && user_id in distinct(${label}.user_id)\n take ${bound}\n\n return Found {\n users: users { ${userLeaves.replaceAll("user.", "users.")} }`);
298
+ addCoreQuery(queryName, source);
299
+ }
300
+ const atomic = (name, model, inputs, guards, sets) => {
301
+ const entity = entityName(model);
302
+ declarations.set(name, [` command ${name} {`, " input request_id: uuid", " input organization_id: uuid",
303
+ ` input ${key(model)}: uuid`, ...inputs.map((input) => ` input ${input}`), " idempotency_key request_id",
304
+ ` mutate ${entity}(organization_id, ${key(model)}) as record else Missing {}`,
305
+ ...guards.map((guard, i) => ` require guard_${i}: ${guard} else GuardFailed {}`),
306
+ ...sets.map((set) => ` set record.${set} checked_by guard_0`), " set record.revision = record.revision + 1",
307
+ " return Changed { }",
308
+ " }"].join("\n"));
309
+ // Outcomes project exact leaves, including compiler-declared secret output.
310
+ const fields = plan.models.find((entry) => entry.name === model).fields;
311
+ const leaves = [`${key(model)}: record.${key(model)}`, ...fields.map((field) => `${profileColumn(field.name)}: record.${profileColumn(field.name)}${field.secret && field.reference === undefined ? ` reveals record.${profileColumn(field.name)}` : ""}`), "revision: record.revision"];
312
+ declarations.set(name, declarations.get(name).replace(" return Changed { }", ` return Changed {\n ${leaves.join(",\n ")}\n }`));
313
+ };
314
+ if (twoFactor) {
315
+ atomic("IncrementTwoFactorFailure", "twoFactor", [], ["record.failed_verification_count < 1000000"], ["failed_verification_count = record.failed_verification_count + 1"]);
316
+ atomic("LockTwoFactor", "twoFactor", ["minimum_failures: i64", "locked_until: optional<timestamp>", "locked_until_millis: i64"], ["record.failed_verification_count >= minimum_failures"], ["locked_until = locked_until", "locked_until_millis = locked_until_millis"]);
317
+ atomic("ResetExpiredTwoFactor", "twoFactor", ["before_millis: i64"], ["record.locked_until_millis > 0 && record.locked_until_millis <= before_millis"], ["failed_verification_count = 0", "locked_until = null", "locked_until_millis = 0"]);
318
+ atomic("ReplaceTwoFactorBackupCodes", "twoFactor", ["expected: string<2048>", "replacement: string<2048>"], ["record.backup_codes == expected"], ["backup_codes = replacement"]);
319
+ }
320
+ if (org) {
321
+ atomic("TransitionInvitation", "invitation", ["expected: string<32>", "replacement: string<32>"], ["record.status == expected"], ["status = replacement"]);
322
+ let body = declarations.get("CreateMember").replace("command CreateMember", "command CreateMemberAndActivateOrganization")
323
+ .replace(" idempotency_key", " input session_user_id: uuid\n input session_id: uuid\n input session_revision: u64\n input session_updated_at: timestamp\n input session_active_organization_id: optional<string<2048>>\n idempotency_key")
324
+ .replace("as record else MemberAlreadyExists {}", "as record else MemberAlreadyExists {}\n mutate Session(organization_id, session_user_id, session_id) as session else SessionMissing {}")
325
+ .replace(" require capacity:", " require session_snapshot: session.revision == session_revision else Stale {}\n require session_owner: session.user_id == user_id else SessionOwnerMismatch {}\n require capacity:");
326
+ body = body.replace(" return MemberCreated {}", " set session.active_organization_id = session_active_organization_id checked_by session_snapshot\n set session.updated_at = session_updated_at checked_by session_snapshot\n set session.revision = session.revision + 1\n return MemberCreated {}");
327
+ declarations.set("CreateMemberAndActivateOrganization", body);
328
+ }
329
+ contract = [`contract ${plan.contract.lineage} version 1 {`, ...[...declarations.values()].filter((source) => source.startsWith(" entity")),
330
+ declarations.get("TenantData"), ...[...declarations.values()].filter((source) => /^ (?:bulk )?command/u.test(source)), "}", ""].join("\n\n");
331
+ files["riffdb/contract.riff"] = contract;
332
+ application.application = storageField(plan.name).replaceAll("_", "-");
333
+ application.contract.lineage = plan.contract.lineage;
334
+ application.roles[0].name = plan.contract.applicationRole;
335
+ application.roles[0].commands = [...declarations.keys()].filter((name) => /^ (?:bulk )?command/u.test(declarations.get(name)));
336
+ files["riffdb.application.json"] = `${JSON.stringify(application, null, 2)}\n`;
337
+ files["riffdb.toml"] = '[project]\nschema = "riffdb.application.json"\ngenerators = ["typescript"]\n';
338
+ files["profile.ts"] = `// Generated profile binding. Review sources, then run riffdb application lock --write.\nimport { defineRiffDBCompiledProfile } from "@riffdb/better-auth";\nimport * as bindings from "./src/generated/client.js";\nexport default defineRiffDBCompiledProfile({\n plan: ${JSON.stringify(plan, null, 2)},\n queries: ${JSON.stringify(queries, null, 2)},\n bindings,\n});\n`;
339
+ for (const path of Object.keys(files)) {
340
+ files[path] = `${files[path].split("\n").map((line) => line.trimEnd()).join("\n").trimEnd()}\n`;
341
+ }
342
+ return Object.freeze({ files: Object.freeze(files), queries: Object.freeze(queries) });
343
+ }
344
+ //# sourceMappingURL=runtime-materialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-materialize.js","sourceRoot":"","sources":["../src/runtime-materialize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { BetterAuthOptions } from "better-auth";
2
+ import type { BetterAuthDBSchema } from "better-auth/db";
3
+ import type { ApplicationTransport } from "./generated/client.js";
4
+ import { type RiffDBBetterAuthProfilePlan, type RiffDBBetterAuthProfileFieldPlan } from "./profile-plan.js";
5
+ export interface RiffDBProfileQuery {
6
+ readonly model: string;
7
+ readonly method: string;
8
+ readonly where: readonly {
9
+ readonly field: string;
10
+ readonly operator: string;
11
+ }[];
12
+ readonly order: readonly [string, "asc" | "desc"] | null;
13
+ readonly hydrate?: "member" | "organization";
14
+ readonly cursor?: boolean;
15
+ }
16
+ export interface RiffDBCompiledProfileInput {
17
+ readonly plan: RiffDBBetterAuthProfilePlan;
18
+ readonly queries: readonly RiffDBProfileQuery[];
19
+ /** The compiler-generated module namespace, never CRUD or transaction callbacks. */
20
+ readonly bindings: object;
21
+ }
22
+ export interface RiffDBCompiledProfile extends RiffDBCompiledProfileInput {
23
+ readonly schema: "riffdb.better-auth-runtime-profile/v1";
24
+ readonly contractBundleHash: string;
25
+ readonly Client: new (...args: never[]) => object;
26
+ }
27
+ export declare function instantiateProfileClient(profile: RiffDBCompiledProfile, transport: ApplicationTransport, budget: number): object;
28
+ /** Used by generated profile modules after their sources have been reviewed and locked. */
29
+ export declare function defineRiffDBCompiledProfile(input: RiffDBCompiledProfileInput): RiffDBCompiledProfile;
30
+ export declare function validateRuntimeProfile(profile: RiffDBCompiledProfile, options: BetterAuthOptions, tables: BetterAuthDBSchema): void;
31
+ export declare function storageField(name: string): string;
32
+ export declare function encodeProfileField(field: RiffDBBetterAuthProfileFieldPlan, value: unknown): unknown;
33
+ export declare function decodeProfileField(field: RiffDBBetterAuthProfileFieldPlan, value: unknown): unknown;
34
+ //# sourceMappingURL=runtime-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-profile.d.ts","sourceRoot":"","sources":["../src/runtime-profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAqC,KAAK,2BAA2B,EAC1E,KAAK,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjF,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAChD,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,WAAW,qBAAsB,SAAQ,0BAA0B;IACvE,QAAQ,CAAC,MAAM,EAAE,uCAAuC,CAAC;IACzD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,MAAM,CAAC;CACnD;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGhI;AAED,2FAA2F;AAC3F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,GAAG,qBAAqB,CA8EpG;AAcD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,GACrF,IAAI,CAoCN;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gCAAgC,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CA0BnG;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gCAAgC,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAgBnG"}