@selvajs/supabase-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 (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +271 -0
  3. package/dist/auth/SupabaseAuthProvider.d.ts +81 -0
  4. package/dist/auth/SupabaseAuthProvider.d.ts.map +1 -0
  5. package/dist/auth/SupabaseAuthProvider.js +383 -0
  6. package/dist/auth/SupabaseAuthProvider.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 +76 -0
  10. package/dist/auth/__tests__/conformance.test.js.map +1 -0
  11. package/dist/auth/index.d.ts +3 -0
  12. package/dist/auth/index.d.ts.map +1 -0
  13. package/dist/auth/index.js +2 -0
  14. package/dist/auth/index.js.map +1 -0
  15. package/dist/data/SupabaseAuditQuery.d.ts +16 -0
  16. package/dist/data/SupabaseAuditQuery.d.ts.map +1 -0
  17. package/dist/data/SupabaseAuditQuery.js +83 -0
  18. package/dist/data/SupabaseAuditQuery.js.map +1 -0
  19. package/dist/data/SupabaseComputeServerStore.d.ts +26 -0
  20. package/dist/data/SupabaseComputeServerStore.d.ts.map +1 -0
  21. package/dist/data/SupabaseComputeServerStore.js +227 -0
  22. package/dist/data/SupabaseComputeServerStore.js.map +1 -0
  23. package/dist/data/SupabaseDataProvider.d.ts +55 -0
  24. package/dist/data/SupabaseDataProvider.d.ts.map +1 -0
  25. package/dist/data/SupabaseDataProvider.js +114 -0
  26. package/dist/data/SupabaseDataProvider.js.map +1 -0
  27. package/dist/data/SupabaseDefinitionStore.d.ts +39 -0
  28. package/dist/data/SupabaseDefinitionStore.d.ts.map +1 -0
  29. package/dist/data/SupabaseDefinitionStore.js +419 -0
  30. package/dist/data/SupabaseDefinitionStore.js.map +1 -0
  31. package/dist/data/SupabaseEventSink.d.ts +17 -0
  32. package/dist/data/SupabaseEventSink.d.ts.map +1 -0
  33. package/dist/data/SupabaseEventSink.js +31 -0
  34. package/dist/data/SupabaseEventSink.js.map +1 -0
  35. package/dist/data/SupabaseInviteStore.d.ts +22 -0
  36. package/dist/data/SupabaseInviteStore.d.ts.map +1 -0
  37. package/dist/data/SupabaseInviteStore.js +159 -0
  38. package/dist/data/SupabaseInviteStore.js.map +1 -0
  39. package/dist/data/SupabaseOrgStore.d.ts +33 -0
  40. package/dist/data/SupabaseOrgStore.d.ts.map +1 -0
  41. package/dist/data/SupabaseOrgStore.js +455 -0
  42. package/dist/data/SupabaseOrgStore.js.map +1 -0
  43. package/dist/data/SupabaseProjectStore.d.ts +29 -0
  44. package/dist/data/SupabaseProjectStore.d.ts.map +1 -0
  45. package/dist/data/SupabaseProjectStore.js +328 -0
  46. package/dist/data/SupabaseProjectStore.js.map +1 -0
  47. package/dist/data/SupabaseShareLinkStore.d.ts +26 -0
  48. package/dist/data/SupabaseShareLinkStore.d.ts.map +1 -0
  49. package/dist/data/SupabaseShareLinkStore.js +150 -0
  50. package/dist/data/SupabaseShareLinkStore.js.map +1 -0
  51. package/dist/data/__tests__/compute-server-conformance.test.d.ts +2 -0
  52. package/dist/data/__tests__/compute-server-conformance.test.d.ts.map +1 -0
  53. package/dist/data/__tests__/compute-server-conformance.test.js +40 -0
  54. package/dist/data/__tests__/compute-server-conformance.test.js.map +1 -0
  55. package/dist/data/__tests__/definition-conformance.test.d.ts +2 -0
  56. package/dist/data/__tests__/definition-conformance.test.d.ts.map +1 -0
  57. package/dist/data/__tests__/definition-conformance.test.js +85 -0
  58. package/dist/data/__tests__/definition-conformance.test.js.map +1 -0
  59. package/dist/data/__tests__/event-sink-conformance.test.d.ts +2 -0
  60. package/dist/data/__tests__/event-sink-conformance.test.d.ts.map +1 -0
  61. package/dist/data/__tests__/event-sink-conformance.test.js +27 -0
  62. package/dist/data/__tests__/event-sink-conformance.test.js.map +1 -0
  63. package/dist/data/__tests__/invite-conformance.test.d.ts +2 -0
  64. package/dist/data/__tests__/invite-conformance.test.d.ts.map +1 -0
  65. package/dist/data/__tests__/invite-conformance.test.js +45 -0
  66. package/dist/data/__tests__/invite-conformance.test.js.map +1 -0
  67. package/dist/data/__tests__/org-conformance.test.d.ts +2 -0
  68. package/dist/data/__tests__/org-conformance.test.d.ts.map +1 -0
  69. package/dist/data/__tests__/org-conformance.test.js +29 -0
  70. package/dist/data/__tests__/org-conformance.test.js.map +1 -0
  71. package/dist/data/__tests__/project-conformance.test.d.ts +2 -0
  72. package/dist/data/__tests__/project-conformance.test.d.ts.map +1 -0
  73. package/dist/data/__tests__/project-conformance.test.js +57 -0
  74. package/dist/data/__tests__/project-conformance.test.js.map +1 -0
  75. package/dist/data/__tests__/share-link-conformance.test.d.ts +2 -0
  76. package/dist/data/__tests__/share-link-conformance.test.d.ts.map +1 -0
  77. package/dist/data/__tests__/share-link-conformance.test.js +88 -0
  78. package/dist/data/__tests__/share-link-conformance.test.js.map +1 -0
  79. package/dist/data/__tests__/test-helpers.d.ts +53 -0
  80. package/dist/data/__tests__/test-helpers.d.ts.map +1 -0
  81. package/dist/data/__tests__/test-helpers.js +175 -0
  82. package/dist/data/__tests__/test-helpers.js.map +1 -0
  83. package/dist/data/client.d.ts +44 -0
  84. package/dist/data/client.d.ts.map +1 -0
  85. package/dist/data/client.js +40 -0
  86. package/dist/data/client.js.map +1 -0
  87. package/dist/data/index.d.ts +12 -0
  88. package/dist/data/index.d.ts.map +1 -0
  89. package/dist/data/index.js +11 -0
  90. package/dist/data/index.js.map +1 -0
  91. package/dist/data/pagination.d.ts +30 -0
  92. package/dist/data/pagination.d.ts.map +1 -0
  93. package/dist/data/pagination.js +53 -0
  94. package/dist/data/pagination.js.map +1 -0
  95. package/dist/index.d.ts +9 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +6 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/permissions/SupabasePlatformPermissionStore.d.ts +25 -0
  100. package/dist/permissions/SupabasePlatformPermissionStore.d.ts.map +1 -0
  101. package/dist/permissions/SupabasePlatformPermissionStore.js +153 -0
  102. package/dist/permissions/SupabasePlatformPermissionStore.js.map +1 -0
  103. package/dist/permissions/__tests__/conformance.test.d.ts +2 -0
  104. package/dist/permissions/__tests__/conformance.test.d.ts.map +1 -0
  105. package/dist/permissions/__tests__/conformance.test.js +27 -0
  106. package/dist/permissions/__tests__/conformance.test.js.map +1 -0
  107. package/dist/permissions/index.d.ts +2 -0
  108. package/dist/permissions/index.d.ts.map +1 -0
  109. package/dist/permissions/index.js +2 -0
  110. package/dist/permissions/index.js.map +1 -0
  111. package/dist/storage/SupabaseStorageProvider.d.ts +67 -0
  112. package/dist/storage/SupabaseStorageProvider.d.ts.map +1 -0
  113. package/dist/storage/SupabaseStorageProvider.js +136 -0
  114. package/dist/storage/SupabaseStorageProvider.js.map +1 -0
  115. package/dist/storage/__tests__/conformance.test.d.ts +2 -0
  116. package/dist/storage/__tests__/conformance.test.d.ts.map +1 -0
  117. package/dist/storage/__tests__/conformance.test.js +149 -0
  118. package/dist/storage/__tests__/conformance.test.js.map +1 -0
  119. package/dist/storage/index.d.ts +3 -0
  120. package/dist/storage/index.d.ts.map +1 -0
  121. package/dist/storage/index.js +2 -0
  122. package/dist/storage/index.js.map +1 -0
  123. package/dist/userProfile/SupabaseUserProfileProvider.d.ts +16 -0
  124. package/dist/userProfile/SupabaseUserProfileProvider.d.ts.map +1 -0
  125. package/dist/userProfile/SupabaseUserProfileProvider.js +148 -0
  126. package/dist/userProfile/SupabaseUserProfileProvider.js.map +1 -0
  127. package/dist/userProfile/__tests__/conformance.test.d.ts +2 -0
  128. package/dist/userProfile/__tests__/conformance.test.d.ts.map +1 -0
  129. package/dist/userProfile/__tests__/conformance.test.js +38 -0
  130. package/dist/userProfile/__tests__/conformance.test.js.map +1 -0
  131. package/dist/userProfile/index.d.ts +2 -0
  132. package/dist/userProfile/index.d.ts.map +1 -0
  133. package/dist/userProfile/index.js +2 -0
  134. package/dist/userProfile/index.js.map +1 -0
  135. package/package.json +75 -0
  136. package/src/auth/SupabaseAuthProvider.ts +464 -0
  137. package/src/auth/__tests__/conformance.test.ts +78 -0
  138. package/src/auth/index.ts +2 -0
  139. package/src/data/SupabaseAuditQuery.ts +103 -0
  140. package/src/data/SupabaseComputeServerStore.ts +262 -0
  141. package/src/data/SupabaseDataProvider.ts +125 -0
  142. package/src/data/SupabaseDefinitionStore.ts +504 -0
  143. package/src/data/SupabaseEventSink.ts +30 -0
  144. package/src/data/SupabaseInviteStore.ts +183 -0
  145. package/src/data/SupabaseOrgStore.ts +547 -0
  146. package/src/data/SupabaseProjectStore.ts +414 -0
  147. package/src/data/SupabaseShareLinkStore.ts +191 -0
  148. package/src/data/__tests__/compute-server-conformance.test.ts +40 -0
  149. package/src/data/__tests__/definition-conformance.test.ts +89 -0
  150. package/src/data/__tests__/event-sink-conformance.test.ts +32 -0
  151. package/src/data/__tests__/invite-conformance.test.ts +46 -0
  152. package/src/data/__tests__/org-conformance.test.ts +30 -0
  153. package/src/data/__tests__/project-conformance.test.ts +57 -0
  154. package/src/data/__tests__/share-link-conformance.test.ts +87 -0
  155. package/src/data/__tests__/test-helpers.ts +186 -0
  156. package/src/data/client.ts +86 -0
  157. package/src/data/index.ts +11 -0
  158. package/src/data/pagination.ts +68 -0
  159. package/src/index.ts +23 -0
  160. package/src/permissions/SupabasePlatformPermissionStore.ts +161 -0
  161. package/src/permissions/__tests__/conformance.test.ts +28 -0
  162. package/src/permissions/index.ts +1 -0
  163. package/src/storage/SupabaseStorageProvider.ts +177 -0
  164. package/src/storage/__tests__/conformance.test.ts +152 -0
  165. package/src/storage/index.ts +2 -0
  166. package/src/userProfile/SupabaseUserProfileProvider.ts +177 -0
  167. package/src/userProfile/__tests__/conformance.test.ts +39 -0
  168. package/src/userProfile/index.ts +1 -0
  169. package/supabase/.branches/_current_branch +1 -0
  170. package/supabase/.temp/cli-latest +1 -0
  171. package/supabase/config.toml +68 -0
  172. package/supabase/migrations/0001_initial.sql +1084 -0
  173. package/supabase/seed.sql +13 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupabaseOrgStore.js","sourceRoot":"","sources":["../../src/data/SupabaseOrgStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { IProjectStore, IEventSink, Project, ProjectMember, ProjectRole, RequestContext, ListOptions, Page } from '@selvajs/platform';
2
+ import type { ClientBundle } from './client.js';
3
+ /**
4
+ * Project + project-membership store backed by Postgres. Visibility semantics
5
+ * (public / org / private) are enforced by the `visible_project()` helper in
6
+ * RLS. Access predicates (canEdit / canManage / canView etc.) live as pure
7
+ * functions in `@selvajs/platform/access`; the route layer composes them with
8
+ * pre-loaded entities. See `packages/selva/src/lib/server/access.server.ts`.
9
+ *
10
+ * `createProject` atomically seeds the creator as the project `owner` in
11
+ * `project_members` so subsequent user-scoped reads can see it.
12
+ */
13
+ export declare class SupabaseProjectStore implements IProjectStore {
14
+ private readonly clients;
15
+ private readonly events;
16
+ constructor(clients: ClientBundle, events?: IEventSink);
17
+ listProjects(ctx: RequestContext, orgId: string, opts?: ListOptions): Promise<Page<Project>>;
18
+ getProject(ctx: RequestContext, id: string): Promise<Project | null>;
19
+ getProjectBySlug(ctx: RequestContext, orgId: string, slug: string): Promise<Project | null>;
20
+ createProject(ctx: RequestContext, project: Project): Promise<void>;
21
+ updateProject(ctx: RequestContext, id: string, patch: Partial<Pick<Project, 'name' | 'slug' | 'description' | 'visibility' | 'autoJoinOnUpload'>>): Promise<void>;
22
+ deleteProject(ctx: RequestContext, id: string): Promise<void>;
23
+ listProjectMembers(ctx: RequestContext, projectId: string, opts?: ListOptions): Promise<Page<ProjectMember>>;
24
+ getProjectMember(ctx: RequestContext, projectId: string, userId: string): Promise<ProjectMember | null>;
25
+ addProjectMember(ctx: RequestContext, member: ProjectMember): Promise<void>;
26
+ updateProjectMemberRole(ctx: RequestContext, projectId: string, userId: string, role: ProjectRole): Promise<void>;
27
+ removeProjectMember(ctx: RequestContext, projectId: string, userId: string): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=SupabaseProjectStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupabaseProjectStore.d.ts","sourceRoot":"","sources":["../../src/data/SupabaseProjectStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,UAAU,EACV,OAAO,EACP,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,EACX,IAAI,EACJ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IAIxD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAGlB,OAAO,EAAE,YAAY,EACtC,MAAM,GAAE,UAAgC;IAKnC,YAAY,CACjB,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAgBnB,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAYpE,gBAAgB,CACrB,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAapB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BnE,aAAa,CAClB,GAAG,EAAE,cAAc,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CACb,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,YAAY,GAAG,kBAAkB,CAAC,CAClF,GACC,OAAO,CAAC,IAAI,CAAC;IAqBV,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC7D,kBAAkB,CACvB,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAezB,gBAAgB,CACrB,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAa1B,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB3E,uBAAuB,CAC5B,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,GACf,OAAO,CAAC,IAAI,CAAC;IAuBV,mBAAmB,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBhG"}
@@ -0,0 +1,328 @@
1
+ import { ProviderError, auditSoftDelete, actorFrom, NoopEventSink } from '@selvajs/platform';
2
+ import { nextCursorFromRange, orderColumn, toRange } from './pagination.js';
3
+ /**
4
+ * Project + project-membership store backed by Postgres. Visibility semantics
5
+ * (public / org / private) are enforced by the `visible_project()` helper in
6
+ * RLS. Access predicates (canEdit / canManage / canView etc.) live as pure
7
+ * functions in `@selvajs/platform/access`; the route layer composes them with
8
+ * pre-loaded entities. See `packages/selva/src/lib/server/access.server.ts`.
9
+ *
10
+ * `createProject` atomically seeds the creator as the project `owner` in
11
+ * `project_members` so subsequent user-scoped reads can see it.
12
+ */
13
+ export class SupabaseProjectStore {
14
+ clients;
15
+ events;
16
+ constructor(clients, events = new NoopEventSink()) {
17
+ this.clients = clients;
18
+ this.events = events;
19
+ }
20
+ async listProjects(ctx, orgId, opts) {
21
+ const range = toRange(opts);
22
+ const direction = opts?.orderDir ?? 'desc';
23
+ const { data, error, count } = await this.clients
24
+ .forRequest(ctx)
25
+ .from('projects')
26
+ .select('*', { count: 'exact' })
27
+ .eq('org_id', orgId)
28
+ .is('deleted_at', null)
29
+ .order(orderColumn(opts?.orderBy), { ascending: direction === 'asc' })
30
+ .range(range.from, range.to);
31
+ if (error)
32
+ throw mapError(error);
33
+ const items = (data ?? []).map(rowToProject);
34
+ return { items, nextCursor: nextCursorFromRange(range, items.length, count) };
35
+ }
36
+ async getProject(ctx, id) {
37
+ const { data, error } = await this.clients
38
+ .forRequest(ctx)
39
+ .from('projects')
40
+ .select('*')
41
+ .eq('id', id)
42
+ .is('deleted_at', null)
43
+ .maybeSingle();
44
+ if (error)
45
+ throw mapError(error);
46
+ return data ? rowToProject(data) : null;
47
+ }
48
+ async getProjectBySlug(ctx, orgId, slug) {
49
+ const { data, error } = await this.clients
50
+ .forRequest(ctx)
51
+ .from('projects')
52
+ .select('*')
53
+ .eq('org_id', orgId)
54
+ .eq('slug', slug)
55
+ .is('deleted_at', null)
56
+ .maybeSingle();
57
+ if (error)
58
+ throw mapError(error);
59
+ return data ? rowToProject(data) : null;
60
+ }
61
+ async createProject(ctx, project) {
62
+ const client = this.clients.forRequest(ctx);
63
+ const { error } = await client.from('projects').insert(projectToRow(project));
64
+ if (error)
65
+ throw mapError(error);
66
+ // Seed owner membership so user-scoped reads see the project post-create.
67
+ // Upsert so a stale soft-deleted row from a prior project with the same id
68
+ // is reactivated rather than blocking creation.
69
+ const { error: memberError } = await client.from('project_members').upsert({
70
+ project_id: project.id,
71
+ user_id: project.ownerId,
72
+ role: 'owner',
73
+ joined_at: new Date().toISOString(),
74
+ deleted_at: null
75
+ }, { onConflict: 'project_id,user_id' });
76
+ if (memberError)
77
+ throw mapError(memberError);
78
+ await this.events.emit({
79
+ type: 'project.created',
80
+ projectId: project.id,
81
+ orgId: project.orgId,
82
+ actorId: actorFrom(ctx)
83
+ });
84
+ }
85
+ async updateProject(ctx, id, patch) {
86
+ const row = {};
87
+ if (patch.name !== undefined)
88
+ row.name = patch.name;
89
+ if (patch.slug !== undefined)
90
+ row.slug = patch.slug;
91
+ if (patch.description !== undefined)
92
+ row.description = patch.description;
93
+ if (patch.visibility !== undefined)
94
+ row.visibility = patch.visibility;
95
+ if (patch.autoJoinOnUpload !== undefined)
96
+ row.auto_join_on_upload = patch.autoJoinOnUpload;
97
+ if (Object.keys(row).length === 0)
98
+ return;
99
+ if (ctx.userId)
100
+ row.updated_by = ctx.userId;
101
+ const { data, error } = await this.clients
102
+ .forRequest(ctx)
103
+ .from('projects')
104
+ .update(row)
105
+ .eq('id', id)
106
+ .is('deleted_at', null)
107
+ .select('id');
108
+ if (error)
109
+ throw mapError(error);
110
+ if (!data || data.length === 0)
111
+ throw new ProviderError(`Project '${id}' not found`, 404);
112
+ }
113
+ async deleteProject(ctx, id) {
114
+ // §9 soft-delete with cascade. Mirrors LocalProjectStore: project →
115
+ // project_members, definitions. FK CASCADE doesn't fire on soft-delete,
116
+ // so the cascade is in app code.
117
+ const client = this.clients.forRequest(ctx);
118
+ const stamp = auditSoftDelete(ctx, ctx.userId);
119
+ const stampRow = stampToRow(stamp);
120
+ const { data, error } = await client
121
+ .from('projects')
122
+ .update(stampRow)
123
+ .eq('id', id)
124
+ .is('deleted_at', null)
125
+ .select('id');
126
+ if (error)
127
+ throw mapError(error);
128
+ if (!data || data.length === 0)
129
+ throw new ProviderError(`Project '${id}' not found`, 404);
130
+ const { error: pmErr } = await client
131
+ .from('project_members')
132
+ .update(stampRow)
133
+ .eq('project_id', id)
134
+ .is('deleted_at', null);
135
+ if (pmErr)
136
+ throw mapError(pmErr);
137
+ const { error: defErr } = await client
138
+ .from('definitions')
139
+ .update(stampRow)
140
+ .eq('project_id', id)
141
+ .is('deleted_at', null);
142
+ if (defErr)
143
+ throw mapError(defErr);
144
+ await this.events.emit({ type: 'project.deleted', projectId: id, actorId: actorFrom(ctx) });
145
+ }
146
+ // ============================================================================
147
+ // Project members
148
+ // ============================================================================
149
+ async listProjectMembers(ctx, projectId, opts) {
150
+ const range = toRange(opts);
151
+ const { data, error, count } = await this.clients
152
+ .forRequest(ctx)
153
+ .from('project_members')
154
+ .select('*', { count: 'exact' })
155
+ .eq('project_id', projectId)
156
+ .is('deleted_at', null)
157
+ .order('joined_at', { ascending: (opts?.orderDir ?? 'desc') === 'asc' })
158
+ .range(range.from, range.to);
159
+ if (error)
160
+ throw mapError(error);
161
+ const items = (data ?? []).map(rowToProjectMember);
162
+ return { items, nextCursor: nextCursorFromRange(range, items.length, count) };
163
+ }
164
+ async getProjectMember(ctx, projectId, userId) {
165
+ const { data, error } = await this.clients
166
+ .forRequest(ctx)
167
+ .from('project_members')
168
+ .select('*')
169
+ .eq('project_id', projectId)
170
+ .eq('user_id', userId)
171
+ .is('deleted_at', null)
172
+ .maybeSingle();
173
+ if (error)
174
+ throw mapError(error);
175
+ return data ? rowToProjectMember(data) : null;
176
+ }
177
+ async addProjectMember(ctx, member) {
178
+ // Upsert reactivates a prior soft-deleted row instead of throwing
179
+ // duplicate-key. Mirrors LocalProjectStore.addProjectMember.
180
+ const row = {
181
+ ...projectMemberToRow(member),
182
+ deleted_at: null
183
+ };
184
+ if (ctx.userId)
185
+ row.updated_by = ctx.userId;
186
+ const { error } = await this.clients
187
+ .forRequest(ctx)
188
+ .from('project_members')
189
+ .upsert(row, { onConflict: 'project_id,user_id' });
190
+ if (error)
191
+ throw mapError(error);
192
+ await this.events.emit({
193
+ type: 'project_member.added',
194
+ projectId: member.projectId,
195
+ userId: member.userId,
196
+ actorId: actorFrom(ctx)
197
+ });
198
+ }
199
+ async updateProjectMemberRole(ctx, projectId, userId, role) {
200
+ const row = { role };
201
+ if (ctx.userId)
202
+ row.updated_by = ctx.userId;
203
+ const { data, error } = await this.clients
204
+ .forRequest(ctx)
205
+ .from('project_members')
206
+ .update(row)
207
+ .eq('project_id', projectId)
208
+ .eq('user_id', userId)
209
+ .is('deleted_at', null)
210
+ .select('user_id');
211
+ if (error)
212
+ throw mapError(error);
213
+ if (!data || data.length === 0)
214
+ throw new ProviderError(`Project member '${userId}' not found`, 404);
215
+ await this.events.emit({
216
+ type: 'project_member.role_changed',
217
+ projectId,
218
+ userId,
219
+ role,
220
+ actorId: actorFrom(ctx)
221
+ });
222
+ }
223
+ async removeProjectMember(ctx, projectId, userId) {
224
+ const stamp = auditSoftDelete(ctx, ctx.userId);
225
+ const { error } = await this.clients
226
+ .forRequest(ctx)
227
+ .from('project_members')
228
+ .update(stampToRow(stamp))
229
+ .eq('project_id', projectId)
230
+ .eq('user_id', userId)
231
+ .is('deleted_at', null);
232
+ if (error)
233
+ throw mapError(error);
234
+ await this.events.emit({
235
+ type: 'project_member.removed',
236
+ projectId,
237
+ userId,
238
+ actorId: actorFrom(ctx)
239
+ });
240
+ }
241
+ }
242
+ function rowToProject(row) {
243
+ return {
244
+ id: row.id,
245
+ orgId: row.org_id,
246
+ name: row.name,
247
+ slug: row.slug,
248
+ description: row.description ?? undefined,
249
+ visibility: row.visibility,
250
+ ownerId: row.owner_id,
251
+ createdBy: row.created_by ?? row.owner_id,
252
+ updatedBy: row.updated_by ?? row.owner_id,
253
+ autoJoinOnUpload: row.auto_join_on_upload ?? false,
254
+ createdAt: row.created_at,
255
+ updatedAt: row.updated_at,
256
+ deletedAt: row.deleted_at ?? null
257
+ };
258
+ }
259
+ function projectToRow(p) {
260
+ return {
261
+ id: p.id,
262
+ org_id: p.orgId,
263
+ name: p.name,
264
+ slug: p.slug,
265
+ description: p.description ?? null,
266
+ visibility: p.visibility,
267
+ owner_id: p.ownerId,
268
+ created_by: p.createdBy,
269
+ updated_by: p.updatedBy,
270
+ auto_join_on_upload: p.autoJoinOnUpload,
271
+ created_at: p.createdAt,
272
+ updated_at: p.updatedAt,
273
+ deleted_at: p.deletedAt ?? null
274
+ };
275
+ }
276
+ function rowToProjectMember(row) {
277
+ return {
278
+ projectId: row.project_id,
279
+ userId: row.user_id,
280
+ role: row.role,
281
+ joinedAt: row.joined_at,
282
+ updatedAt: row.updated_at ?? row.joined_at,
283
+ updatedBy: row.updated_by ?? row.user_id,
284
+ deletedAt: row.deleted_at ?? null
285
+ };
286
+ }
287
+ function projectMemberToRow(m) {
288
+ return {
289
+ project_id: m.projectId,
290
+ user_id: m.userId,
291
+ role: m.role,
292
+ joined_at: m.joinedAt
293
+ };
294
+ }
295
+ /**
296
+ * Build a row payload from an audit-soft-delete stamp. `updated_by` only goes
297
+ * into the row when ctx.userId is set — passing `''` would violate the
298
+ * `references auth.users(id)` FK on system contexts. The DB trigger sets
299
+ * `updated_at`, but for soft-delete we set it explicitly so it matches
300
+ * `deleted_at` (single timestamp for the deletion event).
301
+ */
302
+ function stampToRow(stamp) {
303
+ const row = {
304
+ deleted_at: stamp.deletedAt,
305
+ updated_at: stamp.updatedAt
306
+ };
307
+ if (stamp.updatedBy)
308
+ row.updated_by = stamp.updatedBy;
309
+ return row;
310
+ }
311
+ function mapError(e) {
312
+ const pg = e;
313
+ if (pg?.code === '23505')
314
+ return new ProviderError(pg.message ?? 'Duplicate record', 409);
315
+ if (pg?.code === '23503')
316
+ return new ProviderError(pg.message ?? 'Foreign key violation', 409);
317
+ if (e instanceof Error)
318
+ return e;
319
+ if (e && typeof e === 'object') {
320
+ const obj = e;
321
+ const msg = obj.message ?? obj.details ?? obj.hint ?? 'Unknown Postgres error';
322
+ const err = new Error(obj.code ? `[${obj.code}] ${msg}` : msg);
323
+ Object.assign(err, obj);
324
+ return err;
325
+ }
326
+ return new Error(String(e));
327
+ }
328
+ //# sourceMappingURL=SupabaseProjectStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupabaseProjectStore.js","sourceRoot":"","sources":["../../src/data/SupabaseProjectStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { IShareLinkStore, IEventSink, ShareLink, RequestContext, ListOptions, Page } from '@selvajs/platform';
2
+ import type { ClientBundle } from './client.js';
3
+ /**
4
+ * Spec §7 — share-link store backed by Postgres.
5
+ *
6
+ * Token resolution (`getByTokenHash`) and atomic increment use the
7
+ * SECURITY DEFINER `try_increment_share_link_solve_count` RPC + service-
8
+ * role client to bypass RLS — the token IS the credential, not the
9
+ * authenticated user identity.
10
+ *
11
+ * `tryIncrementSolveCount` returns a single number on success or null when
12
+ * the cap is hit. The RPC enforces "increment iff under cap and live" in
13
+ * one statement, so even concurrent solves can't overshoot the cap.
14
+ */
15
+ export declare class SupabaseShareLinkStore implements IShareLinkStore {
16
+ private readonly clients;
17
+ private readonly events;
18
+ constructor(clients: ClientBundle, events?: IEventSink);
19
+ create(ctx: RequestContext, link: ShareLink): Promise<void>;
20
+ listByDefinition(ctx: RequestContext, definitionId: string, opts?: ListOptions): Promise<Page<ShareLink>>;
21
+ getById(ctx: RequestContext, id: string): Promise<ShareLink | null>;
22
+ getByTokenHash(_ctx: RequestContext, tokenHash: string): Promise<ShareLink | null>;
23
+ revoke(ctx: RequestContext, id: string): Promise<void>;
24
+ tryIncrementSolveCount(_ctx: RequestContext, id: string): Promise<number | null>;
25
+ }
26
+ //# sourceMappingURL=SupabaseShareLinkStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupabaseShareLinkStore.d.ts","sourceRoot":"","sources":["../../src/data/SupabaseShareLinkStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,eAAe,EACf,UAAU,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,IAAI,EACJ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD;;;;;;;;;;;GAWG;AACH,qBAAa,sBAAuB,YAAW,eAAe;IAI5D,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAGlB,OAAO,EAAE,YAAY,EACtC,MAAM,GAAE,UAAgC;IAKnC,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3D,gBAAgB,CACrB,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAerB,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAWnE,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAelF,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IActD,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAWtF"}
@@ -0,0 +1,150 @@
1
+ import { ProviderError, actorFrom, NoopEventSink } from '@selvajs/platform';
2
+ import { nextCursorFromRange, toRange } from './pagination.js';
3
+ /**
4
+ * Spec §7 — share-link store backed by Postgres.
5
+ *
6
+ * Token resolution (`getByTokenHash`) and atomic increment use the
7
+ * SECURITY DEFINER `try_increment_share_link_solve_count` RPC + service-
8
+ * role client to bypass RLS — the token IS the credential, not the
9
+ * authenticated user identity.
10
+ *
11
+ * `tryIncrementSolveCount` returns a single number on success or null when
12
+ * the cap is hit. The RPC enforces "increment iff under cap and live" in
13
+ * one statement, so even concurrent solves can't overshoot the cap.
14
+ */
15
+ export class SupabaseShareLinkStore {
16
+ clients;
17
+ events;
18
+ constructor(clients, events = new NoopEventSink()) {
19
+ this.clients = clients;
20
+ this.events = events;
21
+ }
22
+ async create(ctx, link) {
23
+ const { error } = await this.clients
24
+ .forRequest(ctx)
25
+ .from('share_links')
26
+ .insert(linkToRow(link));
27
+ if (error)
28
+ throw mapError(error);
29
+ await this.events.emit({
30
+ type: 'share_link.minted',
31
+ linkId: link.id,
32
+ definitionId: link.definitionId,
33
+ actorId: actorFrom(ctx)
34
+ });
35
+ }
36
+ async listByDefinition(ctx, definitionId, opts) {
37
+ const range = toRange(opts);
38
+ const { data, error, count } = await this.clients
39
+ .forRequest(ctx)
40
+ .from('share_links')
41
+ .select('*', { count: 'exact' })
42
+ .eq('definition_guid', definitionId)
43
+ .is('revoked_at', null)
44
+ .order('created_at', { ascending: false })
45
+ .range(range.from, range.to);
46
+ if (error)
47
+ throw mapError(error);
48
+ const items = (data ?? []).map(rowToLink);
49
+ return { items, nextCursor: nextCursorFromRange(range, items.length, count) };
50
+ }
51
+ async getById(ctx, id) {
52
+ const { data, error } = await this.clients
53
+ .forRequest(ctx)
54
+ .from('share_links')
55
+ .select('*')
56
+ .eq('id', id)
57
+ .maybeSingle();
58
+ if (error)
59
+ throw mapError(error);
60
+ return data ? rowToLink(data) : null;
61
+ }
62
+ async getByTokenHash(_ctx, tokenHash) {
63
+ // Service-role: token resolution must work for anonymous requests too.
64
+ // RLS would scope the query down to "links the current user can see"
65
+ // — exactly the wrong semantic for token-credentialed access.
66
+ const { data, error } = await this.clients.serviceClient
67
+ .from('share_links')
68
+ .select('*, definitions!inner(deleted_at)')
69
+ .eq('token_hash', tokenHash)
70
+ .is('revoked_at', null)
71
+ .is('definitions.deleted_at', null)
72
+ .maybeSingle();
73
+ if (error)
74
+ throw mapError(error);
75
+ return data ? rowToLink(data) : null;
76
+ }
77
+ async revoke(ctx, id) {
78
+ // Idempotent: succeeds whether or not the row exists / is already
79
+ // revoked. The `is null` predicate on revoked_at means a re-revoke
80
+ // is a no-op (no row updated).
81
+ const { error } = await this.clients
82
+ .forRequest(ctx)
83
+ .from('share_links')
84
+ .update({ revoked_at: new Date().toISOString() })
85
+ .eq('id', id)
86
+ .is('revoked_at', null);
87
+ if (error)
88
+ throw mapError(error);
89
+ await this.events.emit({ type: 'share_link.revoked', linkId: id, actorId: actorFrom(ctx) });
90
+ }
91
+ async tryIncrementSolveCount(_ctx, id) {
92
+ // SECURITY DEFINER RPC — bypasses RLS. Atomic check-and-increment.
93
+ // Returns NULL when the link is missing/revoked/expired/capped; the
94
+ // row update is the only way to get a numeric return.
95
+ const { data, error } = await this.clients.serviceClient.rpc('try_increment_share_link_solve_count', { link_id: id });
96
+ if (error)
97
+ throw mapError(error);
98
+ return typeof data === 'number' ? data : null;
99
+ }
100
+ }
101
+ function rowToLink(row) {
102
+ return {
103
+ id: row.id,
104
+ definitionId: row.definition_guid,
105
+ channel: row.channel,
106
+ tokenHash: row.token_hash,
107
+ name: row.name ?? undefined,
108
+ createdBy: row.created_by,
109
+ createdAt: row.created_at,
110
+ expiresAt: row.expires_at,
111
+ revokedAt: row.revoked_at,
112
+ allowSolve: row.allow_solve,
113
+ maxSolves: row.max_solves,
114
+ solveCount: row.solve_count
115
+ };
116
+ }
117
+ function linkToRow(l) {
118
+ return {
119
+ id: l.id,
120
+ definition_guid: l.definitionId,
121
+ channel: l.channel,
122
+ token_hash: l.tokenHash,
123
+ name: l.name ?? null,
124
+ created_by: l.createdBy,
125
+ created_at: l.createdAt,
126
+ expires_at: l.expiresAt ?? null,
127
+ revoked_at: l.revokedAt ?? null,
128
+ allow_solve: l.allowSolve,
129
+ max_solves: l.maxSolves ?? null,
130
+ solve_count: l.solveCount
131
+ };
132
+ }
133
+ function mapError(e) {
134
+ const pg = e;
135
+ if (pg?.code === '23505')
136
+ return new ProviderError(pg.message ?? 'Duplicate record', 409);
137
+ if (pg?.code === '23503')
138
+ return new ProviderError(pg.message ?? 'Foreign key violation', 409);
139
+ if (e instanceof Error)
140
+ return e;
141
+ if (e && typeof e === 'object') {
142
+ const obj = e;
143
+ const msg = obj.message ?? obj.details ?? obj.hint ?? 'Unknown Postgres error';
144
+ const err = new Error(obj.code ? `[${obj.code}] ${msg}` : msg);
145
+ Object.assign(err, obj);
146
+ return err;
147
+ }
148
+ return new Error(String(e));
149
+ }
150
+ //# sourceMappingURL=SupabaseShareLinkStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupabaseShareLinkStore.js","sourceRoot":"","sources":["../../src/data/SupabaseShareLinkStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=compute-server-conformance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-server-conformance.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/compute-server-conformance.test.ts"],"names":[],"mappings":""}