@selvajs/supabase-provider 0.14.4-beta.0 → 0.14.4-beta.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 (144) hide show
  1. package/LICENSE +1 -1
  2. package/dist/auth/SupabaseAuthProvider.d.ts.map +1 -1
  3. package/dist/auth/SupabaseAuthProvider.js +7 -14
  4. package/dist/auth/SupabaseAuthProvider.js.map +1 -1
  5. package/dist/data/SupabaseDataProvider.d.ts +13 -1
  6. package/dist/data/SupabaseDataProvider.d.ts.map +1 -1
  7. package/dist/data/SupabaseDataProvider.js +59 -0
  8. package/dist/data/SupabaseDataProvider.js.map +1 -1
  9. package/dist/data/SupabaseDefinitionStore.d.ts +1 -0
  10. package/dist/data/SupabaseDefinitionStore.d.ts.map +1 -1
  11. package/dist/data/SupabaseDefinitionStore.js +27 -1
  12. package/dist/data/SupabaseDefinitionStore.js.map +1 -1
  13. package/dist/data/index.d.ts +1 -0
  14. package/dist/data/index.d.ts.map +1 -1
  15. package/dist/data/index.js +1 -0
  16. package/dist/data/index.js.map +1 -1
  17. package/dist/data/migrationHead.d.ts +14 -0
  18. package/dist/data/migrationHead.d.ts.map +1 -0
  19. package/dist/data/migrationHead.js +14 -0
  20. package/dist/data/migrationHead.js.map +1 -0
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/permissions/SupabasePlatformPermissionStore.d.ts +5 -3
  26. package/dist/permissions/SupabasePlatformPermissionStore.d.ts.map +1 -1
  27. package/dist/permissions/SupabasePlatformPermissionStore.js +17 -30
  28. package/dist/permissions/SupabasePlatformPermissionStore.js.map +1 -1
  29. package/dist/storage/SupabaseStorageProvider.d.ts.map +1 -1
  30. package/dist/storage/SupabaseStorageProvider.js +3 -0
  31. package/dist/storage/SupabaseStorageProvider.js.map +1 -1
  32. package/package.json +13 -14
  33. package/supabase/.branches/_current_branch +1 -0
  34. package/supabase/.temp/cli-latest +1 -0
  35. package/supabase/migrations/20260712120000_user_profiles_disabled_and_gin.sql +95 -0
  36. package/supabase/migrations/20260712123000_selva_migration_head_fn.sql +38 -0
  37. package/supabase/migrations/20260713120000_selva_next_version_number.sql +59 -0
  38. package/supabase/migrations/20260713140000_selva_solve_cache_limit.sql +15 -0
  39. package/dist/auth/__tests__/conformance.test.d.ts +0 -2
  40. package/dist/auth/__tests__/conformance.test.d.ts.map +0 -1
  41. package/dist/auth/__tests__/conformance.test.js +0 -76
  42. package/dist/auth/__tests__/conformance.test.js.map +0 -1
  43. package/dist/auth/__tests__/token-verification.test.d.ts +0 -13
  44. package/dist/auth/__tests__/token-verification.test.d.ts.map +0 -1
  45. package/dist/auth/__tests__/token-verification.test.js +0 -135
  46. package/dist/auth/__tests__/token-verification.test.js.map +0 -1
  47. package/dist/data/__tests__/compute-server-conformance.test.d.ts +0 -2
  48. package/dist/data/__tests__/compute-server-conformance.test.d.ts.map +0 -1
  49. package/dist/data/__tests__/compute-server-conformance.test.js +0 -45
  50. package/dist/data/__tests__/compute-server-conformance.test.js.map +0 -1
  51. package/dist/data/__tests__/compute-server-encryption.test.d.ts +0 -12
  52. package/dist/data/__tests__/compute-server-encryption.test.d.ts.map +0 -1
  53. package/dist/data/__tests__/compute-server-encryption.test.js +0 -143
  54. package/dist/data/__tests__/compute-server-encryption.test.js.map +0 -1
  55. package/dist/data/__tests__/definition-conformance.test.d.ts +0 -2
  56. package/dist/data/__tests__/definition-conformance.test.d.ts.map +0 -1
  57. package/dist/data/__tests__/definition-conformance.test.js +0 -85
  58. package/dist/data/__tests__/definition-conformance.test.js.map +0 -1
  59. package/dist/data/__tests__/event-sink-conformance.test.d.ts +0 -2
  60. package/dist/data/__tests__/event-sink-conformance.test.d.ts.map +0 -1
  61. package/dist/data/__tests__/event-sink-conformance.test.js +0 -27
  62. package/dist/data/__tests__/event-sink-conformance.test.js.map +0 -1
  63. package/dist/data/__tests__/invite-conformance.test.d.ts +0 -2
  64. package/dist/data/__tests__/invite-conformance.test.d.ts.map +0 -1
  65. package/dist/data/__tests__/invite-conformance.test.js +0 -45
  66. package/dist/data/__tests__/invite-conformance.test.js.map +0 -1
  67. package/dist/data/__tests__/org-conformance.test.d.ts +0 -2
  68. package/dist/data/__tests__/org-conformance.test.d.ts.map +0 -1
  69. package/dist/data/__tests__/org-conformance.test.js +0 -29
  70. package/dist/data/__tests__/org-conformance.test.js.map +0 -1
  71. package/dist/data/__tests__/project-conformance.test.d.ts +0 -2
  72. package/dist/data/__tests__/project-conformance.test.d.ts.map +0 -1
  73. package/dist/data/__tests__/project-conformance.test.js +0 -57
  74. package/dist/data/__tests__/project-conformance.test.js.map +0 -1
  75. package/dist/data/__tests__/share-link-concurrency.test.d.ts +0 -22
  76. package/dist/data/__tests__/share-link-concurrency.test.d.ts.map +0 -1
  77. package/dist/data/__tests__/share-link-concurrency.test.js +0 -115
  78. package/dist/data/__tests__/share-link-concurrency.test.js.map +0 -1
  79. package/dist/data/__tests__/share-link-conformance.test.d.ts +0 -2
  80. package/dist/data/__tests__/share-link-conformance.test.d.ts.map +0 -1
  81. package/dist/data/__tests__/share-link-conformance.test.js +0 -88
  82. package/dist/data/__tests__/share-link-conformance.test.js.map +0 -1
  83. package/dist/data/__tests__/solve-metric-sink-conformance.test.d.ts +0 -2
  84. package/dist/data/__tests__/solve-metric-sink-conformance.test.d.ts.map +0 -1
  85. package/dist/data/__tests__/solve-metric-sink-conformance.test.js +0 -52
  86. package/dist/data/__tests__/solve-metric-sink-conformance.test.js.map +0 -1
  87. package/dist/data/__tests__/test-helpers.d.ts +0 -52
  88. package/dist/data/__tests__/test-helpers.d.ts.map +0 -1
  89. package/dist/data/__tests__/test-helpers.js +0 -177
  90. package/dist/data/__tests__/test-helpers.js.map +0 -1
  91. package/dist/permissions/__tests__/conformance.test.d.ts +0 -2
  92. package/dist/permissions/__tests__/conformance.test.d.ts.map +0 -1
  93. package/dist/permissions/__tests__/conformance.test.js +0 -27
  94. package/dist/permissions/__tests__/conformance.test.js.map +0 -1
  95. package/dist/storage/__tests__/conformance.test.d.ts +0 -2
  96. package/dist/storage/__tests__/conformance.test.d.ts.map +0 -1
  97. package/dist/storage/__tests__/conformance.test.js +0 -149
  98. package/dist/storage/__tests__/conformance.test.js.map +0 -1
  99. package/dist/userProfile/__tests__/conformance.test.d.ts +0 -2
  100. package/dist/userProfile/__tests__/conformance.test.d.ts.map +0 -1
  101. package/dist/userProfile/__tests__/conformance.test.js +0 -38
  102. package/dist/userProfile/__tests__/conformance.test.js.map +0 -1
  103. package/src/auth/SupabaseAuthProvider.ts +0 -600
  104. package/src/auth/__tests__/conformance.test.ts +0 -78
  105. package/src/auth/__tests__/token-verification.test.ts +0 -158
  106. package/src/auth/index.ts +0 -2
  107. package/src/cli/sync-migrations.ts +0 -133
  108. package/src/data/SupabaseAuditQuery.ts +0 -103
  109. package/src/data/SupabaseComputeServerStore.ts +0 -382
  110. package/src/data/SupabaseDataProvider.ts +0 -153
  111. package/src/data/SupabaseDefinitionStore.ts +0 -527
  112. package/src/data/SupabaseEventSink.ts +0 -30
  113. package/src/data/SupabaseInviteStore.ts +0 -171
  114. package/src/data/SupabaseOrgStore.ts +0 -508
  115. package/src/data/SupabaseProjectStore.ts +0 -431
  116. package/src/data/SupabaseShareLinkStore.ts +0 -176
  117. package/src/data/SupabaseSolveMetricSink.ts +0 -38
  118. package/src/data/__tests__/compute-server-conformance.test.ts +0 -46
  119. package/src/data/__tests__/compute-server-encryption.test.ts +0 -173
  120. package/src/data/__tests__/definition-conformance.test.ts +0 -89
  121. package/src/data/__tests__/event-sink-conformance.test.ts +0 -32
  122. package/src/data/__tests__/invite-conformance.test.ts +0 -46
  123. package/src/data/__tests__/org-conformance.test.ts +0 -30
  124. package/src/data/__tests__/project-conformance.test.ts +0 -57
  125. package/src/data/__tests__/share-link-concurrency.test.ts +0 -124
  126. package/src/data/__tests__/share-link-conformance.test.ts +0 -87
  127. package/src/data/__tests__/solve-metric-sink-conformance.test.ts +0 -59
  128. package/src/data/__tests__/test-helpers.ts +0 -188
  129. package/src/data/client.ts +0 -173
  130. package/src/data/errors.ts +0 -45
  131. package/src/data/index.ts +0 -29
  132. package/src/data/pagination.ts +0 -68
  133. package/src/data/query.ts +0 -22
  134. package/src/data/rowStamp.ts +0 -48
  135. package/src/index.ts +0 -42
  136. package/src/permissions/SupabasePlatformPermissionStore.ts +0 -161
  137. package/src/permissions/__tests__/conformance.test.ts +0 -28
  138. package/src/permissions/index.ts +0 -1
  139. package/src/storage/SupabaseStorageProvider.ts +0 -182
  140. package/src/storage/__tests__/conformance.test.ts +0 -152
  141. package/src/storage/index.ts +0 -2
  142. package/src/userProfile/SupabaseUserProfileProvider.ts +0 -177
  143. package/src/userProfile/__tests__/conformance.test.ts +0 -39
  144. package/src/userProfile/index.ts +0 -1
@@ -1,57 +0,0 @@
1
- import { describe, beforeEach, it } from 'vitest';
2
- import { runProjectStoreConformance } from '@selvajs/platform/testing';
3
- import { DEFAULT_ORG_PERMISSIONS } from '@selvajs/platform';
4
- import { SupabaseProjectStore } from '../SupabaseProjectStore.js';
5
- import { readEnv, resetAllData, seedUser } from './test-helpers.js';
6
- const envCtx = readEnv();
7
- if (!envCtx) {
8
- describe.skip('SupabaseProjectStore (skipped: no live stack)', () => {
9
- it('populate packages/providers/supabase/.env.test with Supabase creds to run these tests', () => { });
10
- });
11
- }
12
- else {
13
- describe('SupabaseProjectStore', () => {
14
- beforeEach(async () => {
15
- await resetAllData(envCtx);
16
- });
17
- runProjectStoreConformance({
18
- name: 'SupabaseProjectStore',
19
- createStore: async () => {
20
- // Seed an owner + an org so the project tests have an anchor.
21
- const { userId: ownerId, sessionToken: ownerSessionToken } = await seedUser(envCtx, '');
22
- const orgId = crypto.randomUUID();
23
- const now = new Date().toISOString();
24
- const admin = envCtx.adminClient;
25
- const { error: orgError } = await admin.from('orgs').insert({
26
- id: orgId,
27
- name: 'Conformance Org',
28
- slug: `conformance-${orgId.slice(0, 8)}`,
29
- owner_id: ownerId,
30
- created_at: now,
31
- updated_at: now
32
- });
33
- if (orgError)
34
- throw orgError;
35
- // And an owner membership with `manage_projects` so project
36
- // creates pass the `has_org_permission` policy under RLS.
37
- const { error: memberError } = await admin.from('org_members').insert({
38
- org_id: orgId,
39
- user_id: ownerId,
40
- role: 'owner',
41
- permissions: [...DEFAULT_ORG_PERMISSIONS.owner],
42
- joined_at: now
43
- });
44
- if (memberError)
45
- throw memberError;
46
- return {
47
- store: new SupabaseProjectStore(envCtx.bundle),
48
- orgId,
49
- ownerId,
50
- ownerSessionToken
51
- };
52
- },
53
- seedUser: (id) => seedUser(envCtx, id)
54
- });
55
- });
56
- }
57
- //# sourceMappingURL=project-conformance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-conformance.test.js","sourceRoot":"","sources":["../../../src/data/__tests__/project-conformance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;AAEzB,IAAI,CAAC,MAAM,EAAE,CAAC;IACb,QAAQ,CAAC,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACnE,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACJ,CAAC;KAAM,CAAC;IACP,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACrC,UAAU,CAAC,KAAK,IAAI,EAAE;YACrB,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,0BAA0B,CAAC;YAC1B,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,KAAK,IAAI,EAAE;gBACvB,8DAA8D;gBAC9D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACxF,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;gBACjC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;oBAC3D,EAAE,EAAE,KAAK;oBACT,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,eAAe,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oBACxC,QAAQ,EAAE,OAAO;oBACjB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,GAAG;iBACf,CAAC,CAAC;gBACH,IAAI,QAAQ;oBAAE,MAAM,QAAQ,CAAC;gBAC7B,4DAA4D;gBAC5D,0DAA0D;gBAC1D,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;oBACrE,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE,OAAO;oBAChB,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC;oBAC/C,SAAS,EAAE,GAAG;iBACd,CAAC,CAAC;gBACH,IAAI,WAAW;oBAAE,MAAM,WAAW,CAAC;gBAEnC,OAAO;oBACN,KAAK,EAAE,IAAI,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC9C,KAAK;oBACL,OAAO;oBACP,iBAAiB;iBACjB,CAAC;YACH,CAAC;YACD,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;SACtC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Audit Q4/Q5 — the concurrent-solve guarantee for share-link caps.
3
- *
4
- * `tryIncrementSolveCount` is the load-bearing race-sensitive method: the
5
- * `/api/compute` endpoint calls it BEFORE solving and turns a `null` return
6
- * (cap hit) into HTTP 429. Under concurrent solves against one capped link, the
7
- * cap must hold exactly — no overshoot, no lost update handing two solves the
8
- * same slot. Supabase provides this via the SECURITY DEFINER
9
- * `try_increment_share_link_solve_count` RPC, which does the check-and-increment
10
- * in a single statement.
11
- *
12
- * This lives in the Supabase suite (not the shared conformance suite or the app
13
- * route tests) because it is the ONLY backend that actually provides the
14
- * guarantee: the local provider's whole-file read-modify-write is a documented
15
- * dev-scale tradeoff and is not concurrency-safe. Skipped without a live stack,
16
- * matching the other conformance tests here.
17
- *
18
- * Complements the sequential cap/count tests at
19
- * `packages/selva/src/routes/api/compute/__tests__/solve-cap-and-count.test.ts`.
20
- */
21
- export {};
22
- //# sourceMappingURL=share-link-concurrency.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-link-concurrency.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/share-link-concurrency.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}
@@ -1,115 +0,0 @@
1
- /**
2
- * Audit Q4/Q5 — the concurrent-solve guarantee for share-link caps.
3
- *
4
- * `tryIncrementSolveCount` is the load-bearing race-sensitive method: the
5
- * `/api/compute` endpoint calls it BEFORE solving and turns a `null` return
6
- * (cap hit) into HTTP 429. Under concurrent solves against one capped link, the
7
- * cap must hold exactly — no overshoot, no lost update handing two solves the
8
- * same slot. Supabase provides this via the SECURITY DEFINER
9
- * `try_increment_share_link_solve_count` RPC, which does the check-and-increment
10
- * in a single statement.
11
- *
12
- * This lives in the Supabase suite (not the shared conformance suite or the app
13
- * route tests) because it is the ONLY backend that actually provides the
14
- * guarantee: the local provider's whole-file read-modify-write is a documented
15
- * dev-scale tradeoff and is not concurrency-safe. Skipped without a live stack,
16
- * matching the other conformance tests here.
17
- *
18
- * Complements the sequential cap/count tests at
19
- * `packages/selva/src/routes/api/compute/__tests__/solve-cap-and-count.test.ts`.
20
- */
21
- import { describe, it, expect, beforeEach } from 'vitest';
22
- import { SupabaseShareLinkStore } from '../SupabaseShareLinkStore.js';
23
- import { readEnv, resetAllData, seedUser } from './test-helpers.js';
24
- const envCtx = readEnv();
25
- if (!envCtx) {
26
- describe.skip('SupabaseShareLinkStore concurrency (skipped: no live stack)', () => {
27
- it('populate packages/providers/supabase/.env.test with Supabase creds to run these tests', () => { });
28
- });
29
- }
30
- else {
31
- const ctx = { userId: '', system: true };
32
- /** Seed org → project → definition → share link, all via service-role. */
33
- async function seedCappedLink(maxSolves) {
34
- const { userId: ownerId } = await seedUser(envCtx, '');
35
- const admin = envCtx.adminClient;
36
- const orgId = crypto.randomUUID();
37
- const projectId = crypto.randomUUID();
38
- const definitionId = crypto.randomUUID();
39
- const linkId = crypto.randomUUID();
40
- const now = new Date().toISOString();
41
- const { error: orgErr } = await admin.from('orgs').insert({
42
- id: orgId,
43
- name: 'Concurrency Org',
44
- slug: `conc-${orgId.slice(0, 8)}`,
45
- owner_id: ownerId,
46
- created_at: now,
47
- updated_at: now
48
- });
49
- if (orgErr)
50
- throw orgErr;
51
- const { error: projErr } = await admin.from('projects').insert({
52
- id: projectId,
53
- org_id: orgId,
54
- name: 'Project',
55
- slug: `proj-${projectId.slice(0, 8)}`,
56
- visibility: 'public',
57
- owner_id: ownerId,
58
- created_at: now,
59
- updated_at: now
60
- });
61
- if (projErr)
62
- throw projErr;
63
- const { error: defErr } = await admin.from('definitions').insert({
64
- guid: definitionId,
65
- project_id: projectId,
66
- owner_id: ownerId,
67
- display_name: 'Def',
68
- status: 'published',
69
- created_at: now,
70
- updated_at: now
71
- });
72
- if (defErr)
73
- throw defErr;
74
- const link = {
75
- id: linkId,
76
- definitionId,
77
- channel: 'live',
78
- tokenHash: crypto.randomUUID().replace(/-/g, ''),
79
- createdBy: ownerId,
80
- createdAt: now,
81
- expiresAt: null,
82
- revokedAt: null,
83
- allowSolve: true,
84
- maxSolves,
85
- solveCount: 0
86
- };
87
- const store = new SupabaseShareLinkStore(envCtx.bundle);
88
- await store.create(ctx, link);
89
- return { linkId };
90
- }
91
- describe('SupabaseShareLinkStore — concurrent solve-cap enforcement', () => {
92
- beforeEach(async () => {
93
- await resetAllData(envCtx);
94
- });
95
- it('N concurrent solves against a cap-K link admit exactly K, refuse the rest', async () => {
96
- const CAP = 5;
97
- const ATTEMPTS = 25;
98
- const { linkId } = await seedCappedLink(CAP);
99
- const store = new SupabaseShareLinkStore(envCtx.bundle);
100
- const outcomes = await Promise.all(Array.from({ length: ATTEMPTS }, () => store.tryIncrementSolveCount(ctx, linkId)));
101
- const admitted = outcomes.filter((n) => n !== null);
102
- const refused = outcomes.filter((n) => n === null);
103
- // Exactly CAP admitted — the atomic RPC never lets a concurrent burst
104
- // overshoot the cap.
105
- expect(admitted).toHaveLength(CAP);
106
- expect(refused).toHaveLength(ATTEMPTS - CAP);
107
- // Each admitted solve got a distinct slot 1..CAP — no lost update.
108
- expect([...admitted].sort((a, b) => a - b)).toEqual([1, 2, 3, 4, 5]);
109
- // The persisted count settles at exactly the cap.
110
- const finalLink = await store.getById(ctx, linkId);
111
- expect(finalLink?.solveCount).toBe(CAP);
112
- });
113
- });
114
- }
115
- //# sourceMappingURL=share-link-concurrency.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-link-concurrency.test.js","sourceRoot":"","sources":["../../../src/data/__tests__/share-link-concurrency.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=share-link-conformance.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-link-conformance.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/share-link-conformance.test.ts"],"names":[],"mappings":""}
@@ -1,88 +0,0 @@
1
- import { describe, beforeEach, it } from 'vitest';
2
- import { runShareLinkStoreConformance } from '@selvajs/platform/testing';
3
- import { DEFAULT_ORG_PERMISSIONS } from '@selvajs/platform';
4
- import { SupabaseShareLinkStore } from '../SupabaseShareLinkStore.js';
5
- import { readEnv, resetAllData, seedUser } from './test-helpers.js';
6
- const envCtx = readEnv();
7
- if (!envCtx) {
8
- describe.skip('SupabaseShareLinkStore (skipped: no live stack)', () => {
9
- it('populate packages/providers/supabase/.env.test with Supabase creds to run these tests', () => { });
10
- });
11
- }
12
- else {
13
- describe('SupabaseShareLinkStore', () => {
14
- beforeEach(async () => {
15
- await resetAllData(envCtx);
16
- });
17
- runShareLinkStoreConformance({
18
- name: 'SupabaseShareLinkStore',
19
- createStore: () => new SupabaseShareLinkStore(envCtx.bundle),
20
- createScope: async () => {
21
- // Seed: 1 owner + 1 org + 1 project + 2 definitions. Share links
22
- // FK to definitions, definitions FK to projects, projects FK to orgs.
23
- const { userId: ownerId, sessionToken: ownerSessionToken } = await seedUser(envCtx, '');
24
- const orgId = crypto.randomUUID();
25
- const projectId = crypto.randomUUID();
26
- const definitionId = crypto.randomUUID();
27
- const otherDefinitionId = crypto.randomUUID();
28
- const now = new Date().toISOString();
29
- const admin = envCtx.adminClient;
30
- const { error: orgError } = await admin.from('orgs').insert({
31
- id: orgId,
32
- name: 'Share Link Test Org',
33
- slug: `sl-test-${orgId.slice(0, 8)}`,
34
- owner_id: ownerId,
35
- created_at: now,
36
- updated_at: now
37
- });
38
- if (orgError)
39
- throw orgError;
40
- const { error: memberError } = await admin.from('org_members').insert({
41
- org_id: orgId,
42
- user_id: ownerId,
43
- role: 'owner',
44
- permissions: [...DEFAULT_ORG_PERMISSIONS.owner],
45
- joined_at: now
46
- });
47
- if (memberError)
48
- throw memberError;
49
- const { error: projError } = await admin.from('projects').insert({
50
- id: projectId,
51
- org_id: orgId,
52
- name: 'Project',
53
- slug: `proj-${projectId.slice(0, 8)}`,
54
- visibility: 'public',
55
- owner_id: ownerId,
56
- created_at: now,
57
- updated_at: now
58
- });
59
- if (projError)
60
- throw projError;
61
- const { error: defError } = await admin.from('definitions').insert([
62
- {
63
- guid: definitionId,
64
- project_id: projectId,
65
- owner_id: ownerId,
66
- display_name: 'Def A',
67
- status: 'published',
68
- created_at: now,
69
- updated_at: now
70
- },
71
- {
72
- guid: otherDefinitionId,
73
- project_id: projectId,
74
- owner_id: ownerId,
75
- display_name: 'Def B',
76
- status: 'published',
77
- created_at: now,
78
- updated_at: now
79
- }
80
- ]);
81
- if (defError)
82
- throw defError;
83
- return { ownerId, ownerSessionToken, definitionId, otherDefinitionId };
84
- }
85
- });
86
- });
87
- }
88
- //# sourceMappingURL=share-link-conformance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-link-conformance.test.js","sourceRoot":"","sources":["../../../src/data/__tests__/share-link-conformance.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=solve-metric-sink-conformance.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"solve-metric-sink-conformance.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/solve-metric-sink-conformance.test.ts"],"names":[],"mappings":""}
@@ -1,52 +0,0 @@
1
- import { describe, beforeEach, it } from 'vitest';
2
- import { runSolveMetricSinkConformance } from '@selvajs/platform/testing';
3
- import { SupabaseSolveMetricSink } from '../SupabaseSolveMetricSink.js';
4
- import { buildClientBundle } from '../client.js';
5
- import { readEnv, resetAllData } from './test-helpers.js';
6
- const envCtx = readEnv();
7
- if (!envCtx) {
8
- describe.skip('SupabaseSolveMetricSink (skipped: no live stack)', () => {
9
- it('populate packages/providers/supabase/.env.test with Supabase creds to run these tests', () => { });
10
- });
11
- }
12
- else {
13
- const ctx = envCtx;
14
- describe('SupabaseSolveMetricSink', () => {
15
- beforeEach(async () => {
16
- await resetAllData(ctx);
17
- });
18
- runSolveMetricSinkConformance({
19
- name: 'SupabaseSolveMetricSink',
20
- createSink: () => new SupabaseSolveMetricSink(ctx.bundle),
21
- readRows: async () => {
22
- const { data, error } = await ctx.adminClient
23
- .from('solve_metrics')
24
- .select('actor_id, definition_url, definition_id, version_id, channel, org_id, duration_ms, ok, failure_kind, error_count, warning_count')
25
- .order('occurred_at', { ascending: true });
26
- if (error)
27
- throw new Error(`solve_metrics read failed: ${error.message}`);
28
- return (data ?? []).map((r) => ({
29
- actorId: r.actor_id,
30
- definitionUrl: r.definition_url,
31
- definitionId: r.definition_id,
32
- versionId: r.version_id,
33
- channel: r.channel,
34
- orgId: r.org_id,
35
- durationMs: r.duration_ms,
36
- ok: r.ok,
37
- failureKind: r.failure_kind,
38
- errorCount: r.error_count,
39
- warningCount: r.warning_count
40
- }));
41
- },
42
- // Point the sink at a bundle whose service key is bogus, so the insert
43
- // fails. record() must still resolve (contract: never throw).
44
- createFailingSink: () => new SupabaseSolveMetricSink(buildClientBundle({
45
- supabaseUrl: ctx.url,
46
- anonKey: ctx.anonKey,
47
- serviceRoleKey: 'invalid-service-role-key'
48
- }))
49
- });
50
- });
51
- }
52
- //# sourceMappingURL=solve-metric-sink-conformance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"solve-metric-sink-conformance.test.js","sourceRoot":"","sources":["../../../src/data/__tests__/solve-metric-sink-conformance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAA4B,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;AAEzB,IAAI,CAAC,MAAM,EAAE,CAAC;IACb,QAAQ,CAAC,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QACtE,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACJ,CAAC;KAAM,CAAC;IACP,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACxC,UAAU,CAAC,KAAK,IAAI,EAAE;YACrB,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,6BAA6B,CAAC;YAC7B,IAAI,EAAE,yBAAyB;YAC/B,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC;YACzD,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACpB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,WAAW;qBAC3C,IAAI,CAAC,eAAe,CAAC;qBACrB,MAAM,CACN,iIAAiI,CACjI;qBACA,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5C,IAAI,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CACtB,CAAC,CAAC,EAAuB,EAAE,CAAC,CAAC;oBAC5B,OAAO,EAAE,CAAC,CAAC,QAAQ;oBACnB,aAAa,EAAE,CAAC,CAAC,cAAc;oBAC/B,YAAY,EAAE,CAAC,CAAC,aAAa;oBAC7B,SAAS,EAAE,CAAC,CAAC,UAAU;oBACvB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,KAAK,EAAE,CAAC,CAAC,MAAM;oBACf,UAAU,EAAE,CAAC,CAAC,WAAW;oBACzB,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,WAAW,EAAE,CAAC,CAAC,YAAY;oBAC3B,UAAU,EAAE,CAAC,CAAC,WAAW;oBACzB,YAAY,EAAE,CAAC,CAAC,aAAa;iBAC7B,CAAC,CACF,CAAC;YACH,CAAC;YACD,uEAAuE;YACvE,8DAA8D;YAC9D,iBAAiB,EAAE,GAAG,EAAE,CACvB,IAAI,uBAAuB,CAC1B,iBAAiB,CAAC;gBACjB,WAAW,EAAE,GAAG,CAAC,GAAG;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,cAAc,EAAE,0BAA0B;aAC1C,CAAC,CACF;SACF,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,52 +0,0 @@
1
- /**
2
- * Shared test helpers for Supabase data conformance tests.
3
- *
4
- * Every suite starts with a fully wiped DB so tests are isolated. We use the
5
- * service-role client for both — seeding users in `auth.users` and wiping
6
- * every relevant table.
7
- */
8
- import { type ClientBundle, type SelvaSchemaClient } from '../client.js';
9
- export interface TestContext {
10
- url: string;
11
- anonKey: string;
12
- serviceRoleKey: string;
13
- adminClient: SelvaSchemaClient;
14
- bundle: ClientBundle;
15
- }
16
- export declare function readEnv(): TestContext | null;
17
- /**
18
- * Reset every data table this adapter owns. Leaves Supabase-managed tables
19
- * (`auth.users`, etc.) alone except via `deleteAllAuthUsers` below.
20
- *
21
- * Order-sensitive because some FKs don't cascade: we go bottom up from
22
- * dependents to parents.
23
- */
24
- export declare function resetAllData(ctx: TestContext): Promise<void>;
25
- /**
26
- * Seed an `auth.users` row, mark the user as `instance_admin`, sign in, and
27
- * return the real id + access token. `auth.admin.createUser` doesn't accept a
28
- * caller-supplied id — Supabase generates one. The conformance suite calls us
29
- * with a *suggested* id (for adapters that honor it); we ignore it and return
30
- * GoTrue's real id.
31
- *
32
- * The instance_admin grant is what makes RLS open up for the conformance
33
- * tests: every policy in the schema accepts `is_instance_admin()` as a
34
- * universal pass, mirroring the `instance_admin` default in `makeCtx`.
35
- *
36
- * The session token is what makes RLS *see* the user at all. Without it, the
37
- * Supabase client falls back to the anon role and every write fails.
38
- */
39
- export declare function seedUser(ctx: TestContext, suggestedId: string): Promise<{
40
- userId: string;
41
- sessionToken: string;
42
- }>;
43
- /**
44
- * Variant of `seedUser` that leaves `platform_permissions` empty. Use this
45
- * when a test specifically asserts on a fresh user's permission state (e.g.
46
- * the platform-permission store conformance suite).
47
- */
48
- export declare function seedPlainUser(ctx: TestContext, suggestedId: string): Promise<{
49
- userId: string;
50
- sessionToken: string;
51
- }>;
52
- //# sourceMappingURL=test-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/test-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAqB,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE5F,MAAM,WAAW,WAAW;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE,YAAY,CAAC;CACrB;AAED,wBAAgB,OAAO,IAAI,WAAW,GAAG,IAAI,CAuB5C;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBlE;AAuCD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAC7B,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAEnD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAClC,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAEnD"}
@@ -1,177 +0,0 @@
1
- /**
2
- * Shared test helpers for Supabase data conformance tests.
3
- *
4
- * Every suite starts with a fully wiped DB so tests are isolated. We use the
5
- * service-role client for both — seeding users in `auth.users` and wiping
6
- * every relevant table.
7
- */
8
- import { createClient } from '@supabase/supabase-js';
9
- import { buildClientBundle } from '../client.js';
10
- export function readEnv() {
11
- const url = process.env.SUPABASE_URL;
12
- const anonKey = process.env.SUPABASE_ANON_KEY;
13
- const serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY;
14
- if (!url || !anonKey || !serviceRoleKey)
15
- return null;
16
- // `.env.test` is checked in with local-Supabase defaults so contributors can
17
- // `npx supabase start` and run the suite. But `createClient` transitively
18
- // loads `@supabase/realtime-js`, which on Node < 22 throws at construction
19
- // without a native WebSocket. Swallow that so the suite cleanly skips
20
- // instead of crashing test collection.
21
- let adminClient;
22
- try {
23
- adminClient = createClient(url, serviceRoleKey, {
24
- db: { schema: 'selva' },
25
- auth: { persistSession: false, autoRefreshToken: false }
26
- });
27
- }
28
- catch (err) {
29
- const msg = err instanceof Error ? err.message : String(err);
30
- if (msg.includes('WebSocket'))
31
- return null;
32
- throw err;
33
- }
34
- const bundle = buildClientBundle({ supabaseUrl: url, anonKey, serviceRoleKey });
35
- return { url, anonKey, serviceRoleKey, adminClient, bundle };
36
- }
37
- /**
38
- * Reset every data table this adapter owns. Leaves Supabase-managed tables
39
- * (`auth.users`, etc.) alone except via `deleteAllAuthUsers` below.
40
- *
41
- * Order-sensitive because some FKs don't cascade: we go bottom up from
42
- * dependents to parents.
43
- */
44
- export async function resetAllData(ctx) {
45
- await truncate(ctx, 'solve_metrics');
46
- await truncate(ctx, 'share_links');
47
- await truncate(ctx, 'invites');
48
- // Versions FK to definitions ON DELETE CASCADE, but `definitions` can't
49
- // be wiped while live/draft pointers reference versions (ON DELETE
50
- // RESTRICT, spec §6). Null the pointers, drop versions, then drop defs.
51
- await ctx.adminClient
52
- .from('definitions')
53
- .update({ live_version_id: null, draft_version_id: null })
54
- .not('guid', 'is', null);
55
- await truncate(ctx, 'definition_versions');
56
- await truncate(ctx, 'definitions');
57
- await truncate(ctx, 'project_members');
58
- // compute defaults have a platform_default sibling — reset all three.
59
- await truncate(ctx, 'compute_server_org_defaults');
60
- await truncate(ctx, 'compute_server_shares');
61
- await resetComputePlatformDefault(ctx);
62
- await truncate(ctx, 'compute_servers');
63
- await truncate(ctx, 'org_members');
64
- await truncate(ctx, 'orgs');
65
- await truncate(ctx, 'user_profiles');
66
- await deleteAllAuthUsers(ctx);
67
- }
68
- async function resetComputePlatformDefault(ctx) {
69
- // Singleton row — clear `default_server_id` rather than deleting.
70
- const { error } = await ctx.adminClient
71
- .from('compute_server_platform_default')
72
- .update({ default_server_id: null })
73
- .eq('singleton', true);
74
- if (error)
75
- throw error;
76
- }
77
- async function truncate(ctx, table) {
78
- const { error } = await ctx.adminClient
79
- .from(table)
80
- .delete()
81
- .neq(columnForDeleteAll(table), '00000000-0000-0000-0000-000000000000');
82
- if (error)
83
- throw error;
84
- }
85
- function columnForDeleteAll(table) {
86
- if (table === 'org_members')
87
- return 'user_id';
88
- if (table === 'project_members')
89
- return 'user_id';
90
- if (table === 'user_profiles')
91
- return 'user_id';
92
- if (table === 'definitions')
93
- return 'guid';
94
- if (table === 'definition_versions')
95
- return 'id';
96
- if (table === 'compute_server_org_defaults')
97
- return 'org_id';
98
- if (table === 'compute_server_shares')
99
- return 'server_id';
100
- return 'id';
101
- }
102
- async function deleteAllAuthUsers(ctx) {
103
- const { data, error } = await ctx.adminClient.auth.admin.listUsers({ perPage: 1000 });
104
- if (error)
105
- throw error;
106
- for (const user of data.users) {
107
- const { error: delError } = await ctx.adminClient.auth.admin.deleteUser(user.id);
108
- if (delError)
109
- throw delError;
110
- }
111
- }
112
- /**
113
- * Seed an `auth.users` row, mark the user as `instance_admin`, sign in, and
114
- * return the real id + access token. `auth.admin.createUser` doesn't accept a
115
- * caller-supplied id — Supabase generates one. The conformance suite calls us
116
- * with a *suggested* id (for adapters that honor it); we ignore it and return
117
- * GoTrue's real id.
118
- *
119
- * The instance_admin grant is what makes RLS open up for the conformance
120
- * tests: every policy in the schema accepts `is_instance_admin()` as a
121
- * universal pass, mirroring the `instance_admin` default in `makeCtx`.
122
- *
123
- * The session token is what makes RLS *see* the user at all. Without it, the
124
- * Supabase client falls back to the anon role and every write fails.
125
- */
126
- export async function seedUser(ctx, suggestedId) {
127
- return seedUserCore(ctx, suggestedId, { promoteToInstanceAdmin: true });
128
- }
129
- /**
130
- * Variant of `seedUser` that leaves `platform_permissions` empty. Use this
131
- * when a test specifically asserts on a fresh user's permission state (e.g.
132
- * the platform-permission store conformance suite).
133
- */
134
- export async function seedPlainUser(ctx, suggestedId) {
135
- return seedUserCore(ctx, suggestedId, { promoteToInstanceAdmin: false });
136
- }
137
- async function seedUserCore(ctx, _suggestedId, opts) {
138
- // Unique email per seed so repeated calls don't collide. GoTrue requires
139
- // an email even for password-less users.
140
- const email = `conformance-${crypto.randomUUID()}@conformance.test`;
141
- const password = 'conformance-test-password-1234';
142
- const { data, error } = await ctx.adminClient.auth.admin.createUser({
143
- email,
144
- password,
145
- email_confirm: true
146
- });
147
- if (error)
148
- throw error;
149
- const userId = data.user.id;
150
- if (opts.promoteToInstanceAdmin) {
151
- // Trigger auto-created the user_profiles row; promote to instance_admin
152
- // so every RLS policy treats this user as fully authorized. Mirrors the
153
- // `instance_admin` default in `makeCtx`.
154
- const { error: promoteError } = await ctx.adminClient
155
- .from('user_profiles')
156
- .update({ platform_permissions: ['instance_admin'] })
157
- .eq('user_id', userId);
158
- if (promoteError)
159
- throw promoteError;
160
- }
161
- // Sign in to get an access token. The conformance suite stuffs this into
162
- // `adapterContext.sessionToken` and our client.ts uses it to scope the
163
- // request to this user instead of falling back to anon.
164
- const signInClient = createClient(ctx.url, ctx.anonKey, {
165
- auth: { persistSession: false, autoRefreshToken: false }
166
- });
167
- const { data: session, error: signInError } = await signInClient.auth.signInWithPassword({
168
- email,
169
- password
170
- });
171
- if (signInError)
172
- throw signInError;
173
- if (!session.session)
174
- throw new Error('seedUser: signInWithPassword returned no session');
175
- return { userId, sessionToken: session.session.access_token };
176
- }
177
- //# sourceMappingURL=test-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/data/__tests__/test-helpers.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=conformance.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conformance.test.d.ts","sourceRoot":"","sources":["../../../src/permissions/__tests__/conformance.test.ts"],"names":[],"mappings":""}