@heychunky/core 0.22.0 → 0.24.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.
- package/dist/admin/index.d.ts +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/master.d.ts +3 -3
- package/dist/admin/master.d.ts.map +1 -1
- package/dist/admin/master.js +3 -3
- package/dist/admin/master.js.map +1 -1
- package/dist/admin/orgs.d.ts.map +1 -1
- package/dist/admin/orgs.js +28 -2
- package/dist/admin/orgs.js.map +1 -1
- package/dist/admin/register.js +1 -1
- package/package.json +1 -1
- package/register/0007-personal-org/01-users-personal-org-id.sql +18 -0
- package/register/0007-personal-org/02-users-personal-org-unique.sql +3 -0
- package/register/0007-personal-org/03-backfill-personal-org.sql +9 -0
- package/register/README.md +1 -1
package/dist/admin/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* `register.ts` is deliberately absent. It reads the register's migrations off
|
|
8
8
|
* disk, and `new URL("../../register/", import.meta.url)` is an asset reference
|
|
9
|
-
* a bundler resolves statically — so re-exporting it here broke heychunky-
|
|
9
|
+
* a bundler resolves statically — so re-exporting it here broke heychunky-console's
|
|
10
10
|
* build, which does import this barrel. It has its own subpath,
|
|
11
11
|
* `@heychunky/core/register`, for the CLI and the worker. Nothing that serves a
|
|
12
12
|
* request migrates the register's schema, so nothing that serves a request
|
package/dist/admin/index.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* `register.ts` is deliberately absent. It reads the register's migrations off
|
|
8
8
|
* disk, and `new URL("../../register/", import.meta.url)` is an asset reference
|
|
9
|
-
* a bundler resolves statically — so re-exporting it here broke heychunky-
|
|
9
|
+
* a bundler resolves statically — so re-exporting it here broke heychunky-console's
|
|
10
10
|
* build, which does import this barrel. It has its own subpath,
|
|
11
11
|
* `@heychunky/core/register`, for the CLI and the worker. Nothing that serves a
|
|
12
12
|
* request migrates the register's schema, so nothing that serves a request
|
package/dist/admin/master.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The database that holds the register — who exists, and what they own.
|
|
3
3
|
*
|
|
4
4
|
* Passed in rather than named here. This module used to hardcode
|
|
5
|
-
* heychunky-
|
|
5
|
+
* heychunky-console's production database, which made every register function
|
|
6
6
|
* reach past whatever environment its caller was running in: an API serving
|
|
7
7
|
* its dev database looked up users in production and did not find them.
|
|
8
8
|
*
|
|
@@ -15,12 +15,12 @@ import type { RunContext } from "./run.ts";
|
|
|
15
15
|
/** What the register needs of a database. Satisfied by `db()`. */
|
|
16
16
|
export type Register = Pick<ReturnType<typeof db>, "query" | "write">;
|
|
17
17
|
/**
|
|
18
|
-
* The factory's own register: heychunky-
|
|
18
|
+
* The factory's own register: heychunky-console in production.
|
|
19
19
|
*
|
|
20
20
|
* One register for the operator side, because a developer's laptop and the
|
|
21
21
|
* worker must not each have their own idea of what exists. An app running in
|
|
22
22
|
* dev is a different case and passes its own.
|
|
23
23
|
*/
|
|
24
|
-
export declare const FACTORY_REGISTER = "infisical://heychunky-apps/production/heychunky-
|
|
24
|
+
export declare const FACTORY_REGISTER = "infisical://heychunky-apps/production/heychunky-console/DATABASE_URL";
|
|
25
25
|
export declare const factoryRegister: (ctx: RunContext) => Promise<Register>;
|
|
26
26
|
//# sourceMappingURL=master.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"master.d.ts","sourceRoot":"","sources":["../../src/admin/master.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,kEAAkE;AAClE,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;AAEtE;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"master.d.ts","sourceRoot":"","sources":["../../src/admin/master.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,kEAAkE;AAClE,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;AAEtE;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,yEAC2C,CAAC;AAEzE,eAAO,MAAM,eAAe,GAAU,KAAK,UAAU,KAAG,OAAO,CAAC,QAAQ,CAC3B,CAAC"}
|
package/dist/admin/master.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The database that holds the register — who exists, and what they own.
|
|
3
3
|
*
|
|
4
4
|
* Passed in rather than named here. This module used to hardcode
|
|
5
|
-
* heychunky-
|
|
5
|
+
* heychunky-console's production database, which made every register function
|
|
6
6
|
* reach past whatever environment its caller was running in: an API serving
|
|
7
7
|
* its dev database looked up users in production and did not find them.
|
|
8
8
|
*
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { db } from "../services/db.js";
|
|
14
14
|
/**
|
|
15
|
-
* The factory's own register: heychunky-
|
|
15
|
+
* The factory's own register: heychunky-console in production.
|
|
16
16
|
*
|
|
17
17
|
* One register for the operator side, because a developer's laptop and the
|
|
18
18
|
* worker must not each have their own idea of what exists. An app running in
|
|
19
19
|
* dev is a different case and passes its own.
|
|
20
20
|
*/
|
|
21
|
-
export const FACTORY_REGISTER = "infisical://heychunky-apps/production/heychunky-
|
|
21
|
+
export const FACTORY_REGISTER = "infisical://heychunky-apps/production/heychunky-console/DATABASE_URL";
|
|
22
22
|
export const factoryRegister = async (ctx) => db(await ctx.secrets.get(FACTORY_REGISTER));
|
|
23
23
|
//# sourceMappingURL=master.js.map
|
package/dist/admin/master.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"master.js","sourceRoot":"","sources":["../../src/admin/master.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAMvC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,
|
|
1
|
+
{"version":3,"file":"master.js","sourceRoot":"","sources":["../../src/admin/master.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAMvC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,sEAAsE,CAAC;AAEzE,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,GAAe,EAAqB,EAAE,CAC1E,EAAE,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC"}
|
package/dist/admin/orgs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orgs.d.ts","sourceRoot":"","sources":["../../src/admin/orgs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,0EAA0E;AAC1E,eAAO,MAAM,SAAS,iCAAkC,CAAC;AACzD,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,+BAAgC,CAAC;AACvD,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,QAA2C,CAAC;AAgBjE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW9D;AAED,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,qEAAqE;IACrE,IAAI,EAAE,OAAO,CAAC;IACd,6EAA6E;IAC7E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gEAAgE;AAChE,MAAM,WAAW,UAAW,SAAQ,GAAG;IACrC,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,IAAI,EAAE,MAAM;CAIzB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"orgs.d.ts","sourceRoot":"","sources":["../../src/admin/orgs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,0EAA0E;AAC1E,eAAO,MAAM,SAAS,iCAAkC,CAAC;AACzD,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,+BAAgC,CAAC;AACvD,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,QAA2C,CAAC;AAgBjE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW9D;AAED,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,qEAAqE;IACrE,IAAI,EAAE,OAAO,CAAC;IACd,6EAA6E;IAC7E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gEAAgE;AAChE,MAAM,WAAW,UAAW,SAAQ,GAAG;IACrC,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,IAAI,EAAE,MAAM;CAIzB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,GAAG,CAAC,CAiCd;AAED,oEAAoE;AACpE,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAQvF;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAmG/D,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;CACb;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAQ3E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,GAAG,CAAC,CAsBd;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAS1B"}
|
package/dist/admin/orgs.js
CHANGED
|
@@ -103,6 +103,10 @@ export async function claimPersonalOrg(userId, username, register) {
|
|
|
103
103
|
throw new OrgNameTakenError(username);
|
|
104
104
|
await register.write(`insert into org_members (org_id, user_id, role) values ($1, $2, 'admin')
|
|
105
105
|
on conflict (org_id, user_id) do nothing`, [org.id, userId]);
|
|
106
|
+
// And the pointer, which is what makes this *theirs* rather than one of
|
|
107
|
+
// three facts that happen to agree. Written last, so it is only ever set
|
|
108
|
+
// for an organisation that exists and has them in it.
|
|
109
|
+
await register.write("update users set personal_org_id = $2 where id = $1 and personal_org_id is null", [userId, org.id]);
|
|
106
110
|
return org;
|
|
107
111
|
}
|
|
108
112
|
/** The organisations this person belongs to, personal one first. */
|
|
@@ -146,6 +150,26 @@ export const ORG_CHECKS = [
|
|
|
146
150
|
and not exists (select 1 from orgs o
|
|
147
151
|
where lower(o.name) = lower(u.username) and o.kind = 'personal')`,
|
|
148
152
|
},
|
|
153
|
+
{
|
|
154
|
+
/**
|
|
155
|
+
* The pointer and the membership have to agree.
|
|
156
|
+
*
|
|
157
|
+
* `users.personal_org_id` is the fact now; a membership row and the
|
|
158
|
+
* matching name are what it replaced. A pointer to an organisation the
|
|
159
|
+
* person is not in is one nobody could have reached anyway, and the only
|
|
160
|
+
* way to make one is to write the column by hand.
|
|
161
|
+
*/
|
|
162
|
+
check: "people pointed at an organisation they are not a member of",
|
|
163
|
+
sql: `select count(*) as n from users u
|
|
164
|
+
where u.personal_org_id is not null
|
|
165
|
+
and not exists (select 1 from org_members m
|
|
166
|
+
where m.org_id = u.personal_org_id and m.user_id = u.id)`,
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
check: "people with a username and no personal organisation recorded",
|
|
170
|
+
sql: `select count(*) as n from users u
|
|
171
|
+
where u.username is not null and u.personal_org_id is null`,
|
|
172
|
+
},
|
|
149
173
|
{
|
|
150
174
|
check: "personal organisations whose name is nobody's username",
|
|
151
175
|
sql: `select count(*) as n from orgs o where o.kind = 'personal'
|
|
@@ -278,8 +302,10 @@ export async function createOrg(name, founder, register) {
|
|
|
278
302
|
* exists before its owner has chosen what to be called.
|
|
279
303
|
*/
|
|
280
304
|
export async function personalOrgFor(userId, register) {
|
|
281
|
-
|
|
282
|
-
|
|
305
|
+
// One hop, on a foreign key. It used to join on the username matching the
|
|
306
|
+
// organisation's name, which was true by convention and unenforceable —
|
|
307
|
+
// and silently wrong for anybody mid-rename.
|
|
308
|
+
const { rows } = await register.query("select o.* from orgs o join users u on u.personal_org_id = o.id where u.id = $1", [userId]);
|
|
283
309
|
return rows[0];
|
|
284
310
|
}
|
|
285
311
|
//# sourceMappingURL=orgs.js.map
|
package/dist/admin/orgs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/admin/orgs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/admin/orgs.ts"],"names":[],"mappings":"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"}
|
package/dist/admin/register.js
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
*
|
|
36
36
|
* **Reached as `@heychunky/core/register`, not through the admin barrel.** The
|
|
37
37
|
* directory read below is an asset reference that a bundler resolves at build
|
|
38
|
-
* time, and heychunky-
|
|
38
|
+
* time, and heychunky-console imports `@heychunky/core/admin` — so exporting this
|
|
39
39
|
* from there failed the app's build with `Can't resolve '../../register/'`. Its
|
|
40
40
|
* own subpath is the honest boundary rather than a workaround: an app never
|
|
41
41
|
* migrates the register's schema, and the exports map is where this package
|
package/package.json
CHANGED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
-- Which organisation is this person's own.
|
|
2
|
+
--
|
|
3
|
+
-- Until now that was three facts that had to agree: a membership row, the
|
|
4
|
+
-- organisation's `kind`, and its name matching the username. Nothing enforced
|
|
5
|
+
-- the set — `register verify` counted the disagreements afterwards, and has
|
|
6
|
+
-- caught drift more than once.
|
|
7
|
+
--
|
|
8
|
+
-- A column, foreign-keyed. Not a shared primary key: an organisation outlives
|
|
9
|
+
-- the people in it (`org_members` cascades, `orgs` does not), so an id that
|
|
10
|
+
-- named a deleted person would make that a contradiction rather than a
|
|
11
|
+
-- decision. And a team could never share one, so half the rows would carry a
|
|
12
|
+
-- shortcut the other half could not — which is how somebody writes a join
|
|
13
|
+
-- that passes in testing and is wrong in production.
|
|
14
|
+
--
|
|
15
|
+
-- `on delete set null` because deleting an organisation is a decision about
|
|
16
|
+
-- the organisation; it must not take the person with it, and it must not be
|
|
17
|
+
-- blocked by them either.
|
|
18
|
+
alter table users add column personal_org_id uuid references orgs(id) on delete set null;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-- Every person who already has one, matched the way the code has been
|
|
2
|
+
-- matching: their username is the organisation's name, and it is personal.
|
|
3
|
+
-- Safe to run twice; touches only rows still without a pointer.
|
|
4
|
+
update users u set personal_org_id = o.id
|
|
5
|
+
from orgs o
|
|
6
|
+
where u.personal_org_id is null
|
|
7
|
+
and u.username is not null
|
|
8
|
+
and o.kind = 'personal'
|
|
9
|
+
and lower(o.name) = lower(u.username);
|
package/register/README.md
CHANGED
|
@@ -31,7 +31,7 @@ heychunky register verify what must be true of the rows
|
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
All four take `--app <app> --env <environment>` to reach a register other than
|
|
34
|
-
the factory's own. There is more than one: heychunky-
|
|
34
|
+
the factory's own. There is more than one: heychunky-console runs in six
|
|
35
35
|
environments and each has a database of this shape, which is how the schema
|
|
36
36
|
reaches the one the tests and the dev deployment use.
|
|
37
37
|
|