@heychunky/core 0.18.1 → 0.20.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.
@@ -0,0 +1,23 @@
1
+ import type { Register } from "./master.ts";
2
+ import type { App } from "./apps.ts";
3
+ export declare const APP_KEY_PREFIX = "hc_app_";
4
+ /** Mint a key for an app, revoking any it had. The value is shown once. */
5
+ export declare function mintAppKey(appId: string, register: Register): Promise<string>;
6
+ /** The app a key belongs to, or nothing — a revoked key is nothing too. */
7
+ export declare function appForKey(key: string | undefined, register: Register): Promise<App | undefined>;
8
+ /**
9
+ * Whether an email may see an app's dev and next: a member of the app's
10
+ * organisation, or on its tester list.
11
+ */
12
+ export declare function viewerAllowed(appId: string, email: string, register: Register): Promise<boolean>;
13
+ export declare function addViewer(appId: string, email: string, addedBy: string, register: Register): Promise<void>;
14
+ export declare function removeViewer(appId: string, email: string, register: Register): Promise<void>;
15
+ export declare function viewersFor(appId: string, register: Register): Promise<{
16
+ email: string;
17
+ added_at: string;
18
+ }[]>;
19
+ /** A token the console hands an allowed viewer to carry to the app. Minutes, once. */
20
+ export declare function mintViewerToken(appId: string, email: string, register: Register): Promise<string>;
21
+ /** Redeem a viewer token for the app the key names: the email, once, in time. */
22
+ export declare function redeemViewerToken(appId: string, token: string, register: Register): Promise<string | undefined>;
23
+ //# sourceMappingURL=appkeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appkeys.d.ts","sourceRoot":"","sources":["../../src/admin/appkeys.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,eAAO,MAAM,cAAc,YAAY,CAAC;AAKxC,2EAA2E;AAC3E,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CASnF;AAED,2EAA2E;AAC3E,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAMrG;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAUtG;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhH;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAElG;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAIlH;AAED,sFAAsF;AACtF,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAOvG;AAED,iFAAiF;AACjF,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMrH"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * An app's own credential, and who may see it before it is live.
3
+ *
4
+ * From phase 5 on the app talks back to Chunky — who may see `dev` and
5
+ * `next`, later comments and feedback — and needs a credential of its own:
6
+ * not a person's key, which names a person and an organisation, but the
7
+ * app's. One rung down from a platform key. Minted at hosting, set in the
8
+ * app's environment, compared only as a hash.
9
+ *
10
+ * Viewing is two lists: the organisation's members, who may always see
11
+ * their own app, and the testers the app has invited by email. The sign-in
12
+ * is heychunky's own; what crosses to the app is a short-lived token the
13
+ * console mints for an allowed viewer and the app redeems once.
14
+ */
15
+ import { createHash, randomBytes } from "node:crypto";
16
+ export const APP_KEY_PREFIX = "hc_app_";
17
+ const VIEWER_MINUTES = 5;
18
+ const hash = (value) => createHash("sha256").update(value).digest("hex");
19
+ /** Mint a key for an app, revoking any it had. The value is shown once. */
20
+ export async function mintAppKey(appId, register) {
21
+ const key = APP_KEY_PREFIX + randomBytes(24).toString("base64url");
22
+ await register.write("update app_keys set revoked_at = now() where app_id = $1 and revoked_at is null", [appId]);
23
+ await register.write("insert into app_keys (app_id, key_hash, prefix) values ($1, $2, $3)", [appId, hash(key), key.slice(0, APP_KEY_PREFIX.length + 4) + "…"]);
24
+ return key;
25
+ }
26
+ /** The app a key belongs to, or nothing — a revoked key is nothing too. */
27
+ export async function appForKey(key, register) {
28
+ if (!key?.startsWith(APP_KEY_PREFIX))
29
+ return undefined;
30
+ const { rows } = await register.query(`select a.* from app_keys k join apps a on a.id = k.app_id
31
+ where k.key_hash = $1 and k.revoked_at is null`, [hash(key)]);
32
+ return rows[0];
33
+ }
34
+ /**
35
+ * Whether an email may see an app's dev and next: a member of the app's
36
+ * organisation, or on its tester list.
37
+ */
38
+ export async function viewerAllowed(appId, email, register) {
39
+ const { rows } = await register.query(`select 1 from apps a
40
+ where a.id = $1 and (
41
+ exists (select 1 from org_members m join users u on u.id = m.user_id
42
+ where m.org_id = a.org_id and lower(u.email) = lower($2))
43
+ or exists (select 1 from app_viewers v where v.app_id = a.id and lower(v.email) = lower($2)))
44
+ limit 1`, [appId, email]);
45
+ return rows.length > 0;
46
+ }
47
+ export async function addViewer(appId, email, addedBy, register) {
48
+ await register.write(`insert into app_viewers (app_id, email, added_by) values ($1, $2, $3)
49
+ on conflict (app_id, lower(email)) do nothing`, [appId, email.trim(), addedBy]);
50
+ }
51
+ export async function removeViewer(appId, email, register) {
52
+ await register.write("delete from app_viewers where app_id = $1 and lower(email) = lower($2)", [appId, email]);
53
+ }
54
+ export async function viewersFor(appId, register) {
55
+ const { rows } = await register.query("select email, added_at from app_viewers where app_id = $1 order by added_at", [appId]);
56
+ return rows;
57
+ }
58
+ /** A token the console hands an allowed viewer to carry to the app. Minutes, once. */
59
+ export async function mintViewerToken(appId, email, register) {
60
+ const token = randomBytes(24).toString("base64url");
61
+ await register.write(`insert into app_viewer_tokens (token_hash, app_id, email, expires_at)
62
+ values ($1, $2, $3, now() + interval '${VIEWER_MINUTES} minutes')`, [hash(token), appId, email]);
63
+ return token;
64
+ }
65
+ /** Redeem a viewer token for the app the key names: the email, once, in time. */
66
+ export async function redeemViewerToken(appId, token, register) {
67
+ const { rows } = await register.write(`update app_viewer_tokens set redeemed_at = now()
68
+ where token_hash = $1 and app_id = $2 and redeemed_at is null and expires_at > now()
69
+ returning email`, [hash(token), appId]);
70
+ return rows[0]?.["email"];
71
+ }
72
+ //# sourceMappingURL=appkeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appkeys.js","sourceRoot":"","sources":["../../src/admin/appkeys.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,8 @@ export * from "./provision.ts";
23
23
  export * from "./decommission.ts";
24
24
  export * from "./migrations.ts";
25
25
  export * from "./promote.ts";
26
+ export * from "./release.ts";
27
+ export * from "./appkeys.ts";
26
28
  export * from "./runs.ts";
27
29
  export * from "./entrypoints.ts";
28
30
  export * from "./chunks.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAG5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAG5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
@@ -23,6 +23,8 @@ export * from "./provision.js";
23
23
  export * from "./decommission.js";
24
24
  export * from "./migrations.js";
25
25
  export * from "./promote.js";
26
+ export * from "./release.js";
27
+ export * from "./appkeys.js";
26
28
  export * from "./runs.js";
27
29
  export * from "./entrypoints.js";
28
30
  export * from "./chunks.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAE5B,+CAA+C;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAE5B,+CAA+C;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Cutting a release: what a customer's app does at the end of development.
3
+ *
4
+ * A release is the promotion from `dev` to the next environment — the same
5
+ * promotion the factory's own repositories make, migrations first, then the
6
+ * merge that deploys — with a version written down: a tag on the branch
7
+ * that just moved, and the changelog as the release's body. GitHub keeps
8
+ * releases, so the register keeps no second copy; "which version is on
9
+ * next" is read back from there.
10
+ *
11
+ * Numbered, not named. `v1`, `v2`, `v3`: a customer cutting a release wants
12
+ * to know that it is the fourth, not to invent a name for it, and the
13
+ * changelog is where the words go.
14
+ */
15
+ import { type Promotion, type PromoteWatcher } from "./promote.ts";
16
+ import { type Commit, type Release } from "./services/github.ts";
17
+ import { type RunContext } from "./run.ts";
18
+ export interface ReleaseSpec {
19
+ app: string;
20
+ repo: string;
21
+ }
22
+ export interface Released {
23
+ promotion: Promotion;
24
+ /** The version cut, when the promotion moved something. */
25
+ version?: Release;
26
+ }
27
+ /** The changelog, from what shipped: one line per commit, oldest first. */
28
+ export declare const changelog: (shipping: readonly Commit[]) => string;
29
+ /** The next tag after the ones that exist. Tags that are not `v<n>` are ignored. */
30
+ export declare const nextTag: (existing: readonly {
31
+ tag: string;
32
+ }[]) => string;
33
+ export declare function release(spec: ReleaseSpec, ctx: RunContext, watch?: PromoteWatcher): Promise<Released>;
34
+ //# sourceMappingURL=release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/admin/release.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAW,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAU,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAGpD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,2EAA2E;AAC3E,eAAO,MAAM,SAAS,GAAI,UAAU,SAAS,MAAM,EAAE,KAAG,MACS,CAAC;AAElE,oFAAoF;AACpF,eAAO,MAAM,OAAO,GAAI,UAAU,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,KAAG,MAM9D,CAAC;AAEF,wBAAsB,OAAO,CAC3B,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,UAAU,EACf,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,QAAQ,CAAC,CAoBnB"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Cutting a release: what a customer's app does at the end of development.
3
+ *
4
+ * A release is the promotion from `dev` to the next environment — the same
5
+ * promotion the factory's own repositories make, migrations first, then the
6
+ * merge that deploys — with a version written down: a tag on the branch
7
+ * that just moved, and the changelog as the release's body. GitHub keeps
8
+ * releases, so the register keeps no second copy; "which version is on
9
+ * next" is read back from there.
10
+ *
11
+ * Numbered, not named. `v1`, `v2`, `v3`: a customer cutting a release wants
12
+ * to know that it is the fourth, not to invent a name for it, and the
13
+ * changelog is where the words go.
14
+ */
15
+ import { promote } from "./promote.js";
16
+ import { github } from "./services/github.js";
17
+ import { KEY_FOR } from "./run.js";
18
+ import { GIT_BRANCH } from "../config/environments.js";
19
+ /** The changelog, from what shipped: one line per commit, oldest first. */
20
+ export const changelog = (shipping) => [...shipping].reverse().map((c) => `- ${c.message}`).join("\n");
21
+ /** The next tag after the ones that exist. Tags that are not `v<n>` are ignored. */
22
+ export const nextTag = (existing) => {
23
+ const highest = existing
24
+ .map((r) => /^v(\d+)$/.exec(r.tag))
25
+ .filter((m) => m !== null)
26
+ .reduce((n, m) => Math.max(n, Number(m[1])), 0);
27
+ return `v${highest + 1}`;
28
+ };
29
+ export async function release(spec, ctx, watch) {
30
+ const promotion = await promote({ app: spec.app, repo: spec.repo, to: "staging" }, ctx, watch);
31
+ if (promotion.planned || !promotion.ok)
32
+ return { promotion };
33
+ // Nothing moved: the branches were level. A release with no changes is a
34
+ // tag on a commit that already has one, which is the same version twice.
35
+ const merged = promotion.steps.find((s) => s.step === "merge" && s.state === "created");
36
+ if (!merged)
37
+ return { promotion };
38
+ watch?.start?.("version");
39
+ const gh = github(await ctx.secrets.get(ctx.reference(KEY_FOR["github"])));
40
+ const tag = nextTag(await gh.listReleases(spec.repo));
41
+ const version = await gh.createRelease(spec.repo, {
42
+ tag,
43
+ name: tag,
44
+ body: changelog(promotion.shipping),
45
+ target: GIT_BRANCH["staging"],
46
+ });
47
+ const result = { step: "version", state: "created", detail: `${tag} · ${promotion.shipping.length} change${promotion.shipping.length === 1 ? "" : "s"}` };
48
+ promotion.steps.push(result);
49
+ watch?.done?.(result);
50
+ return { promotion, version };
51
+ }
52
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/admin/release.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,15 @@ export interface Commit {
5
5
  message: string;
6
6
  }
7
7
  /** A pull request, as much of one as anything here needs. */
8
+ export interface Release {
9
+ tag: string;
10
+ name: string;
11
+ body: string;
12
+ created_at: string;
13
+ url: string;
14
+ /** The branch the tag was cut on. */
15
+ branch: string;
16
+ }
8
17
  export interface PullRequest {
9
18
  number: number;
10
19
  html_url: string;
@@ -52,6 +61,13 @@ export declare function github(token: string): {
52
61
  }) => Promise<PullRequest>;
53
62
  commitsAhead: (fullName: string, base: string, head: string) => Promise<Commit[]>;
54
63
  mergeBranch: (fullName: string, base: string, head: string, message: string) => Promise<Commit | undefined>;
64
+ listReleases: (fullName: string) => Promise<Release[]>;
65
+ createRelease: (fullName: string, o: {
66
+ tag: string;
67
+ name: string;
68
+ body: string;
69
+ target: string;
70
+ }) => Promise<Release>;
55
71
  status(): Promise<ServiceStatus>;
56
72
  access(): Promise<ServiceAccess>;
57
73
  };
@@ -1 +1 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/admin/services/github.ts"],"names":[],"mappings":"AAYA,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAKrG,kEAAkE;AAClE,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAaD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM;;yBAmNA,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;+BAT9C,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;0BA2B3C,MAAM,OAAO,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC;4BAsC5E,MAAM,KACb;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;SAAE,EAAE,CAAA;KAAE,KACtG,OAAO,CAAC,MAAM,CAAC;yCAzQmD,OAAO,CAAC,IAAI,EAAE,CAAC;2BAYlD,OAAO,CAAC,IAAI,EAAE,CAAC;yBAaf,MAAM,KAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;uBAqBpC,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;uBA0BxE,MAAM,MACT;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAC3D,OAAO,CAAC,IAAI,CAAC;2BAwCoB,MAAM,KAAK;QAAE,SAAS,EAAE,IAAI,CAAA;KAAE,KAAG,OAAO,CAAC,IAAI,CAAC;yBAWhD,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC;6BAItB,MAAM,UAAU,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kCAiD9E,MAAM,KACb;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAC7D,OAAO,CAAC,WAAW,CAAC;6BApCe,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC;4BAiBhF,MAAM,QAAQ,MAAM,QAAQ,MAAM,WAAW,MAAM,KAC5D,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;cA2JZ,OAAO,CAAC,aAAa,CAAC;cAStB,OAAO,CAAC,aAAa,CAAC;EAgCzC"}
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/admin/services/github.ts"],"names":[],"mappings":"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"}
@@ -286,6 +286,29 @@ export function github(token) {
286
286
  });
287
287
  return commit.sha;
288
288
  }
289
+ /**
290
+ * The releases of a repository, newest first. A release is how a version
291
+ * is written down: a tag, a name, and the changelog as its body — GitHub
292
+ * keeps them, so the register does not keep a second copy.
293
+ */
294
+ async function listReleases(fullName) {
295
+ const rows = await request(`${GH}/repos/${fullName}/releases?per_page=100`, opts);
296
+ return rows.map((r) => ({
297
+ tag: r.tag_name, name: r.name ?? r.tag_name, body: r.body ?? "",
298
+ created_at: r.created_at, url: r.html_url, branch: r.target_commitish,
299
+ }));
300
+ }
301
+ /** Cut a release: the tag is made on `target` if it does not exist. */
302
+ async function createRelease(fullName, o) {
303
+ const r = await request(`${GH}/repos/${fullName}/releases`, {
304
+ ...opts, method: "POST",
305
+ body: { tag_name: o.tag, name: o.name, body: o.body, target_commitish: o.target, draft: false, prerelease: false },
306
+ });
307
+ return {
308
+ tag: r.tag_name, name: r.name ?? r.tag_name, body: r.body ?? "",
309
+ created_at: r.created_at, url: r.html_url, branch: r.target_commitish,
310
+ };
311
+ }
289
312
  return {
290
313
  login,
291
314
  readFile,
@@ -303,6 +326,8 @@ export function github(token) {
303
326
  createPullRequest,
304
327
  commitsAhead,
305
328
  mergeBranch,
329
+ listReleases,
330
+ createRelease,
306
331
  async status() {
307
332
  return probe("github", async () => {
308
333
  const me = await request(`${GH}/user`, opts);
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/admin/services/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/admin/services/github.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heychunky/core",
3
- "version": "0.18.1",
3
+ "version": "0.20.0",
4
4
  "description": "The engine the Chunky CLI, worker and apps run on.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -0,0 +1,15 @@
1
+ -- The credential an app talks back to Chunky with: who may see dev and
2
+ -- next, later comments and feedback. Minted at hosting, set in the app's
3
+ -- environment, and only ever compared as a hash. One rung down from a
4
+ -- platform key; an app has at most one that is not revoked.
5
+ create table app_keys (
6
+ id uuid default gen_random_uuid() not null,
7
+ app_id uuid not null,
8
+ key_hash text not null,
9
+ prefix text not null,
10
+ created_at timestamptz default now() not null,
11
+ revoked_at timestamptz,
12
+ constraint app_keys_pkey primary key (id),
13
+ constraint app_keys_key_hash_key unique (key_hash),
14
+ constraint app_keys_app_id_fkey foreign key (app_id) references apps(id) on delete cascade
15
+ );
@@ -0,0 +1 @@
1
+ create index app_keys_app_idx on app_keys (app_id) where revoked_at is null;
@@ -0,0 +1,12 @@
1
+ -- Who may see an app's dev and next besides its organisation's members:
2
+ -- the testers it has invited, by email. A row and nothing more; the
3
+ -- sign-in is heychunky's own.
4
+ create table app_viewers (
5
+ app_id uuid not null,
6
+ email text not null,
7
+ added_by uuid,
8
+ added_at timestamptz default now() not null,
9
+ constraint app_viewers_pkey primary key (app_id, email),
10
+ constraint app_viewers_app_id_fkey foreign key (app_id) references apps(id) on delete cascade,
11
+ constraint app_viewers_added_by_fkey foreign key (added_by) references users(id) on delete set null
12
+ );
@@ -0,0 +1 @@
1
+ create unique index app_viewers_email_key on app_viewers (app_id, lower(email));
@@ -0,0 +1,12 @@
1
+ -- The hand-off from the console's sign-in to the app: a short-lived token
2
+ -- the console mints for a signed-in, allowed viewer and the app redeems
3
+ -- once with its app key. Nothing here outlives its expiry.
4
+ create table app_viewer_tokens (
5
+ token_hash text not null,
6
+ app_id uuid not null,
7
+ email text not null,
8
+ expires_at timestamptz not null,
9
+ redeemed_at timestamptz,
10
+ constraint app_viewer_tokens_pkey primary key (token_hash),
11
+ constraint app_viewer_tokens_app_id_fkey foreign key (app_id) references apps(id) on delete cascade
12
+ );