@selvajs/supabase-provider 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,7 +2,7 @@ import { NoopEventSink, actorFrom } from '@selvajs/platform';
|
|
|
2
2
|
import { mapPostgrestError } from './errors.js';
|
|
3
3
|
import { nextCursorFromRange, toRange } from './pagination.js';
|
|
4
4
|
/** Explicit column list for `invites` — every field `rowToInvite` consumes. */
|
|
5
|
-
const INVITE_COLUMNS = 'id, token_hash, email, org_id, org_role, org_permissions, invited_by, created_at, expires_at, accepted_at, accepted_by_user_id';
|
|
5
|
+
const INVITE_COLUMNS = 'id, token_hash, email, org_id, org_role, org_permissions, platform_permissions, invited_by, created_at, expires_at, accepted_at, accepted_by_user_id';
|
|
6
6
|
/**
|
|
7
7
|
* Invite store. `getByTokenHash` routes through a SECURITY DEFINER RPC so an
|
|
8
8
|
* unauthenticated caller (still validating an invite link) can resolve it
|
|
@@ -120,6 +120,9 @@ function rowToInvite(row) {
|
|
|
120
120
|
orgId: row.org_id,
|
|
121
121
|
orgRole: row.org_role,
|
|
122
122
|
orgPermissions: row.org_permissions,
|
|
123
|
+
// `?? []` covers a row read through a client whose projection predates the
|
|
124
|
+
// column, not a null default — the column is `not null default '{}'`.
|
|
125
|
+
platformPermissions: (row.platform_permissions ?? []),
|
|
123
126
|
invitedBy: row.invited_by,
|
|
124
127
|
createdAt: row.created_at,
|
|
125
128
|
expiresAt: row.expires_at,
|
|
@@ -135,6 +138,7 @@ function inviteToRow(i) {
|
|
|
135
138
|
org_id: i.orgId,
|
|
136
139
|
org_role: i.orgRole,
|
|
137
140
|
org_permissions: i.orgPermissions,
|
|
141
|
+
platform_permissions: i.platformPermissions ?? [],
|
|
138
142
|
invited_by: i.invitedBy,
|
|
139
143
|
created_at: i.createdAt,
|
|
140
144
|
expires_at: i.expiresAt,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupabaseInviteStore.js","sourceRoot":"","sources":["../../src/data/SupabaseInviteStore.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/D,+EAA+E;AAC/E,MAAM,cAAc,GACnB,
|
|
1
|
+
{"version":3,"file":"SupabaseInviteStore.js","sourceRoot":"","sources":["../../src/data/SupabaseInviteStore.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/D,+EAA+E;AAC/E,MAAM,cAAc,GACnB,sJAAsJ,CAAC;AAExJ;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAmB;IAEb;IACA;IAFlB,YACkB,OAAqB,EACrB,SAAqB,IAAI,aAAa,EAAE;QADxC,YAAO,GAAP,OAAO,CAAc;QACrB,WAAM,GAAN,MAAM,CAAkC;IACvD,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,GAAmB,EAAE,MAAc;QAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO;aAClC,UAAU,CAAC,GAAG,CAAC;aACf,IAAI,CAAC,SAAS,CAAC;aACf,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9B,IAAI,KAAK;YAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC;SACvB,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAmB,EAAE,SAAiB;QAC1D,kEAAkE;QAClE,iEAAiE;QACjE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO;aACxC,UAAU,CAAC,GAAG,CAAC;aACf,GAAG,CAAC,0BAA0B,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACpD,IAAI,KAAK;YAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,yEAAyE;QACzE,qDAAqD;QACrD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,OAAO,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAmB,EAAE,KAAa,EAAE,IAAkB;QACrE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO;aAC/C,UAAU,CAAC,GAAG,CAAC;aACf,IAAI,CAAC,SAAS,CAAC;aACf,MAAM,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;aAC1C,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;aACnB,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;aACxE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,KAAK;YAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAmB,EAAE,EAAU,EAAE,MAAc;QACjE,0EAA0E;QAC1E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO;aACxC,UAAU,CAAC,GAAG,CAAC;aACf,IAAI,CAAC,SAAS,CAAC;aACf,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;aAC9E,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;aACZ,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC;aACvB,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK;YAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAG,GAA0B,CAAC,MAAM;YACzC,MAAM;YACN,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC;SACvB,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAmB,EAAE,EAAU;QAC3C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO;aACxC,UAAU,CAAC,GAAG,CAAC;aACf,IAAI,CAAC,SAAS,CAAC;aACf,MAAM,EAAE;aACR,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;aACZ,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC;aACvB,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,KAAK;YAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAG,GAA0B,CAAC,MAAM;YACzC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC;SACvB,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAmB,EAAE,KAAa;QACnD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO;aAClC,UAAU,CAAC,GAAG,CAAC;aACf,IAAI,CAAC,SAAS,CAAC;aACf,MAAM,EAAE;aACR,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtB,IAAI,KAAK;YAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;CACD;AAiBD,SAAS,WAAW,CAAC,GAAc;IAClC,OAAO;QACN,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,cAAc,EAAE,GAAG,CAAC,eAA2C;QAC/D,2EAA2E;QAC3E,sEAAsE;QACtE,mBAAmB,EAAE,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAEnD;QACD,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QACxC,gBAAgB,EAAE,GAAG,CAAC,mBAAmB,IAAI,SAAS;KACtD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC7B,OAAO;QACN,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,UAAU,EAAE,CAAC,CAAC,SAAS;QACvB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,KAAK;QACf,QAAQ,EAAE,CAAC,CAAC,OAAO;QACnB,eAAe,EAAE,CAAC,CAAC,cAAc;QACjC,oBAAoB,EAAE,CAAC,CAAC,mBAAmB,IAAI,EAAE;QACjD,UAAU,EAAE,CAAC,CAAC,SAAS;QACvB,UAAU,EAAE,CAAC,CAAC,SAAS;QACvB,UAAU,EAAE,CAAC,CAAC,SAAS;QACvB,WAAW,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;QACjC,mBAAmB,EAAE,CAAC,CAAC,gBAAgB,IAAI,IAAI;KAC/C,CAAC;AACH,CAAC"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* whenever a migration is added — `migration-head.test.ts` asserts it
|
|
4
4
|
* matches the migrations directory, so CI catches drift.
|
|
5
5
|
*/
|
|
6
|
-
export declare const EXPECTED_MIGRATION_HEAD = "
|
|
6
|
+
export declare const EXPECTED_MIGRATION_HEAD = "20260817120000";
|
|
7
7
|
//# sourceMappingURL=migrationHead.d.ts.map
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* whenever a migration is added — `migration-head.test.ts` asserts it
|
|
4
4
|
* matches the migrations directory, so CI catches drift.
|
|
5
5
|
*/
|
|
6
|
-
export const EXPECTED_MIGRATION_HEAD = '
|
|
6
|
+
export const EXPECTED_MIGRATION_HEAD = '20260817120000';
|
|
7
7
|
//# sourceMappingURL=migrationHead.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@selvajs/supabase-provider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Supabase (Auth + Postgres + Storage) implementations of @selvajs/platform interfaces",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "VektorNode",
|
|
@@ -72,10 +72,10 @@
|
|
|
72
72
|
"dependencies": {
|
|
73
73
|
"@supabase/supabase-js": "^2.112.2",
|
|
74
74
|
"sharp": "^0.35.3",
|
|
75
|
-
"@selvajs/platform": "^0.
|
|
75
|
+
"@selvajs/platform": "^0.18.0"
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
|
-
"@types/node": "^
|
|
78
|
+
"@types/node": "^24.13.3",
|
|
79
79
|
"supabase": "^2.112.0",
|
|
80
80
|
"typescript": "~6.0.3",
|
|
81
81
|
"vitest": "^4.1.10",
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- ============================================================================
|
|
2
|
+
-- selva.invites.platform_permissions — instance-wide grants carried by an invite
|
|
3
|
+
-- ============================================================================
|
|
4
|
+
--
|
|
5
|
+
-- Invites could only ever grant org scope, so the sole way to create a second
|
|
6
|
+
-- instance admin was the admin-sets-password form on /admin/users — a form that
|
|
7
|
+
-- cannot exist under a header-auth/IdP deployment, where Selva never holds a
|
|
8
|
+
-- credential. Removing that form without this column would leave such a
|
|
9
|
+
-- deployment permanently stuck at one admin.
|
|
10
|
+
--
|
|
11
|
+
-- Empty for virtually every row: the mint route rejects a non-empty value unless
|
|
12
|
+
-- the caller already holds instance_admin, since anyone who can write here can
|
|
13
|
+
-- escalate past org scope.
|
|
14
|
+
|
|
15
|
+
alter table selva.invites
|
|
16
|
+
add column if not exists platform_permissions text[] not null default '{}';
|