@flytedesk/app-kit 3.2.3 → 5.0.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/README.md +130 -10
- package/dist/auth/client/httpClient.d.ts +79 -1
- package/dist/auth/client/httpClient.js +185 -16
- package/dist/auth/client/httpClient.js.map +1 -1
- package/dist/auth/client/index.d.ts +4 -4
- package/dist/auth/client/index.js +3 -3
- package/dist/auth/client/index.js.map +1 -1
- package/dist/auth/client/useAuthSession.d.ts +61 -13
- package/dist/auth/client/useAuthSession.js +185 -42
- package/dist/auth/client/useAuthSession.js.map +1 -1
- package/dist/auth/errors.d.ts +30 -7
- package/dist/auth/errors.js +38 -8
- package/dist/auth/errors.js.map +1 -1
- package/dist/auth/guards.d.ts +12 -0
- package/dist/auth/guards.js +24 -6
- package/dist/auth/guards.js.map +1 -1
- package/dist/auth/index.d.ts +4 -4
- package/dist/auth/index.js +2 -2
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/oidc-client.js +12 -2
- package/dist/auth/oidc-client.js.map +1 -1
- package/dist/auth/plugin.d.ts +6 -0
- package/dist/auth/plugin.js +532 -304
- package/dist/auth/plugin.js.map +1 -1
- package/dist/auth/shared-types.d.ts +28 -1
- package/dist/auth/shared-types.js +35 -0
- package/dist/auth/shared-types.js.map +1 -1
- package/dist/auth/silentAuthPage.d.ts +20 -0
- package/dist/auth/silentAuthPage.js +75 -0
- package/dist/auth/silentAuthPage.js.map +1 -0
- package/dist/auth/testing/fake-idp.d.ts +35 -0
- package/dist/auth/testing/fake-idp.js +86 -2
- package/dist/auth/testing/fake-idp.js.map +1 -1
- package/dist/auth/testing/index.d.ts +3 -1
- package/dist/auth/testing/index.js +3 -1
- package/dist/auth/testing/index.js.map +1 -1
- package/dist/auth/testing/memory-store.d.ts +44 -0
- package/dist/auth/testing/memory-store.js +120 -0
- package/dist/auth/testing/memory-store.js.map +1 -0
- package/dist/auth/tokens.d.ts +24 -0
- package/dist/auth/tokens.js +31 -1
- package/dist/auth/tokens.js.map +1 -1
- package/dist/auth/types.d.ts +231 -96
- package/dist/auth/unavailable.d.ts +10 -0
- package/dist/auth/unavailable.js +11 -0
- package/dist/auth/unavailable.js.map +1 -0
- package/dist/bigquery/client.d.ts +4 -4
- package/dist/bigquery/client.js +2 -2
- package/dist/bigquery/client.js.map +1 -1
- package/dist/bigquery/errors.d.ts +14 -3
- package/dist/bigquery/errors.js +54 -13
- package/dist/bigquery/errors.js.map +1 -1
- package/dist/bigquery/index.d.ts +6 -4
- package/dist/bigquery/index.js +4 -2
- package/dist/bigquery/index.js.map +1 -1
- package/dist/bigquery/load.d.ts +25 -7
- package/dist/bigquery/load.js +61 -31
- package/dist/bigquery/load.js.map +1 -1
- package/dist/bigquery/query.d.ts +9 -2
- package/dist/bigquery/query.js +38 -16
- package/dist/bigquery/query.js.map +1 -1
- package/dist/bigquery/types.d.ts +55 -16
- package/dist/flags/plugin.js +4 -20
- package/dist/flags/plugin.js.map +1 -1
- package/dist/postgres/advisoryLock.d.ts +58 -0
- package/dist/postgres/advisoryLock.js +71 -0
- package/dist/postgres/advisoryLock.js.map +1 -0
- package/dist/postgres/index.d.ts +6 -0
- package/dist/postgres/index.js +7 -0
- package/dist/postgres/index.js.map +1 -0
- package/dist/profile/plugin.js +3 -20
- package/dist/profile/plugin.js.map +1 -1
- package/package.json +7 -2
- package/scripts/pending-release-count.mjs +0 -37
- package/scripts/release.sh +0 -126
- package/scripts/release.test.ts +0 -205
package/dist/flags/plugin.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fp from "fastify-plugin";
|
|
2
|
+
import { rejectUnauthenticated } from "../auth/guards.js";
|
|
2
3
|
const DEFAULT_ROUTE_PREFIX = "/flags";
|
|
3
4
|
const DEFAULT_PAGE_SIZE = 25;
|
|
4
5
|
const MAX_PAGE_SIZE = 200;
|
|
@@ -29,23 +30,6 @@ function toFlagResponse(row, meta) {
|
|
|
29
30
|
updated: row.updatedAt.toISOString(),
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Not exported: this plugin's own minimal 401 check on `request.authUser`, kept
|
|
34
|
-
* local rather than importing ../auth/guards.js's requireAuth — identical contract
|
|
35
|
-
* and identical implementation to src/profile/plugin.ts's own requireAuthUser (see
|
|
36
|
-
* that file's doc comment for the full rationale: no hard dependency on the auth
|
|
37
|
-
* module's internals beyond the `authUser` decoration contract, so any consumer
|
|
38
|
-
* populating request.authUser some other way still works).
|
|
39
|
-
*/
|
|
40
|
-
function requireAuthUser(request, reply) {
|
|
41
|
-
if (!request.authUser) {
|
|
42
|
-
reply
|
|
43
|
-
.code(401)
|
|
44
|
-
.send({ error: "Authentication required", code: "unauthenticated" });
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
33
|
function coercePositiveInt(value, fallback, max) {
|
|
50
34
|
const n = typeof value === "string"
|
|
51
35
|
? Number(value)
|
|
@@ -164,7 +148,7 @@ const appKitFlagsPlugin = async (fastify, options) => {
|
|
|
164
148
|
* on this route (same boundary /profile draws around authorization).
|
|
165
149
|
*/
|
|
166
150
|
fastify.get(routePrefix, async (request, reply) => {
|
|
167
|
-
if (
|
|
151
|
+
if (rejectUnauthenticated(request, reply))
|
|
168
152
|
return;
|
|
169
153
|
const query = request.query;
|
|
170
154
|
const parsedQuery = parseListQuery(query);
|
|
@@ -229,7 +213,7 @@ const appKitFlagsPlugin = async (fastify, options) => {
|
|
|
229
213
|
* exposing a key here that the list silently hides.
|
|
230
214
|
*/
|
|
231
215
|
fastify.get(`${routePrefix}/:key`, async (request, reply) => {
|
|
232
|
-
if (
|
|
216
|
+
if (rejectUnauthenticated(request, reply))
|
|
233
217
|
return;
|
|
234
218
|
const meta = describeFlag(request.params.key);
|
|
235
219
|
if (!meta) {
|
|
@@ -256,7 +240,7 @@ const appKitFlagsPlugin = async (fastify, options) => {
|
|
|
256
240
|
* (whose `detail` falls back to "No change" rather than being skipped).
|
|
257
241
|
*/
|
|
258
242
|
fastify.patch(`${routePrefix}/:key`, async (request, reply) => {
|
|
259
|
-
if (
|
|
243
|
+
if (rejectUnauthenticated(request, reply))
|
|
260
244
|
return;
|
|
261
245
|
const parsed = parsePatchBody(request.body);
|
|
262
246
|
if ("error" in parsed) {
|
package/dist/flags/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/flags/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/flags/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction-scoped Postgres advisory locks, shared by every flytedesk app (AK-23) —
|
|
3
|
+
* extracted from media-planner's `apps/api/src/lib/advisoryLock.ts` so the
|
|
4
|
+
* `set_config('lock_timeout', …)` / `pg_advisory_xact_lock(hashtextextended(…))` pair
|
|
5
|
+
* and the one definition of "the lock wait timed out" live in exactly one place.
|
|
6
|
+
*
|
|
7
|
+
* The first consumer is `@flytedesk/app-kit/auth`'s `AuthStore.withIdpSessionLock` (see
|
|
8
|
+
* its doc comment in ../auth/types.ts), but nothing here is auth-specific: an app's own
|
|
9
|
+
* per-resource locks (media-planner's campaign folder-tree lock, for one) call the same
|
|
10
|
+
* helper.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* The structural subset of a Prisma interactive-transaction client (or any
|
|
14
|
+
* tagged-template raw-SQL executor bound to ONE open transaction) this module needs.
|
|
15
|
+
* Deliberately not `@prisma/client`'s own type, mirroring ../trace/types.ts's
|
|
16
|
+
* `TracePrismaClient`: a `Prisma.TransactionClient` satisfies it structurally, and so
|
|
17
|
+
* does a hand-rolled adapter over a single checked-out `pg` client inside `BEGIN`.
|
|
18
|
+
*/
|
|
19
|
+
export interface AdvisoryLockClient {
|
|
20
|
+
$executeRaw(query: TemplateStringsArray, ...values: unknown[]): Promise<number>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Names one lock. `namespace` keeps unrelated lock families from ever colliding on the
|
|
24
|
+
* same 64-bit key (an IdP session id and a campaign id may be the same string); `id` is
|
|
25
|
+
* the resource within it. Hashed together as `${namespace}:${id}` by Postgres's
|
|
26
|
+
* `hashtextextended`, the 64-bit variant (fewer accidental collisions than `hashtext`'s
|
|
27
|
+
* 32 bits). `namespace` must not contain `:` (see `acquireAdvisoryLock`).
|
|
28
|
+
*/
|
|
29
|
+
export interface AdvisoryLockKey {
|
|
30
|
+
namespace: string;
|
|
31
|
+
id: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Takes a transaction-scoped advisory lock on `key`, held until `tx`'s transaction ends
|
|
35
|
+
* (commit or rollback — there is no unlock call to forget). Every caller passing the
|
|
36
|
+
* same key serializes behind the holder. Waiting longer than `lockTimeoutMs` fails the
|
|
37
|
+
* statement with Postgres 55P03 (`lock_not_available`) instead of queuing forever;
|
|
38
|
+
* `isAdvisoryLockTimeout` recognizes that failure.
|
|
39
|
+
*
|
|
40
|
+
* `tx` MUST be bound to an open transaction: `set_config(…, true)` is transaction-local,
|
|
41
|
+
* and an advisory xact lock taken outside a transaction is released the instant its
|
|
42
|
+
* own implicit statement transaction commits.
|
|
43
|
+
*/
|
|
44
|
+
export declare function acquireAdvisoryLock(tx: AdvisoryLockClient, key: AdvisoryLockKey, lockTimeoutMs: number): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* True when `err` means "the lock (or the connection to take it on) could not be had in
|
|
47
|
+
* time" — the caller's cue to answer "busy, try again" (e.g. a 503) rather than treating
|
|
48
|
+
* it as any other failure. Recognizes every shape that outcome arrives in:
|
|
49
|
+
*
|
|
50
|
+
* - Postgres 55P03 straight from node-postgres (`err.code`).
|
|
51
|
+
* - Postgres 55P03 surfaced through Prisma's driver adapter
|
|
52
|
+
* (`err.meta.driverAdapterError.cause.code`), which is how Prisma 7 reports it.
|
|
53
|
+
* - Prisma P2028 "Unable to start a transaction in the given time": the transaction's
|
|
54
|
+
* `maxWait` expired before a pooled connection was free — no SQL ever ran, so there
|
|
55
|
+
* is no SQLSTATE; the message is what tells it apart from P2028's other causes (a
|
|
56
|
+
* transaction used after commit, or after its own `timeout`).
|
|
57
|
+
*/
|
|
58
|
+
export declare function isAdvisoryLockTimeout(err: unknown): boolean;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction-scoped Postgres advisory locks, shared by every flytedesk app (AK-23) —
|
|
3
|
+
* extracted from media-planner's `apps/api/src/lib/advisoryLock.ts` so the
|
|
4
|
+
* `set_config('lock_timeout', …)` / `pg_advisory_xact_lock(hashtextextended(…))` pair
|
|
5
|
+
* and the one definition of "the lock wait timed out" live in exactly one place.
|
|
6
|
+
*
|
|
7
|
+
* The first consumer is `@flytedesk/app-kit/auth`'s `AuthStore.withIdpSessionLock` (see
|
|
8
|
+
* its doc comment in ../auth/types.ts), but nothing here is auth-specific: an app's own
|
|
9
|
+
* per-resource locks (media-planner's campaign folder-tree lock, for one) call the same
|
|
10
|
+
* helper.
|
|
11
|
+
*/
|
|
12
|
+
/** Joins namespace and id into the one string Postgres hashes. Forbidden in a namespace
|
|
13
|
+
* so the join is unambiguous. */
|
|
14
|
+
const KEY_SEPARATOR = ":";
|
|
15
|
+
/**
|
|
16
|
+
* Takes a transaction-scoped advisory lock on `key`, held until `tx`'s transaction ends
|
|
17
|
+
* (commit or rollback — there is no unlock call to forget). Every caller passing the
|
|
18
|
+
* same key serializes behind the holder. Waiting longer than `lockTimeoutMs` fails the
|
|
19
|
+
* statement with Postgres 55P03 (`lock_not_available`) instead of queuing forever;
|
|
20
|
+
* `isAdvisoryLockTimeout` recognizes that failure.
|
|
21
|
+
*
|
|
22
|
+
* `tx` MUST be bound to an open transaction: `set_config(…, true)` is transaction-local,
|
|
23
|
+
* and an advisory xact lock taken outside a transaction is released the instant its
|
|
24
|
+
* own implicit statement transaction commits.
|
|
25
|
+
*/
|
|
26
|
+
export async function acquireAdvisoryLock(tx, key, lockTimeoutMs) {
|
|
27
|
+
if (!Number.isInteger(lockTimeoutMs) || lockTimeoutMs <= 0) {
|
|
28
|
+
throw new Error(`acquireAdvisoryLock: lockTimeoutMs must be a positive integer, got ${lockTimeoutMs}`);
|
|
29
|
+
}
|
|
30
|
+
if (key.namespace.length === 0 || key.id.length === 0) {
|
|
31
|
+
throw new Error("acquireAdvisoryLock: key.namespace and key.id must both be non-empty");
|
|
32
|
+
}
|
|
33
|
+
if (key.namespace.includes(KEY_SEPARATOR)) {
|
|
34
|
+
// "a:b" + "c" and "a" + "b:c" would both hash "a:b:c" — two different locks sharing
|
|
35
|
+
// one key. The id may contain the separator: the namespace ends at the FIRST one.
|
|
36
|
+
throw new Error(`acquireAdvisoryLock: key.namespace must not contain "${KEY_SEPARATOR}", got "${key.namespace}"`);
|
|
37
|
+
}
|
|
38
|
+
await tx.$executeRaw `SELECT set_config('lock_timeout', ${String(lockTimeoutMs)}, true)`;
|
|
39
|
+
await tx.$executeRaw `SELECT pg_advisory_xact_lock(hashtextextended(${`${key.namespace}${KEY_SEPARATOR}${key.id}`}, 0))`;
|
|
40
|
+
}
|
|
41
|
+
/** Postgres SQLSTATE for `lock_not_available` — what `lock_timeout` raises. */
|
|
42
|
+
const LOCK_NOT_AVAILABLE = "55P03";
|
|
43
|
+
/** Prisma's message for P2028 when `maxWait` elapsed before a pooled connection could
|
|
44
|
+
* even be checked out to start the transaction. */
|
|
45
|
+
const PRISMA_TRANSACTION_START_TIMEOUT = "Unable to start a transaction in the given time";
|
|
46
|
+
/**
|
|
47
|
+
* True when `err` means "the lock (or the connection to take it on) could not be had in
|
|
48
|
+
* time" — the caller's cue to answer "busy, try again" (e.g. a 503) rather than treating
|
|
49
|
+
* it as any other failure. Recognizes every shape that outcome arrives in:
|
|
50
|
+
*
|
|
51
|
+
* - Postgres 55P03 straight from node-postgres (`err.code`).
|
|
52
|
+
* - Postgres 55P03 surfaced through Prisma's driver adapter
|
|
53
|
+
* (`err.meta.driverAdapterError.cause.code`), which is how Prisma 7 reports it.
|
|
54
|
+
* - Prisma P2028 "Unable to start a transaction in the given time": the transaction's
|
|
55
|
+
* `maxWait` expired before a pooled connection was free — no SQL ever ran, so there
|
|
56
|
+
* is no SQLSTATE; the message is what tells it apart from P2028's other causes (a
|
|
57
|
+
* transaction used after commit, or after its own `timeout`).
|
|
58
|
+
*/
|
|
59
|
+
export function isAdvisoryLockTimeout(err) {
|
|
60
|
+
if (typeof err !== "object" || err === null)
|
|
61
|
+
return false;
|
|
62
|
+
const candidate = err;
|
|
63
|
+
if (candidate.code === LOCK_NOT_AVAILABLE)
|
|
64
|
+
return true;
|
|
65
|
+
if (candidate.meta?.driverAdapterError?.cause?.code === LOCK_NOT_AVAILABLE)
|
|
66
|
+
return true;
|
|
67
|
+
return (candidate.code === "P2028" &&
|
|
68
|
+
typeof candidate.message === "string" &&
|
|
69
|
+
candidate.message.includes(PRISMA_TRANSACTION_START_TIMEOUT));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=advisoryLock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advisoryLock.js","sourceRoot":"","sources":["../../src/postgres/advisoryLock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH;kCACkC;AAClC,MAAM,aAAa,GAAG,GAAG,CAAC;AAc1B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAsB,EACtB,GAAoB,EACpB,aAAqB;IAErB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,sEAAsE,aAAa,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,oFAAoF;QACpF,kFAAkF;QAClF,MAAM,IAAI,KAAK,CAAC,wDAAwD,aAAa,WAAW,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;IACpH,CAAC;IACD,MAAM,EAAE,CAAC,WAAW,CAAA,qCAAqC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;IACxF,MAAM,EAAE,CAAC,WAAW,CAAA,iDAAiD,GAAG,GAAG,CAAC,SAAS,GAAG,aAAa,GAAG,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC;AAC1H,CAAC;AAED,+EAA+E;AAC/E,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC;oDACoD;AACpD,MAAM,gCAAgC,GAAG,iDAAiD,CAAC;AAE3F;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,SAAS,GAAG,GAIjB,CAAC;IACF,IAAI,SAAS,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,SAAS,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACxF,OAAO,CACL,SAAS,CAAC,IAAI,KAAK,OAAO;QAC1B,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAC7D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@flytedesk/app-kit/postgres` — Postgres-specific helpers shared by every flytedesk
|
|
3
|
+
* app. Like every other app-kit module, this never builds its own database client: each
|
|
4
|
+
* helper takes a structural client (see `AdvisoryLockClient`) the consumer already has.
|
|
5
|
+
*/
|
|
6
|
+
export { acquireAdvisoryLock, isAdvisoryLockTimeout, type AdvisoryLockClient, type AdvisoryLockKey, } from "./advisoryLock.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@flytedesk/app-kit/postgres` — Postgres-specific helpers shared by every flytedesk
|
|
3
|
+
* app. Like every other app-kit module, this never builds its own database client: each
|
|
4
|
+
* helper takes a structural client (see `AdvisoryLockClient`) the consumer already has.
|
|
5
|
+
*/
|
|
6
|
+
export { acquireAdvisoryLock, isAdvisoryLockTimeout, } from "./advisoryLock.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/postgres/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GAGtB,MAAM,mBAAmB,CAAC"}
|
package/dist/profile/plugin.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fp from "fastify-plugin";
|
|
2
|
+
import { rejectUnauthenticated } from "../auth/guards.js";
|
|
2
3
|
const DEFAULT_ROUTE_PREFIX = "/profile";
|
|
3
4
|
const PATCHABLE_FIELDS = ["title", "phone", "timezone", "bio"];
|
|
4
5
|
function assertRequiredOptions(options) {
|
|
@@ -47,24 +48,6 @@ function parsePatchBody(body) {
|
|
|
47
48
|
}
|
|
48
49
|
return patch;
|
|
49
50
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Not exported: this plugin's own minimal 401 check on `request.authUser`, kept
|
|
52
|
-
* local (rather than importing ../auth/guards.js's requireAuth) so this module has
|
|
53
|
-
* no hard dependency on the auth module's internals beyond the `authUser`
|
|
54
|
-
* decoration contract it documents (declare module "fastify" in ../auth/plugin.ts)
|
|
55
|
-
* — any consumer populating request.authUser some other way (not necessarily via
|
|
56
|
-
* @flytedesk/app-kit/auth) still works. Mirrors requireAuth's shape in
|
|
57
|
-
* ../auth/guards.ts: returns whether the request may proceed, and the route
|
|
58
|
-
* handler reads `request.authUser!` afterward, same as that module's own
|
|
59
|
-
* requirePermission does.
|
|
60
|
-
*/
|
|
61
|
-
function requireAuthUser(request, reply) {
|
|
62
|
-
if (!request.authUser) {
|
|
63
|
-
reply.code(401).send({ error: "Authentication required", code: "unauthenticated" });
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
51
|
const appKitProfilePlugin = async (fastify, options) => {
|
|
69
52
|
assertRequiredOptions(options);
|
|
70
53
|
// request.authUser is decorated by @flytedesk/app-kit/auth's flytedeskAuth plugin
|
|
@@ -86,7 +69,7 @@ const appKitProfilePlugin = async (fastify, options) => {
|
|
|
86
69
|
/** GET {routePrefix} — the caller's own profile. Never 404s: a user with no row
|
|
87
70
|
* yet still gets a 200 with every field null (see ProfileStore.findByUserId). */
|
|
88
71
|
fastify.get(routePrefix, async (request, reply) => {
|
|
89
|
-
if (
|
|
72
|
+
if (rejectUnauthenticated(request, reply))
|
|
90
73
|
return;
|
|
91
74
|
const row = await store.findByUserId(request.authUser.id);
|
|
92
75
|
return toResponseBody(request.authUser.id, row);
|
|
@@ -95,7 +78,7 @@ const appKitProfilePlugin = async (fastify, options) => {
|
|
|
95
78
|
* is present in the body, scoped to the caller's own row (request.authUser.id is
|
|
96
79
|
* the only id this handler ever reads or writes — never a caller-supplied one). */
|
|
97
80
|
fastify.patch(routePrefix, async (request, reply) => {
|
|
98
|
-
if (
|
|
81
|
+
if (rejectUnauthenticated(request, reply))
|
|
99
82
|
return;
|
|
100
83
|
const parsed = parsePatchBody(request.body);
|
|
101
84
|
if ("error" in parsed) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/profile/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/profile/plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flytedesk/app-kit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Shared platform kit for flytedesk apps: flytedesk-id auth (BFF/OIDC client) and a Postgres-native trace/audit layer.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
"dist",
|
|
27
27
|
"prisma",
|
|
28
|
-
"scripts"
|
|
28
|
+
"scripts/postinstall-eslint-ts6-shim.cjs"
|
|
29
29
|
],
|
|
30
30
|
"bin": {
|
|
31
31
|
"trace-sync": "./dist/cli/trace-sync.js",
|
|
@@ -77,6 +77,10 @@
|
|
|
77
77
|
"./spa-server": {
|
|
78
78
|
"types": "./dist/spa-server/index.d.ts",
|
|
79
79
|
"import": "./dist/spa-server/index.js"
|
|
80
|
+
},
|
|
81
|
+
"./postgres": {
|
|
82
|
+
"types": "./dist/postgres/index.d.ts",
|
|
83
|
+
"import": "./dist/postgres/index.js"
|
|
80
84
|
}
|
|
81
85
|
},
|
|
82
86
|
"scripts": {
|
|
@@ -121,6 +125,7 @@
|
|
|
121
125
|
"@testcontainers/postgresql": "^12.1.0",
|
|
122
126
|
"@testing-library/react": "^16.3.3",
|
|
123
127
|
"@types/cross-spawn": "^6.0.6",
|
|
128
|
+
"@types/jsdom": "^30.0.0",
|
|
124
129
|
"@types/node": "^24.0.0",
|
|
125
130
|
"@types/pg": "^8.23.1",
|
|
126
131
|
"@types/react": "^19.3.0",
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Prints how many package releases the changesets committed in the current
|
|
3
|
-
// directory would produce. scripts/release.sh uses it to decide between
|
|
4
|
-
// "version + publish" and "no-op".
|
|
5
|
-
//
|
|
6
|
-
// It counts every changeset on disk. It deliberately does NOT pass
|
|
7
|
-
// `--since=origin/main`: a release runs from a clone of main, where the
|
|
8
|
-
// pending changesets are already on origin/main, so `--since` always
|
|
9
|
-
// reports zero. That is exactly how the first real release run failed
|
|
10
|
-
// (AK-13, 2026-09-24).
|
|
11
|
-
import { spawnSync } from "node:child_process";
|
|
12
|
-
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
13
|
-
import { createRequire } from "node:module";
|
|
14
|
-
import { tmpdir } from "node:os";
|
|
15
|
-
import { join } from "node:path";
|
|
16
|
-
|
|
17
|
-
const require = createRequire(import.meta.url);
|
|
18
|
-
const changesetBin = require.resolve("@changesets/cli/bin.js");
|
|
19
|
-
|
|
20
|
-
const outDir = mkdtempSync(join(tmpdir(), "changeset-status-"));
|
|
21
|
-
const outFile = join(outDir, "status.json");
|
|
22
|
-
|
|
23
|
-
try {
|
|
24
|
-
const result = spawnSync(
|
|
25
|
-
process.execPath,
|
|
26
|
-
[changesetBin, "status", `--output=${outFile}`],
|
|
27
|
-
{ cwd: process.cwd(), encoding: "utf8" },
|
|
28
|
-
);
|
|
29
|
-
if (result.status !== 0) {
|
|
30
|
-
process.stderr.write(result.stderr || result.stdout);
|
|
31
|
-
process.exit(result.status ?? 1);
|
|
32
|
-
}
|
|
33
|
-
const status = JSON.parse(readFileSync(outFile, "utf8"));
|
|
34
|
-
process.stdout.write(String(status.releases.length));
|
|
35
|
-
} finally {
|
|
36
|
-
rmSync(outDir, { recursive: true, force: true });
|
|
37
|
-
}
|
package/scripts/release.sh
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
3
|
-
# app-kit release script.
|
|
4
|
-
#
|
|
5
|
-
# GitHub Actions no longer starts jobs for the Flytedesk org (billing
|
|
6
|
-
# refusal), so this script replaces .github/workflows/ci.yml + release.yml.
|
|
7
|
-
# It runs the exact gates CI used to run, then versions/publishes/tags
|
|
8
|
-
# exactly like the old two-stage changesets/action flow did — but from a
|
|
9
|
-
# human-triggered local run in a dedicated deploy clone, instead of GitHub.
|
|
10
|
-
#
|
|
11
|
-
# Usage:
|
|
12
|
-
# bash scripts/release.sh [<commit-or-ref>]
|
|
13
|
-
#
|
|
14
|
-
# <commit-or-ref> defaults to origin/main's tip. It must be reachable from
|
|
15
|
-
# origin/main (i.e. already merged) — this script never releases unmerged
|
|
16
|
-
# work.
|
|
17
|
-
#
|
|
18
|
-
# Run this ONLY from the sanctioned deploy clone at
|
|
19
|
-
# C:/Users/newms/deploy/app-kit (see .danxbot/config/workflow.md
|
|
20
|
-
# "Publishing" for one-time setup). It refuses to run anywhere else.
|
|
21
|
-
set -euo pipefail
|
|
22
|
-
|
|
23
|
-
log() { printf '[release] %s\n' "$1"; }
|
|
24
|
-
die() { printf '[release] ERROR: %s\n' "$1" >&2; exit 1; }
|
|
25
|
-
|
|
26
|
-
# --- Guard 1: this must be the sanctioned deploy clone ---------------------
|
|
27
|
-
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" \
|
|
28
|
-
|| die "not inside a git repository"
|
|
29
|
-
|
|
30
|
-
MARKER="$REPO_ROOT/.deploy-clone-marker"
|
|
31
|
-
[[ -f "$MARKER" ]] \
|
|
32
|
-
|| die "missing $MARKER — this is not the sanctioned deploy clone. \
|
|
33
|
-
Release runs only happen from a dedicated clone at C:/Users/newms/deploy/app-kit; \
|
|
34
|
-
see .danxbot/config/workflow.md 'Publishing' for one-time setup."
|
|
35
|
-
|
|
36
|
-
cd "$REPO_ROOT"
|
|
37
|
-
|
|
38
|
-
# --- Guard 2: refuse a dirty tree ------------------------------------------
|
|
39
|
-
if [[ -n "$(git status --porcelain)" ]]; then
|
|
40
|
-
die "working tree is dirty — refusing to release from an unclean clone. \
|
|
41
|
-
Run 'git status' in $REPO_ROOT and clean it up first."
|
|
42
|
-
fi
|
|
43
|
-
|
|
44
|
-
# --- Guard 3: take the lock -------------------------------------------------
|
|
45
|
-
LOCKFILE="$REPO_ROOT/.release.lock"
|
|
46
|
-
if ! ( set -o noclobber; printf '%s\n' "$$" > "$LOCKFILE" ) 2>/dev/null; then
|
|
47
|
-
die "lock file $LOCKFILE already exists — another release run is in \
|
|
48
|
-
progress (or a previous run crashed without cleaning up; if you're sure \
|
|
49
|
-
none is running, delete the lock file and retry)."
|
|
50
|
-
fi
|
|
51
|
-
trap 'rm -f "$LOCKFILE"' EXIT
|
|
52
|
-
|
|
53
|
-
# --- Fetch + resolve the target commit --------------------------------------
|
|
54
|
-
log "fetching origin..."
|
|
55
|
-
git fetch origin
|
|
56
|
-
|
|
57
|
-
TARGET_REF="${1:-origin/main}"
|
|
58
|
-
TARGET_SHA="$(git rev-parse "$TARGET_REF")" \
|
|
59
|
-
|| die "could not resolve '$TARGET_REF' to a commit"
|
|
60
|
-
|
|
61
|
-
git merge-base --is-ancestor "$TARGET_SHA" origin/main \
|
|
62
|
-
|| die "$TARGET_REF ($TARGET_SHA) is not reachable from origin/main — \
|
|
63
|
-
refusing to release unmerged work."
|
|
64
|
-
|
|
65
|
-
log "target commit: $TARGET_SHA"
|
|
66
|
-
|
|
67
|
-
# Move local main onto the target commit so a version-bump commit (if any)
|
|
68
|
-
# lands on top of it and can be pushed straight to origin/main.
|
|
69
|
-
git checkout -B main "$TARGET_SHA"
|
|
70
|
-
|
|
71
|
-
# --- Install + gates ---------------------------------------------------------
|
|
72
|
-
log "npm ci..."
|
|
73
|
-
npm ci
|
|
74
|
-
|
|
75
|
-
log "running gates (npm run check: lint, typecheck, build, test, test:integration, check:exports)..."
|
|
76
|
-
npm run check
|
|
77
|
-
|
|
78
|
-
log "gates passed."
|
|
79
|
-
|
|
80
|
-
# --- Version / publish ------------------------------------------------------
|
|
81
|
-
PENDING_COUNT="$(node scripts/pending-release-count.mjs)"
|
|
82
|
-
|
|
83
|
-
CURRENT_VERSION="$(node -p "require('./package.json').version")"
|
|
84
|
-
|
|
85
|
-
if [[ "$PENDING_COUNT" -eq 0 ]]; then
|
|
86
|
-
PUBLISHED_VERSION="$(npm view @flytedesk/app-kit version)"
|
|
87
|
-
if [[ "$PUBLISHED_VERSION" == "$CURRENT_VERSION" ]]; then
|
|
88
|
-
log "no changesets pending and $CURRENT_VERSION is already on npm — no-op."
|
|
89
|
-
printf 'RESULT: sha=%s version=%s status=no-op\n' "$TARGET_SHA" "$CURRENT_VERSION"
|
|
90
|
-
exit 0
|
|
91
|
-
else
|
|
92
|
-
die "no changesets pending, but package.json ($CURRENT_VERSION) does not \
|
|
93
|
-
match the published npm version ($PUBLISHED_VERSION) — refusing to guess \
|
|
94
|
-
what to do; this needs a human to reconcile versions."
|
|
95
|
-
fi
|
|
96
|
-
fi
|
|
97
|
-
|
|
98
|
-
log "$PENDING_COUNT changeset(s) pending — versioning..."
|
|
99
|
-
# @changesets/changelog-github looks up each changeset's commit and author on
|
|
100
|
-
# GitHub, so `changeset version` needs a token. Take it from gh-as for this one
|
|
101
|
-
# command only: it is never written to disk or exported to later steps.
|
|
102
|
-
CHANGELOG_TOKEN="$(gh-as auth token)" \
|
|
103
|
-
|| die "could not get a GitHub token from gh-as for the changelog step."
|
|
104
|
-
[[ -n "$CHANGELOG_TOKEN" ]] \
|
|
105
|
-
|| die "gh-as returned an empty GitHub token for the changelog step."
|
|
106
|
-
GITHUB_TOKEN="$CHANGELOG_TOKEN" npx changeset version
|
|
107
|
-
unset CHANGELOG_TOKEN
|
|
108
|
-
|
|
109
|
-
NEW_VERSION="$(node -p "require('./package.json').version")"
|
|
110
|
-
[[ "$NEW_VERSION" != "$CURRENT_VERSION" ]] \
|
|
111
|
-
|| die "changeset version did not bump the version — aborting before publish."
|
|
112
|
-
|
|
113
|
-
log "bumped to $NEW_VERSION. Committing..."
|
|
114
|
-
git add -A
|
|
115
|
-
git commit -m "chore(release): v$NEW_VERSION"
|
|
116
|
-
|
|
117
|
-
log "pushing version-bump commit to origin/main (fails on non-fast-forward)..."
|
|
118
|
-
git push origin main
|
|
119
|
-
|
|
120
|
-
log "publishing to npm (account flytedan, token from ~/.npmrc)..."
|
|
121
|
-
npx changeset publish
|
|
122
|
-
|
|
123
|
-
log "pushing tag v$NEW_VERSION..."
|
|
124
|
-
git push origin "v$NEW_VERSION"
|
|
125
|
-
|
|
126
|
-
printf 'RESULT: sha=%s version=%s status=published\n' "$(git rev-parse HEAD)" "$NEW_VERSION"
|