@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,135 +0,0 @@
1
- /**
2
- * CI-runnable (no live stack) tests for §1b hybrid token verification. Stubs
3
- * the internal anon client's `getClaims` (local JWT verify) and `getUser`
4
- * (network GoTrue verify) so we can assert the network-call behavior directly.
5
- *
6
- * Contract:
7
- * - hybrid (default): verify locally via getClaims on every request; hit
8
- * getUser at most once per `revalidateMs` per session; a getUser rejection
9
- * during that recheck (sign-out / disabled) denies immediately.
10
- * - strict: getUser on every request.
11
- */
12
- import { describe, it, expect, vi, beforeEach } from 'vitest';
13
- import { SupabaseAuthProvider } from '../SupabaseAuthProvider.js';
14
- const URL = 'https://example.supabase.co';
15
- const ANON = 'anon-key';
16
- const SERVICE = 'service-key';
17
- /** Reach into the provider's private anon client and replace its auth surface. */
18
- function stubAnonAuth(provider) {
19
- const stub = { getClaims: vi.fn(), getUser: vi.fn() };
20
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
- provider.anon.auth.getClaims = stub.getClaims;
22
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
- provider.anon.auth.getUser = stub.getUser;
24
- return stub;
25
- }
26
- function okClaims(overrides = {}) {
27
- return {
28
- data: {
29
- claims: {
30
- sub: 'user-1',
31
- session_id: 'sess-1',
32
- email: 'u@example.com',
33
- exp: Math.floor(Date.now() / 1000) + 3600,
34
- ...overrides
35
- },
36
- header: {},
37
- signature: new Uint8Array()
38
- },
39
- error: null
40
- };
41
- }
42
- function okUser() {
43
- return {
44
- data: { user: { id: 'user-1', email: 'u@example.com', user_metadata: {} } },
45
- error: null
46
- };
47
- }
48
- describe('SupabaseAuthProvider — hybrid token verification', () => {
49
- beforeEach(() => vi.restoreAllMocks());
50
- it('verifies locally via getClaims and rechecks getUser once per window', async () => {
51
- const provider = new SupabaseAuthProvider({
52
- supabaseUrl: URL,
53
- anonKey: ANON,
54
- serviceRoleKey: SERVICE,
55
- revalidateMs: 60_000
56
- });
57
- const stub = stubAnonAuth(provider);
58
- stub.getClaims.mockResolvedValue(okClaims());
59
- stub.getUser.mockResolvedValue(okUser());
60
- // First call: local verify + one recheck (never seen this session).
61
- const a = await provider.verifyToken('tok');
62
- expect(a?.id).toBe('user-1');
63
- expect(stub.getClaims).toHaveBeenCalledTimes(1);
64
- expect(stub.getUser).toHaveBeenCalledTimes(1);
65
- // Subsequent calls within the window: local only, NO more getUser.
66
- await provider.verifyToken('tok');
67
- await provider.verifyToken('tok');
68
- expect(stub.getClaims).toHaveBeenCalledTimes(3);
69
- expect(stub.getUser).toHaveBeenCalledTimes(1); // still just the first
70
- });
71
- it('denies immediately when the periodic getUser recheck rejects (signed out / revoked)', async () => {
72
- const provider = new SupabaseAuthProvider({
73
- supabaseUrl: URL,
74
- anonKey: ANON,
75
- serviceRoleKey: SERVICE
76
- });
77
- const stub = stubAnonAuth(provider);
78
- stub.getClaims.mockResolvedValue(okClaims());
79
- stub.getUser.mockResolvedValue({ data: { user: null }, error: { message: 'signed out' } });
80
- const result = await provider.verifyToken('tok');
81
- expect(result).toBeNull();
82
- });
83
- it('denies when the claims already mark the user disabled (no getUser needed)', async () => {
84
- const provider = new SupabaseAuthProvider({
85
- supabaseUrl: URL,
86
- anonKey: ANON,
87
- serviceRoleKey: SERVICE
88
- });
89
- const stub = stubAnonAuth(provider);
90
- stub.getClaims.mockResolvedValue(okClaims({ user_metadata: { disabled: true } }));
91
- const result = await provider.verifyToken('tok');
92
- expect(result).toBeNull();
93
- expect(stub.getUser).not.toHaveBeenCalled();
94
- });
95
- it('denies when getClaims fails (bad signature / expired)', async () => {
96
- const provider = new SupabaseAuthProvider({
97
- supabaseUrl: URL,
98
- anonKey: ANON,
99
- serviceRoleKey: SERVICE
100
- });
101
- const stub = stubAnonAuth(provider);
102
- stub.getClaims.mockResolvedValue({ data: null, error: { message: 'invalid JWT' } });
103
- expect(await provider.verifyToken('tok')).toBeNull();
104
- expect(stub.getUser).not.toHaveBeenCalled();
105
- });
106
- it('returns null for an empty token without any network call', async () => {
107
- const provider = new SupabaseAuthProvider({
108
- supabaseUrl: URL,
109
- anonKey: ANON,
110
- serviceRoleKey: SERVICE
111
- });
112
- const stub = stubAnonAuth(provider);
113
- expect(await provider.verifyToken('')).toBeNull();
114
- expect(stub.getClaims).not.toHaveBeenCalled();
115
- expect(stub.getUser).not.toHaveBeenCalled();
116
- });
117
- });
118
- describe('SupabaseAuthProvider — strict token verification', () => {
119
- beforeEach(() => vi.restoreAllMocks());
120
- it('calls getUser on every request and never getClaims', async () => {
121
- const provider = new SupabaseAuthProvider({
122
- supabaseUrl: URL,
123
- anonKey: ANON,
124
- serviceRoleKey: SERVICE,
125
- tokenVerification: 'strict'
126
- });
127
- const stub = stubAnonAuth(provider);
128
- stub.getUser.mockResolvedValue(okUser());
129
- await provider.verifyToken('tok');
130
- await provider.verifyToken('tok');
131
- expect(stub.getUser).toHaveBeenCalledTimes(2);
132
- expect(stub.getClaims).not.toHaveBeenCalled();
133
- });
134
- });
135
- //# sourceMappingURL=token-verification.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-verification.test.js","sourceRoot":"","sources":["../../../src/auth/__tests__/token-verification.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=compute-server-conformance.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compute-server-conformance.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/compute-server-conformance.test.ts"],"names":[],"mappings":""}
@@ -1,45 +0,0 @@
1
- import { describe, beforeEach, it } from 'vitest';
2
- import { randomBytes } from 'node:crypto';
3
- import { runComputeServerStoreConformance } from '@selvajs/platform/testing';
4
- import { SupabaseComputeServerStore } from '../SupabaseComputeServerStore.js';
5
- import { readEnv, resetAllData, seedUser } from './test-helpers.js';
6
- const envCtx = readEnv();
7
- // A throwaway at-rest key so the store encrypts apiKeys during the suite. The
8
- // round-trip (encrypt on write, decrypt on read) must be transparent to the
9
- // conformance assertions, which compare plaintext apiKeys.
10
- const TEST_SECRET_KEY = randomBytes(32);
11
- if (!envCtx) {
12
- describe.skip('SupabaseComputeServerStore (skipped: no live stack)', () => {
13
- it('populate packages/providers/supabase/.env.test with Supabase creds to run these tests', () => { });
14
- });
15
- }
16
- else {
17
- describe('SupabaseComputeServerStore', () => {
18
- beforeEach(async () => {
19
- await resetAllData(envCtx);
20
- });
21
- runComputeServerStoreConformance({
22
- name: 'SupabaseComputeServerStore',
23
- createStore: () => new SupabaseComputeServerStore(envCtx.bundle, TEST_SECRET_KEY),
24
- seedOrg: async (orgId) => {
25
- // `compute_servers.owner_org_id` and `compute_server_org_defaults.org_id`
26
- // FK to `orgs(id)`; the suite invents an `orgId` per org-scoped test,
27
- // so we materialize the parent org here. Owner is a throwaway user
28
- // (the org-scoped tests use SYSTEM_CONTEXT for writes anyway).
29
- const { userId } = await seedUser(envCtx, '');
30
- const now = new Date().toISOString();
31
- const { error } = await envCtx.adminClient.from('orgs').insert({
32
- id: orgId,
33
- name: 'Compute Test Org',
34
- slug: `compute-${orgId.slice(0, 8)}`,
35
- owner_id: userId,
36
- created_at: now,
37
- updated_at: now
38
- });
39
- if (error)
40
- throw error;
41
- }
42
- });
43
- });
44
- }
45
- //# sourceMappingURL=compute-server-conformance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compute-server-conformance.test.js","sourceRoot":"","sources":["../../../src/data/__tests__/compute-server-conformance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;AAEzB,8EAA8E;AAC9E,4EAA4E;AAC5E,2DAA2D;AAC3D,MAAM,eAAe,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;AAExC,IAAI,CAAC,MAAM,EAAE,CAAC;IACb,QAAQ,CAAC,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;QACzE,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACJ,CAAC;KAAM,CAAC;IACP,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC3C,UAAU,CAAC,KAAK,IAAI,EAAE;YACrB,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,gCAAgC,CAAC;YAChC,IAAI,EAAE,4BAA4B;YAClC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,0BAA0B,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;YACjF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACxB,0EAA0E;gBAC1E,sEAAsE;gBACtE,mEAAmE;gBACnE,+DAA+D;gBAC/D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;oBAC9D,EAAE,EAAE,KAAK;oBACT,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,WAAW,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oBACpC,QAAQ,EAAE,MAAM;oBAChB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,GAAG;iBACf,CAAC,CAAC;gBACH,IAAI,KAAK;oBAAE,MAAM,KAAK,CAAC;YACxB,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * CI-runnable (no live stack) unit tests for at-rest encryption of
3
- * `compute_servers.api_key`. Uses a minimal fake of the Supabase query builder
4
- * that records `insert` payloads and serves canned `select` rows, so we can
5
- * assert the exact bytes that would reach the DB without a real Postgres.
6
- *
7
- * The security property under test: a plaintext apiKey handed to the store is
8
- * NEVER written verbatim — the DB only ever sees an `enc:v1:` envelope — and it
9
- * round-trips back to plaintext on read.
10
- */
11
- export {};
12
- //# sourceMappingURL=compute-server-encryption.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compute-server-encryption.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/compute-server-encryption.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1,143 +0,0 @@
1
- /**
2
- * CI-runnable (no live stack) unit tests for at-rest encryption of
3
- * `compute_servers.api_key`. Uses a minimal fake of the Supabase query builder
4
- * that records `insert` payloads and serves canned `select` rows, so we can
5
- * assert the exact bytes that would reach the DB without a real Postgres.
6
- *
7
- * The security property under test: a plaintext apiKey handed to the store is
8
- * NEVER written verbatim — the DB only ever sees an `enc:v1:` envelope — and it
9
- * round-trips back to plaintext on read.
10
- */
11
- import { describe, it, expect, vi, beforeEach } from 'vitest';
12
- import { randomBytes } from 'node:crypto';
13
- import { isEncryptedSecret, decryptSecret } from '@selvajs/platform/computeServer';
14
- import { SupabaseComputeServerStore } from '../SupabaseComputeServerStore.js';
15
- const SYSTEM_CTX = { userId: '', system: true };
16
- const KEY = randomBytes(32);
17
- /**
18
- * Records every `insert` payload and returns canned rows for each table's
19
- * `select`. Only the fragments the store actually chains are implemented; the
20
- * builder is thenable so `await client.from(...).select(...)` resolves.
21
- */
22
- function fakeBundle(selectRows = {}) {
23
- const inserted = {};
24
- function builder(table) {
25
- const result = { data: selectRows[table] ?? [], error: null };
26
- const chain = {
27
- select: () => ({
28
- ...chain,
29
- eq: () => ({ ...chain, maybeSingle: async () => ({ data: null, error: null }) }),
30
- then: (resolve) => resolve(result)
31
- }),
32
- insert: (rows) => {
33
- inserted[table] = (inserted[table] ?? []).concat(rows);
34
- return { error: null };
35
- },
36
- delete: () => ({ eq: () => ({ eq: () => ({ error: null }), error: null }) }),
37
- update: () => ({ eq: () => ({ error: null }) }),
38
- upsert: () => ({ error: null })
39
- };
40
- return chain;
41
- }
42
- const client = { from: (t) => builder(t) };
43
- const bundle = {
44
- serviceClient: client,
45
- forRequest: () => client
46
- };
47
- return { bundle, inserted };
48
- }
49
- describe('SupabaseComputeServerStore — apiKey encryption at rest', () => {
50
- beforeEach(() => vi.restoreAllMocks());
51
- it('encrypts apiKey before insert — DB never sees plaintext', async () => {
52
- const { bundle, inserted } = fakeBundle();
53
- const store = new SupabaseComputeServerStore(bundle, KEY);
54
- await store.savePlatformServers(SYSTEM_CTX, [
55
- {
56
- id: 's1',
57
- label: 'prod',
58
- serverUrl: 'https://compute.example.com',
59
- apiKey: 'super-secret-key',
60
- scope: 'platform',
61
- sharedWith: 'all'
62
- }
63
- ], 's1');
64
- const rows = inserted['compute_servers'];
65
- expect(rows).toHaveLength(1);
66
- expect(rows[0].api_key).not.toBe('super-secret-key');
67
- expect(isEncryptedSecret(rows[0].api_key)).toBe(true);
68
- // And it's genuinely our plaintext under the envelope.
69
- expect(decryptSecret(rows[0].api_key, KEY)).toBe('super-secret-key');
70
- });
71
- it('decrypts apiKey on read — callers see plaintext', async () => {
72
- // Seed the "DB" with an already-encrypted row.
73
- const { encryptSecret } = await import('@selvajs/platform/computeServer');
74
- const envelope = encryptSecret('round-trip-key', KEY);
75
- const { bundle } = fakeBundle({
76
- compute_servers: [
77
- {
78
- id: 's1',
79
- scope: 'platform',
80
- owner_org_id: null,
81
- shared_with_all: true,
82
- label: 'prod',
83
- server_url: 'https://compute.example.com',
84
- api_key: envelope,
85
- timeout_ms: null,
86
- retry_count: null
87
- }
88
- ]
89
- });
90
- const store = new SupabaseComputeServerStore(bundle, KEY);
91
- const config = await store.getConfig(SYSTEM_CTX);
92
- expect(config.servers).toHaveLength(1);
93
- expect(config.servers[0].apiKey).toBe('round-trip-key');
94
- });
95
- it('throws rather than persist plaintext when no key is configured', async () => {
96
- const { bundle } = fakeBundle();
97
- const store = new SupabaseComputeServerStore(bundle); // no key
98
- await expect(store.savePlatformServers(SYSTEM_CTX, [
99
- {
100
- id: 's1',
101
- label: 'prod',
102
- serverUrl: 'https://compute.example.com',
103
- apiKey: 'secret',
104
- scope: 'platform',
105
- sharedWith: 'all'
106
- }
107
- ], 's1')).rejects.toThrow(/SELVA_AT_REST_KEY/);
108
- });
109
- it('verifySecrets flags a plaintext row', async () => {
110
- const { bundle } = fakeBundle({
111
- compute_servers: [{ id: 's1', label: 'legacy', api_key: 'raw-plaintext' }]
112
- });
113
- const store = new SupabaseComputeServerStore(bundle, KEY);
114
- const report = await store.verifySecrets();
115
- expect(report.ok).toBe(false);
116
- expect(report.plaintextFound).toBe(true);
117
- expect(report.failures).toEqual([
118
- { serverId: 's1', serverLabel: 'legacy', reason: 'plaintext_on_disk' }
119
- ]);
120
- });
121
- it('verifySecrets reports key_mismatch when the at-rest key rotated', async () => {
122
- const { encryptSecret } = await import('@selvajs/platform/computeServer');
123
- const envelope = encryptSecret('secret', randomBytes(32)); // different key
124
- const { bundle } = fakeBundle({
125
- compute_servers: [{ id: 's1', label: 'prod', api_key: envelope }]
126
- });
127
- const store = new SupabaseComputeServerStore(bundle, KEY);
128
- const report = await store.verifySecrets();
129
- expect(report.ok).toBe(false);
130
- expect(report.plaintextFound).toBe(false);
131
- expect(report.failures[0]).toMatchObject({ serverId: 's1', reason: 'key_mismatch' });
132
- });
133
- it('verifySecrets returns ok when every apiKey decrypts', async () => {
134
- const { encryptSecret } = await import('@selvajs/platform/computeServer');
135
- const { bundle } = fakeBundle({
136
- compute_servers: [{ id: 's1', label: 'prod', api_key: encryptSecret('k', KEY) }]
137
- });
138
- const store = new SupabaseComputeServerStore(bundle, KEY);
139
- const report = await store.verifySecrets();
140
- expect(report).toEqual({ ok: true, failures: [], plaintextFound: false });
141
- });
142
- });
143
- //# sourceMappingURL=compute-server-encryption.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compute-server-encryption.test.js","sourceRoot":"","sources":["../../../src/data/__tests__/compute-server-encryption.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=definition-conformance.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"definition-conformance.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/definition-conformance.test.ts"],"names":[],"mappings":""}
@@ -1,85 +0,0 @@
1
- import { describe, beforeEach, it } from 'vitest';
2
- import { runDefinitionStoreConformance } from '@selvajs/platform/testing';
3
- import { DEFAULT_ORG_PERMISSIONS } from '@selvajs/platform';
4
- import { SupabaseDefinitionStore } from '../SupabaseDefinitionStore.js';
5
- import { readEnv, resetAllData, seedUser } from './test-helpers.js';
6
- const envCtx = readEnv();
7
- if (!envCtx) {
8
- describe.skip('SupabaseDefinitionStore (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('SupabaseDefinitionStore', () => {
14
- beforeEach(async () => {
15
- await resetAllData(envCtx);
16
- });
17
- runDefinitionStoreConformance({
18
- name: 'SupabaseDefinitionStore',
19
- createStore: () => new SupabaseDefinitionStore(envCtx.bundle),
20
- createScope: async () => {
21
- // Seed: 1 owner + 1 secondary user + 1 org + 2 projects. Definitions
22
- // created in the suite FK to one of those two projects.
23
- const { userId: ownerId, sessionToken: ownerSessionToken } = await seedUser(envCtx, '');
24
- const { userId: secondaryUserId, sessionToken: secondaryUserSessionToken } = await seedUser(envCtx, '');
25
- const orgId = crypto.randomUUID();
26
- const projectId = crypto.randomUUID();
27
- const secondaryProjectId = 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: 'Definition Test Org',
33
- slug: `def-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: p1Error } = await admin.from('projects').insert([
50
- {
51
- id: projectId,
52
- org_id: orgId,
53
- name: 'Project A',
54
- slug: `proj-a-${projectId.slice(0, 8)}`,
55
- visibility: 'public',
56
- owner_id: ownerId,
57
- created_at: now,
58
- updated_at: now
59
- },
60
- {
61
- id: secondaryProjectId,
62
- org_id: orgId,
63
- name: 'Project B',
64
- slug: `proj-b-${secondaryProjectId.slice(0, 8)}`,
65
- visibility: 'public',
66
- owner_id: ownerId,
67
- created_at: now,
68
- updated_at: now
69
- }
70
- ]);
71
- if (p1Error)
72
- throw p1Error;
73
- return {
74
- ownerId,
75
- ownerSessionToken,
76
- projectId,
77
- secondaryProjectId,
78
- secondaryUserId,
79
- secondaryUserSessionToken
80
- };
81
- }
82
- });
83
- });
84
- }
85
- //# sourceMappingURL=definition-conformance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"definition-conformance.test.js","sourceRoot":"","sources":["../../../src/data/__tests__/definition-conformance.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=event-sink-conformance.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-sink-conformance.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/event-sink-conformance.test.ts"],"names":[],"mappings":""}
@@ -1,27 +0,0 @@
1
- import { describe, beforeEach, it } from 'vitest';
2
- import { runEventSinkConformance } from '@selvajs/platform/testing';
3
- import { SupabaseDataProvider } from '../SupabaseDataProvider.js';
4
- import { readEnv, resetAllData, seedUser } from './test-helpers.js';
5
- const envCtx = readEnv();
6
- if (!envCtx) {
7
- describe.skip('SupabaseDataProvider event-sink (skipped: no live stack)', () => {
8
- it('populate packages/providers/supabase/.env.test with Supabase creds to run these tests', () => { });
9
- });
10
- }
11
- else {
12
- describe('SupabaseDataProvider event-sink', () => {
13
- beforeEach(async () => {
14
- await resetAllData(envCtx);
15
- });
16
- runEventSinkConformance({
17
- name: 'SupabaseDataProvider',
18
- createProvider: (sink) => SupabaseDataProvider.create({
19
- supabaseUrl: envCtx.url,
20
- anonKey: envCtx.anonKey,
21
- serviceRoleKey: envCtx.serviceRoleKey
22
- }, sink),
23
- createActorId: () => seedUser(envCtx, '')
24
- });
25
- });
26
- }
27
- //# sourceMappingURL=event-sink-conformance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-sink-conformance.test.js","sourceRoot":"","sources":["../../../src/data/__tests__/event-sink-conformance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAA2B,MAAM,2BAA2B,CAAC;AAC7F,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,0DAA0D,EAAE,GAAG,EAAE;QAC9E,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACJ,CAAC;KAAM,CAAC;IACP,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAChD,UAAU,CAAC,KAAK,IAAI,EAAE;YACrB,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,uBAAuB,CAAC;YACvB,IAAI,EAAE,sBAAsB;YAC5B,cAAc,EAAE,CAAC,IAAwB,EAAE,EAAE,CAC5C,oBAAoB,CAAC,MAAM,CAC1B;gBACC,WAAW,EAAE,MAAM,CAAC,GAAG;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,cAAc,EAAE,MAAM,CAAC,cAAc;aACrC,EACD,IAAI,CACJ;YACF,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;SACzC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=invite-conformance.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invite-conformance.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/invite-conformance.test.ts"],"names":[],"mappings":""}
@@ -1,45 +0,0 @@
1
- import { describe, beforeEach, it } from 'vitest';
2
- import { runInviteStoreConformance } from '@selvajs/platform/testing';
3
- import { DEFAULT_ORG_PERMISSIONS } from '@selvajs/platform';
4
- import { SupabaseInviteStore } from '../SupabaseInviteStore.js';
5
- import { readEnv, resetAllData, seedUser } from './test-helpers.js';
6
- const envCtx = readEnv();
7
- if (!envCtx) {
8
- describe.skip('SupabaseInviteStore (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('SupabaseInviteStore', () => {
14
- beforeEach(async () => {
15
- await resetAllData(envCtx);
16
- });
17
- runInviteStoreConformance({
18
- name: 'SupabaseInviteStore',
19
- createStore: () => new SupabaseInviteStore(envCtx.bundle),
20
- createScope: async () => {
21
- const { userId: adminId, sessionToken: adminSessionToken } = await seedUser(envCtx, '');
22
- const orgId = crypto.randomUUID();
23
- const now = new Date().toISOString();
24
- await envCtx.adminClient.from('orgs').insert({
25
- id: orgId,
26
- name: 'Invite Test Org',
27
- slug: `invite-test-${orgId.slice(0, 8)}`,
28
- owner_id: adminId,
29
- created_at: now,
30
- updated_at: now
31
- });
32
- await envCtx.adminClient.from('org_members').insert({
33
- org_id: orgId,
34
- user_id: adminId,
35
- role: 'owner',
36
- permissions: [...DEFAULT_ORG_PERMISSIONS.owner],
37
- joined_at: now
38
- });
39
- return { adminId, adminSessionToken, orgId };
40
- },
41
- seedUser: (id) => seedUser(envCtx, id)
42
- });
43
- });
44
- }
45
- //# sourceMappingURL=invite-conformance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invite-conformance.test.js","sourceRoot":"","sources":["../../../src/data/__tests__/invite-conformance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,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,8CAA8C,EAAE,GAAG,EAAE;QAClE,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACJ,CAAC;KAAM,CAAC;IACP,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACpC,UAAU,CAAC,KAAK,IAAI,EAAE;YACrB,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,yBAAyB,CAAC;YACzB,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC;YACzD,WAAW,EAAE,KAAK,IAAI,EAAE;gBACvB,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,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;oBAC5C,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,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;oBACnD,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,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;YAC9C,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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=org-conformance.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"org-conformance.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/org-conformance.test.ts"],"names":[],"mappings":""}
@@ -1,29 +0,0 @@
1
- import { describe, beforeEach, it } from 'vitest';
2
- import { runOrgStoreConformance } from '@selvajs/platform/testing';
3
- import { SupabaseOrgStore } from '../SupabaseOrgStore.js';
4
- import { SupabaseInviteStore } from '../SupabaseInviteStore.js';
5
- import { SupabaseComputeServerStore } from '../SupabaseComputeServerStore.js';
6
- import { readEnv, resetAllData, seedUser } from './test-helpers.js';
7
- const envCtx = readEnv();
8
- if (!envCtx) {
9
- describe.skip('SupabaseOrgStore (skipped: no live stack)', () => {
10
- it('populate packages/providers/supabase/.env.test with Supabase creds to run these tests', () => { });
11
- });
12
- }
13
- else {
14
- describe('SupabaseOrgStore', () => {
15
- beforeEach(async () => {
16
- await resetAllData(envCtx);
17
- });
18
- runOrgStoreConformance({
19
- name: 'SupabaseOrgStore',
20
- createStore: () => new SupabaseOrgStore(envCtx.bundle),
21
- seedUser: (id) => seedUser(envCtx, id),
22
- createCompanionStores: () => ({
23
- invites: new SupabaseInviteStore(envCtx.bundle),
24
- computeServer: new SupabaseComputeServerStore(envCtx.bundle)
25
- })
26
- });
27
- });
28
- }
29
- //# sourceMappingURL=org-conformance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"org-conformance.test.js","sourceRoot":"","sources":["../../../src/data/__tests__/org-conformance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,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,2CAA2C,EAAE,GAAG,EAAE;QAC/D,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACJ,CAAC;KAAM,CAAC;IACP,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QACjC,UAAU,CAAC,KAAK,IAAI,EAAE;YACrB,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,sBAAsB,CAAC;YACtB,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;YACtD,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7B,OAAO,EAAE,IAAI,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC/C,aAAa,EAAE,IAAI,0BAA0B,CAAC,MAAM,CAAC,MAAM,CAAC;aAC5D,CAAC;SACF,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=project-conformance.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-conformance.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/project-conformance.test.ts"],"names":[],"mappings":""}