@selvajs/supabase-provider 0.14.3 → 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.
- package/LICENSE +1 -1
- package/dist/auth/SupabaseAuthProvider.d.ts +57 -0
- package/dist/auth/SupabaseAuthProvider.d.ts.map +1 -1
- package/dist/auth/SupabaseAuthProvider.js +123 -18
- package/dist/auth/SupabaseAuthProvider.js.map +1 -1
- package/dist/data/SupabaseComputeServerStore.d.ts +34 -2
- package/dist/data/SupabaseComputeServerStore.d.ts.map +1 -1
- package/dist/data/SupabaseComputeServerStore.js +146 -39
- package/dist/data/SupabaseComputeServerStore.js.map +1 -1
- package/dist/data/SupabaseDataProvider.d.ts +18 -3
- package/dist/data/SupabaseDataProvider.d.ts.map +1 -1
- package/dist/data/SupabaseDataProvider.js +83 -18
- package/dist/data/SupabaseDataProvider.js.map +1 -1
- package/dist/data/SupabaseDefinitionStore.d.ts +3 -1
- package/dist/data/SupabaseDefinitionStore.d.ts.map +1 -1
- package/dist/data/SupabaseDefinitionStore.js +94 -67
- package/dist/data/SupabaseDefinitionStore.js.map +1 -1
- package/dist/data/SupabaseInviteStore.d.ts.map +1 -1
- package/dist/data/SupabaseInviteStore.js +11 -22
- package/dist/data/SupabaseInviteStore.js.map +1 -1
- package/dist/data/SupabaseOrgStore.d.ts.map +1 -1
- package/dist/data/SupabaseOrgStore.js +49 -86
- package/dist/data/SupabaseOrgStore.js.map +1 -1
- package/dist/data/SupabaseProjectStore.d.ts.map +1 -1
- package/dist/data/SupabaseProjectStore.js +51 -70
- package/dist/data/SupabaseProjectStore.js.map +1 -1
- package/dist/data/SupabaseShareLinkStore.d.ts.map +1 -1
- package/dist/data/SupabaseShareLinkStore.js +13 -27
- package/dist/data/SupabaseShareLinkStore.js.map +1 -1
- package/dist/data/client.d.ts +35 -3
- package/dist/data/client.d.ts.map +1 -1
- package/dist/data/client.js +67 -16
- package/dist/data/client.js.map +1 -1
- package/dist/data/errors.d.ts +2 -0
- package/dist/data/errors.d.ts.map +1 -0
- package/dist/data/errors.js +23 -0
- package/dist/data/errors.js.map +1 -0
- package/dist/data/index.d.ts +8 -2
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +6 -1
- package/dist/data/index.js.map +1 -1
- package/dist/data/migrationHead.d.ts +14 -0
- package/dist/data/migrationHead.d.ts.map +1 -0
- package/dist/data/migrationHead.js +14 -0
- package/dist/data/migrationHead.js.map +1 -0
- package/dist/data/query.d.ts +20 -0
- package/dist/data/query.d.ts.map +1 -0
- package/dist/data/query.js +13 -0
- package/dist/data/query.js.map +1 -0
- package/dist/data/rowStamp.d.ts +38 -0
- package/dist/data/rowStamp.d.ts.map +1 -0
- package/dist/data/rowStamp.js +43 -0
- package/dist/data/rowStamp.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/permissions/SupabasePlatformPermissionStore.d.ts +5 -3
- package/dist/permissions/SupabasePlatformPermissionStore.d.ts.map +1 -1
- package/dist/permissions/SupabasePlatformPermissionStore.js +17 -30
- package/dist/permissions/SupabasePlatformPermissionStore.js.map +1 -1
- package/dist/storage/SupabaseStorageProvider.d.ts.map +1 -1
- package/dist/storage/SupabaseStorageProvider.js +3 -0
- package/dist/storage/SupabaseStorageProvider.js.map +1 -1
- package/package.json +13 -14
- package/supabase/.branches/_current_branch +1 -0
- package/supabase/.temp/cli-latest +1 -0
- package/supabase/migrations/20260711120000_selva_definition_schema_version.sql +18 -0
- package/supabase/migrations/20260712120000_user_profiles_disabled_and_gin.sql +95 -0
- package/supabase/migrations/20260712123000_selva_migration_head_fn.sql +38 -0
- package/supabase/migrations/20260713120000_selva_next_version_number.sql +59 -0
- package/supabase/migrations/20260713140000_selva_solve_cache_limit.sql +15 -0
- package/dist/auth/__tests__/conformance.test.d.ts +0 -2
- package/dist/auth/__tests__/conformance.test.d.ts.map +0 -1
- package/dist/auth/__tests__/conformance.test.js +0 -76
- package/dist/auth/__tests__/conformance.test.js.map +0 -1
- package/dist/data/__tests__/compute-server-conformance.test.d.ts +0 -2
- package/dist/data/__tests__/compute-server-conformance.test.d.ts.map +0 -1
- package/dist/data/__tests__/compute-server-conformance.test.js +0 -40
- package/dist/data/__tests__/compute-server-conformance.test.js.map +0 -1
- package/dist/data/__tests__/definition-conformance.test.d.ts +0 -2
- package/dist/data/__tests__/definition-conformance.test.d.ts.map +0 -1
- package/dist/data/__tests__/definition-conformance.test.js +0 -85
- package/dist/data/__tests__/definition-conformance.test.js.map +0 -1
- package/dist/data/__tests__/event-sink-conformance.test.d.ts +0 -2
- package/dist/data/__tests__/event-sink-conformance.test.d.ts.map +0 -1
- package/dist/data/__tests__/event-sink-conformance.test.js +0 -27
- package/dist/data/__tests__/event-sink-conformance.test.js.map +0 -1
- package/dist/data/__tests__/invite-conformance.test.d.ts +0 -2
- package/dist/data/__tests__/invite-conformance.test.d.ts.map +0 -1
- package/dist/data/__tests__/invite-conformance.test.js +0 -45
- package/dist/data/__tests__/invite-conformance.test.js.map +0 -1
- package/dist/data/__tests__/org-conformance.test.d.ts +0 -2
- package/dist/data/__tests__/org-conformance.test.d.ts.map +0 -1
- package/dist/data/__tests__/org-conformance.test.js +0 -29
- package/dist/data/__tests__/org-conformance.test.js.map +0 -1
- package/dist/data/__tests__/project-conformance.test.d.ts +0 -2
- package/dist/data/__tests__/project-conformance.test.d.ts.map +0 -1
- package/dist/data/__tests__/project-conformance.test.js +0 -57
- package/dist/data/__tests__/project-conformance.test.js.map +0 -1
- package/dist/data/__tests__/share-link-conformance.test.d.ts +0 -2
- package/dist/data/__tests__/share-link-conformance.test.d.ts.map +0 -1
- package/dist/data/__tests__/share-link-conformance.test.js +0 -88
- package/dist/data/__tests__/share-link-conformance.test.js.map +0 -1
- package/dist/data/__tests__/solve-metric-sink-conformance.test.d.ts +0 -2
- package/dist/data/__tests__/solve-metric-sink-conformance.test.d.ts.map +0 -1
- package/dist/data/__tests__/solve-metric-sink-conformance.test.js +0 -52
- package/dist/data/__tests__/solve-metric-sink-conformance.test.js.map +0 -1
- package/dist/data/__tests__/test-helpers.d.ts +0 -52
- package/dist/data/__tests__/test-helpers.d.ts.map +0 -1
- package/dist/data/__tests__/test-helpers.js +0 -177
- package/dist/data/__tests__/test-helpers.js.map +0 -1
- package/dist/permissions/__tests__/conformance.test.d.ts +0 -2
- package/dist/permissions/__tests__/conformance.test.d.ts.map +0 -1
- package/dist/permissions/__tests__/conformance.test.js +0 -27
- package/dist/permissions/__tests__/conformance.test.js.map +0 -1
- package/dist/storage/__tests__/conformance.test.d.ts +0 -2
- package/dist/storage/__tests__/conformance.test.d.ts.map +0 -1
- package/dist/storage/__tests__/conformance.test.js +0 -149
- package/dist/storage/__tests__/conformance.test.js.map +0 -1
- package/dist/userProfile/__tests__/conformance.test.d.ts +0 -2
- package/dist/userProfile/__tests__/conformance.test.d.ts.map +0 -1
- package/dist/userProfile/__tests__/conformance.test.js +0 -38
- package/dist/userProfile/__tests__/conformance.test.js.map +0 -1
- package/src/auth/SupabaseAuthProvider.ts +0 -464
- package/src/auth/__tests__/conformance.test.ts +0 -78
- package/src/auth/index.ts +0 -2
- package/src/cli/sync-migrations.ts +0 -133
- package/src/data/SupabaseAuditQuery.ts +0 -103
- package/src/data/SupabaseComputeServerStore.ts +0 -262
- package/src/data/SupabaseDataProvider.ts +0 -133
- package/src/data/SupabaseDefinitionStore.ts +0 -520
- package/src/data/SupabaseEventSink.ts +0 -30
- package/src/data/SupabaseInviteStore.ts +0 -183
- package/src/data/SupabaseOrgStore.ts +0 -552
- package/src/data/SupabaseProjectStore.ts +0 -454
- package/src/data/SupabaseShareLinkStore.ts +0 -191
- package/src/data/SupabaseSolveMetricSink.ts +0 -38
- package/src/data/__tests__/compute-server-conformance.test.ts +0 -40
- package/src/data/__tests__/definition-conformance.test.ts +0 -89
- package/src/data/__tests__/event-sink-conformance.test.ts +0 -32
- package/src/data/__tests__/invite-conformance.test.ts +0 -46
- package/src/data/__tests__/org-conformance.test.ts +0 -30
- package/src/data/__tests__/project-conformance.test.ts +0 -57
- package/src/data/__tests__/share-link-conformance.test.ts +0 -87
- package/src/data/__tests__/solve-metric-sink-conformance.test.ts +0 -59
- package/src/data/__tests__/test-helpers.ts +0 -188
- package/src/data/client.ts +0 -98
- package/src/data/index.ts +0 -12
- package/src/data/pagination.ts +0 -68
- package/src/index.ts +0 -24
- package/src/permissions/SupabasePlatformPermissionStore.ts +0 -161
- package/src/permissions/__tests__/conformance.test.ts +0 -28
- package/src/permissions/index.ts +0 -1
- package/src/storage/SupabaseStorageProvider.ts +0 -182
- package/src/storage/__tests__/conformance.test.ts +0 -152
- package/src/storage/index.ts +0 -2
- package/src/userProfile/SupabaseUserProfileProvider.ts +0 -177
- package/src/userProfile/__tests__/conformance.test.ts +0 -39
- package/src/userProfile/index.ts +0 -1
|
@@ -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 +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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-conformance.test.d.ts","sourceRoot":"","sources":["../../../src/data/__tests__/project-conformance.test.ts"],"names":[],"mappings":""}
|
|
@@ -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 +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":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,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,iDAAiD,EAAE,GAAG,EAAE;QACrE,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACJ,CAAC;KAAM,CAAC;IACP,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACvC,UAAU,CAAC,KAAK,IAAI,EAAE;YACrB,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,4BAA4B,CAAC;YAC5B,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5D,WAAW,EAAE,KAAK,IAAI,EAAE;gBACvB,iEAAiE;gBACjE,sEAAsE;gBACtE,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,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtC,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBACzC,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;gBAEjC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;oBAC3D,EAAE,EAAE,KAAK;oBACT,IAAI,EAAE,qBAAqB;oBAC3B,IAAI,EAAE,WAAW,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oBACpC,QAAQ,EAAE,OAAO;oBACjB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,GAAG;iBACf,CAAC,CAAC;gBACH,IAAI,QAAQ;oBAAE,MAAM,QAAQ,CAAC;gBAC7B,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;gBACnC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;oBAChE,EAAE,EAAE,SAAS;oBACb,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,QAAQ,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oBACrC,UAAU,EAAE,QAAQ;oBACpB,QAAQ,EAAE,OAAO;oBACjB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,GAAG;iBACf,CAAC,CAAC;gBACH,IAAI,SAAS;oBAAE,MAAM,SAAS,CAAC;gBAC/B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;oBAClE;wBACC,IAAI,EAAE,YAAY;wBAClB,UAAU,EAAE,SAAS;wBACrB,QAAQ,EAAE,OAAO;wBACjB,YAAY,EAAE,OAAO;wBACrB,MAAM,EAAE,WAAW;wBACnB,UAAU,EAAE,GAAG;wBACf,UAAU,EAAE,GAAG;qBACf;oBACD;wBACC,IAAI,EAAE,iBAAiB;wBACvB,UAAU,EAAE,SAAS;wBACrB,QAAQ,EAAE,OAAO;wBACjB,YAAY,EAAE,OAAO;wBACrB,MAAM,EAAE,WAAW;wBACnB,UAAU,EAAE,GAAG;wBACf,UAAU,EAAE,GAAG;qBACf;iBACD,CAAC,CAAC;gBACH,IAAI,QAAQ;oBAAE,MAAM,QAAQ,CAAC;gBAE7B,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;YACxE,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conformance.test.d.ts","sourceRoot":"","sources":["../../../src/permissions/__tests__/conformance.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { describe, beforeEach, it } from 'vitest';
|
|
2
|
-
import { runPlatformPermissionStoreConformance } from '@selvajs/platform/testing';
|
|
3
|
-
import { SupabasePlatformPermissionStore } from '../SupabasePlatformPermissionStore.js';
|
|
4
|
-
import { readEnv, resetAllData, seedPlainUser } from '../../data/__tests__/test-helpers.js';
|
|
5
|
-
const envCtx = readEnv();
|
|
6
|
-
if (!envCtx) {
|
|
7
|
-
describe.skip('SupabasePlatformPermissionStore (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('SupabasePlatformPermissionStore', () => {
|
|
13
|
-
beforeEach(async () => {
|
|
14
|
-
await resetAllData(envCtx);
|
|
15
|
-
});
|
|
16
|
-
runPlatformPermissionStoreConformance({
|
|
17
|
-
name: 'SupabasePlatformPermissionStore',
|
|
18
|
-
createStore: async () => {
|
|
19
|
-
return {
|
|
20
|
-
store: new SupabasePlatformPermissionStore(envCtx.bundle),
|
|
21
|
-
seedUser: async () => (await seedPlainUser(envCtx, '')).userId
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=conformance.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conformance.test.js","sourceRoot":"","sources":["../../../src/permissions/__tests__/conformance.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,qCAAqC,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAE5F,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,qCAAqC,CAAC;YACrC,IAAI,EAAE,iCAAiC;YACvC,WAAW,EAAE,KAAK,IAAI,EAAE;gBACvB,OAAO;oBACN,KAAK,EAAE,IAAI,+BAA+B,CAAC,MAAM,CAAC,MAAM,CAAC;oBACzD,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;iBAC9D,CAAC;YACH,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conformance.test.d.ts","sourceRoot":"","sources":["../../../src/storage/__tests__/conformance.test.ts"],"names":[],"mappings":""}
|