@flytedesk/app-kit 4.0.0 → 6.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.
Files changed (45) hide show
  1. package/dist/auth/plugin.js +22 -2
  2. package/dist/auth/plugin.js.map +1 -1
  3. package/dist/auth/testing/fake-idp.d.ts +9 -0
  4. package/dist/auth/testing/fake-idp.js +33 -5
  5. package/dist/auth/testing/fake-idp.js.map +1 -1
  6. package/dist/bigquery/client.d.ts +4 -4
  7. package/dist/bigquery/client.js +2 -2
  8. package/dist/bigquery/client.js.map +1 -1
  9. package/dist/bigquery/errors.d.ts +19 -0
  10. package/dist/bigquery/errors.js +41 -0
  11. package/dist/bigquery/errors.js.map +1 -1
  12. package/dist/bigquery/index.d.ts +3 -3
  13. package/dist/bigquery/index.js +1 -1
  14. package/dist/bigquery/index.js.map +1 -1
  15. package/dist/bigquery/load.d.ts +25 -7
  16. package/dist/bigquery/load.js +61 -31
  17. package/dist/bigquery/load.js.map +1 -1
  18. package/dist/bigquery/query.js +14 -1
  19. package/dist/bigquery/query.js.map +1 -1
  20. package/dist/bigquery/schema.d.ts +5 -0
  21. package/dist/bigquery/schema.js +35 -0
  22. package/dist/bigquery/schema.js.map +1 -0
  23. package/dist/bigquery/types.d.ts +57 -17
  24. package/dist/chat/index.d.ts +52 -21
  25. package/dist/chat/index.js +50 -20
  26. package/dist/chat/index.js.map +1 -1
  27. package/dist/chat/mcp/entry.d.ts +37 -0
  28. package/dist/chat/mcp/entry.js +135 -0
  29. package/dist/chat/mcp/entry.js.map +1 -0
  30. package/dist/cli/is-running-as-main.d.ts +1 -0
  31. package/dist/cli/is-running-as-main.js +54 -0
  32. package/dist/cli/is-running-as-main.js.map +1 -0
  33. package/dist/cli/sync-engine.d.ts +1 -32
  34. package/dist/cli/sync-engine.js +7 -45
  35. package/dist/cli/sync-engine.js.map +1 -1
  36. package/dist/flags/evaluate.d.ts +43 -0
  37. package/dist/flags/evaluate.js +64 -0
  38. package/dist/flags/evaluate.js.map +1 -0
  39. package/dist/flags/index.d.ts +22 -6
  40. package/dist/flags/index.js +21 -6
  41. package/dist/flags/index.js.map +1 -1
  42. package/dist/flags/plugin.js +73 -7
  43. package/dist/flags/plugin.js.map +1 -1
  44. package/dist/flags/types.d.ts +25 -0
  45. package/package.json +3 -2
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * app-kit-chat-mcp (AK-34) — a runnable stdio entry point for
4
+ * `@flytedesk/app-kit/chat`'s MCP server, so a consuming app's
5
+ * `.danxbot/config/mcp-servers/*.yml` can launch a real chat MCP server without
6
+ * vendoring a copy of `mcp-protocol.js`/`mcp-server.js` into its own repo.
7
+ *
8
+ * ## Launch form
9
+ *
10
+ * This package publishes FIVE bins and none is named `app-kit`, so npx needs
11
+ * `--package=` to say which package to fetch (separate from which bin to run):
12
+ *
13
+ * npx -y --package=@flytedesk/app-kit@<v> app-kit-chat-mcp --tools <abs path>
14
+ *
15
+ * `npx -y @flytedesk/app-kit@<v> app-kit-chat-mcp` (no `--package=`) fails —
16
+ * verified against a real `npm pack` tarball run via `npx --package=<tgz>` from a
17
+ * clean directory with no `node_modules` (see entry.test.ts's "packed via npm pack,
18
+ * run via npx --package" suite).
19
+ *
20
+ * `--tools <path>` is resolved against `process.cwd()`, which danxbot sets to its
21
+ * OWN clean-room working directory — an app's yml MUST pass a
22
+ * `${DANX_REPO_ROOT}`-absolute path, never a bare relative one.
23
+ *
24
+ * ## The `--tools` module — kit injection, not a package import
25
+ *
26
+ * The module must NOT `import` `@flytedesk/app-kit` itself — that cannot resolve
27
+ * from danxbot's unbuilt dispatch clone (no `node_modules`), and would just move the
28
+ * vendoring problem this card closes into "the app re-implements createReplyTool".
29
+ * Instead this file injects a `ChatMcpKit` (`createReplyTool`, `parseReplyArguments`,
30
+ * `createChatMcpProtocol` — the same values `@flytedesk/app-kit/chat` exports) as
31
+ * the module's one argument:
32
+ *
33
+ * export default function build(kit) {
34
+ * return kit.createChatMcpProtocol({
35
+ * serverName: "my-app-chat",
36
+ * tools: [kit.createReplyTool({ description: "...", deliver: postReply }), ...],
37
+ * });
38
+ * }
39
+ *
40
+ * The default export returns a `ChatMcpProtocol` (`{handleMessage}`), not a plain
41
+ * options bag, so it can wrap the built protocol before returning (e.g.
42
+ * media-planner's MP-169 `loggedProtocol`). A module wanting type-checking can
43
+ * reference the exported `BuildChatServer`/`ChatMcpKit` TYPES via a `// @ts-check`
44
+ * JSDoc `@type` comment — type-only, erased, resolves fine from the app's own dev
45
+ * environment; it must never become a value import.
46
+ *
47
+ * ## Dependency-free at runtime
48
+ *
49
+ * Node builtins + this package's own `mcp-protocol.js`/`mcp-server.js` (themselves
50
+ * dependency-free) + `../../cli/is-running-as-main.js` (also Node-builtins-only —
51
+ * deliberately not imported from `../../cli/sync-engine.js`, which pulls in
52
+ * `cross-spawn` for its own Prisma-shelling subcommands).
53
+ */
54
+ import { pathToFileURL } from "node:url";
55
+ import { resolve as resolvePath } from "node:path";
56
+ import { createChatMcpProtocol, createReplyTool, parseReplyArguments, } from "../mcp-protocol.js";
57
+ import { createChatMcpStdioServer } from "../mcp-server.js";
58
+ import { isRunningAsMain } from "../../cli/is-running-as-main.js";
59
+ const KIT = {
60
+ createReplyTool,
61
+ parseReplyArguments,
62
+ createChatMcpProtocol,
63
+ };
64
+ export class ChatMcpEntryError extends Error {
65
+ }
66
+ /** Parse argv into `{toolsPath}`. Exported for direct unit testing. */
67
+ export function parseArgs(argv) {
68
+ let toolsPath;
69
+ for (let i = 0; i < argv.length; i += 1) {
70
+ const arg = argv[i];
71
+ if (arg === "--tools") {
72
+ toolsPath = argv[i + 1];
73
+ i += 1;
74
+ }
75
+ else {
76
+ throw new ChatMcpEntryError(`app-kit-chat-mcp: unrecognized argument "${arg}"`);
77
+ }
78
+ }
79
+ if (toolsPath === undefined || toolsPath === "") {
80
+ throw new ChatMcpEntryError("app-kit-chat-mcp: missing required --tools <absolute path to the app's tools module>");
81
+ }
82
+ return { toolsPath };
83
+ }
84
+ /**
85
+ * Dynamically `import()` the app's tools module and validate its default export.
86
+ * Exported for direct unit testing (no process spawn needed to exercise the loading
87
+ * and validation logic — see entry.test.ts's own split between a fast in-process
88
+ * suite for this function and real stdio/npx spawn suites for the whole process).
89
+ */
90
+ export async function loadBuildChatServer(toolsPath) {
91
+ const absolutePath = resolvePath(process.cwd(), toolsPath);
92
+ let mod;
93
+ try {
94
+ mod = await import(pathToFileURL(absolutePath).href);
95
+ }
96
+ catch (cause) {
97
+ throw new ChatMcpEntryError(`app-kit-chat-mcp: could not load tools module "${toolsPath}" (resolved to ` +
98
+ `${absolutePath}): ${cause instanceof Error ? cause.message : String(cause)}`);
99
+ }
100
+ const candidate = mod.default;
101
+ if (typeof candidate !== "function") {
102
+ throw new ChatMcpEntryError(`app-kit-chat-mcp: tools module "${toolsPath}" must have a default export that is a ` +
103
+ `function returning a ChatMcpProtocol; got ${typeof candidate}.`);
104
+ }
105
+ return candidate;
106
+ }
107
+ /** Run the server: load the tools module, build the protocol (via the injected
108
+ * kit), and start stdio. Exported for direct unit testing of argument/validation
109
+ * failures without a process spawn. */
110
+ export async function main(argv) {
111
+ const { toolsPath } = parseArgs(argv);
112
+ const buildChatServer = await loadBuildChatServer(toolsPath);
113
+ let protocol;
114
+ try {
115
+ protocol = await buildChatServer(KIT);
116
+ }
117
+ catch (cause) {
118
+ throw new ChatMcpEntryError(`app-kit-chat-mcp: tools module "${toolsPath}" threw while building its chat server: ` +
119
+ `${cause instanceof Error ? cause.message : String(cause)}`);
120
+ }
121
+ if (protocol === null ||
122
+ typeof protocol !== "object" ||
123
+ typeof protocol.handleMessage !== "function") {
124
+ throw new ChatMcpEntryError(`app-kit-chat-mcp: tools module "${toolsPath}"'s default export must return a ` +
125
+ `ChatMcpProtocol ({handleMessage(message)}); got ${typeof protocol}.`);
126
+ }
127
+ createChatMcpStdioServer({ protocol }).start();
128
+ }
129
+ if (isRunningAsMain(import.meta.url)) {
130
+ main(process.argv.slice(2)).catch((err) => {
131
+ console.error(err instanceof ChatMcpEntryError ? err.message : err);
132
+ process.exitCode = 1;
133
+ });
134
+ }
135
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../../src/chat/mcp/entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function isRunningAsMain(moduleUrl: string): boolean;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Whether the module at `moduleUrl` (pass `import.meta.url`) is the one Node was
3
+ * invoked to run directly — the ESM successor to `require.main === module`, shared
4
+ * by every bin wrapper (trace-sync.ts/profile-sync.ts/flags-sync.ts/spa-server/cli.ts
5
+ * and src/chat/mcp/entry.ts) so there's one fix point instead of N copies of the
6
+ * same check. Node builtins ONLY (`node:fs`, `node:url`) — importing this file never
7
+ * drags in anything else, which is why src/chat/mcp/entry.ts imports it directly
8
+ * instead of importing `isRunningAsMain` from ./sync-engine.js: that file also pulls
9
+ * in `cross-spawn` (for its Prisma-shelling subcommands) at module scope, which would
10
+ * break entry.ts's own "Node builtins + this package's own chat modules only"
11
+ * dependency-free bar. sync-engine.ts re-exports this same function so its existing
12
+ * importers (trace-sync.ts et al.) are unaffected.
13
+ *
14
+ * A raw `import.meta.url === pathToFileURL(process.argv[1]).href` string comparison
15
+ * (the previous check) is NOT reliable: a package manager's bin shim can leave
16
+ * `argv[1]` pointing at a *symlink* while Node resolves the ESM module id through
17
+ * that symlink to the real target path for `import.meta.url` — so the two name the
18
+ * same file but compare unequal. This is not hypothetical: pnpm's
19
+ * `node_modules/<pkg>` is exactly such a symlink into its content-addressable
20
+ * store, and it reproduces on Windows for every real invocation path (`pnpm exec
21
+ * flags-sync init`, an npm-script `"flags-sync init"` run via `pnpm run`, etc.) —
22
+ * confirmed by instrumenting a real 0.3.0 install: `argv[1]` resolved to
23
+ * `...\node_modules\@flytedesk\app-kit\dist\cli\flags-sync.js` (the symlinked
24
+ * path) while `import.meta.url` resolved to
25
+ * `...\node_modules\.pnpm\@flytedesk+app-kit@0.3.0_.../node_modules\@flytedesk\app-kit\dist\cli\flags-sync.js`
26
+ * (the real store path). The mismatch meant `main()` was never called at all —
27
+ * every CLI entrypoint silently no-op'd: exit code 0, no output, nothing written.
28
+ *
29
+ * `realpathSync.native` (the real OS `realpath` syscall, not Node's pure-JS
30
+ * fallback — verified directly: the JS fallback leaves an on-disk casing mismatch
31
+ * unresolved, e.g. `RealFile.js` vs `realfile.js` compare unequal even though NTFS
32
+ * treats them as the same file, while `.native` correctly normalizes both to the
33
+ * same canonical path) resolves both sides to the same canonical filesystem path
34
+ * first — following symlinks AND normalizing casing — so the comparison is correct
35
+ * regardless of symlinks, path-separator style, or casing differences between how
36
+ * a shell/bin-shim sets `argv[1]` and how Node constructs `import.meta.url` for
37
+ * the same file.
38
+ */
39
+ import { realpathSync } from "node:fs";
40
+ import { fileURLToPath } from "node:url";
41
+ export function isRunningAsMain(moduleUrl) {
42
+ if (process.argv[1] === undefined)
43
+ return false;
44
+ try {
45
+ return (realpathSync.native(fileURLToPath(moduleUrl)) ===
46
+ realpathSync.native(process.argv[1]));
47
+ }
48
+ catch {
49
+ // Either path doesn't exist / isn't resolvable (e.g. a REPL or a bundler that
50
+ // gives import.meta.url a non-file URL) — definitely not "run directly" then.
51
+ return false;
52
+ }
53
+ }
54
+ //# sourceMappingURL=is-running-as-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-running-as-main.js","sourceRoot":"","sources":["../../src/cli/is-running-as-main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QACH,OAAO,CACL,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC7C,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACrC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,8EAA8E;QAC9E,8EAA8E;QAC9E,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,35 +1,4 @@
1
- /**
2
- * Whether the module at `moduleUrl` (pass `import.meta.url`) is the one Node was
3
- * invoked to run directly — the ESM successor to `require.main === module`, shared
4
- * by every bin wrapper (trace-sync.ts/profile-sync.ts/flags-sync.ts) so there's one
5
- * fix point instead of three copies of the same check.
6
- *
7
- * A raw `import.meta.url === pathToFileURL(process.argv[1]).href` string comparison
8
- * (the previous check) is NOT reliable: a package manager's bin shim can leave
9
- * `argv[1]` pointing at a *symlink* while Node resolves the ESM module id through
10
- * that symlink to the real target path for `import.meta.url` — so the two name the
11
- * same file but compare unequal. This is not hypothetical: pnpm's
12
- * `node_modules/<pkg>` is exactly such a symlink into its content-addressable
13
- * store, and it reproduces on Windows for every real invocation path (`pnpm exec
14
- * flags-sync init`, an npm-script `"flags-sync init"` run via `pnpm run`, etc.) —
15
- * confirmed by instrumenting a real 0.3.0 install: `argv[1]` resolved to
16
- * `...\node_modules\@flytedesk\app-kit\dist\cli\flags-sync.js` (the symlinked
17
- * path) while `import.meta.url` resolved to
18
- * `...\node_modules\.pnpm\@flytedesk+app-kit@0.3.0_.../node_modules\@flytedesk\app-kit\dist\cli\flags-sync.js`
19
- * (the real store path). The mismatch meant `main()` was never called at all —
20
- * every CLI entrypoint silently no-op'd: exit code 0, no output, nothing written.
21
- *
22
- * `realpathSync.native` (the real OS `realpath` syscall, not Node's pure-JS
23
- * fallback — verified directly: the JS fallback leaves an on-disk casing mismatch
24
- * unresolved, e.g. `RealFile.js` vs `realfile.js` compare unequal even though NTFS
25
- * treats them as the same file, while `.native` correctly normalizes both to the
26
- * same canonical path) resolves both sides to the same canonical filesystem path
27
- * first — following symlinks AND normalizing casing — so the comparison is correct
28
- * regardless of symlinks, path-separator style, or casing differences between how
29
- * a shell/bin-shim sets `argv[1]` and how Node constructs `import.meta.url` for
30
- * the same file.
31
- */
32
- export declare function isRunningAsMain(moduleUrl: string): boolean;
1
+ export { isRunningAsMain } from "./is-running-as-main.js";
33
2
  /**
34
3
  * Everything that differs between `trace-sync` and `profile-sync`. `name` picks out
35
4
  * prisma/fragments/<name>.prisma, prisma/fragments/<name>.meta.json, and every
@@ -53,53 +53,15 @@
53
53
  */
54
54
  import { createHash } from "node:crypto";
55
55
  import spawn from "cross-spawn";
56
- import { copyFileSync, cpSync, existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync, } from "node:fs";
56
+ import { copyFileSync, cpSync, existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
57
57
  import path from "node:path";
58
58
  import { fileURLToPath, pathToFileURL } from "node:url";
59
- /**
60
- * Whether the module at `moduleUrl` (pass `import.meta.url`) is the one Node was
61
- * invoked to run directly — the ESM successor to `require.main === module`, shared
62
- * by every bin wrapper (trace-sync.ts/profile-sync.ts/flags-sync.ts) so there's one
63
- * fix point instead of three copies of the same check.
64
- *
65
- * A raw `import.meta.url === pathToFileURL(process.argv[1]).href` string comparison
66
- * (the previous check) is NOT reliable: a package manager's bin shim can leave
67
- * `argv[1]` pointing at a *symlink* while Node resolves the ESM module id through
68
- * that symlink to the real target path for `import.meta.url` — so the two name the
69
- * same file but compare unequal. This is not hypothetical: pnpm's
70
- * `node_modules/<pkg>` is exactly such a symlink into its content-addressable
71
- * store, and it reproduces on Windows for every real invocation path (`pnpm exec
72
- * flags-sync init`, an npm-script `"flags-sync init"` run via `pnpm run`, etc.) —
73
- * confirmed by instrumenting a real 0.3.0 install: `argv[1]` resolved to
74
- * `...\node_modules\@flytedesk\app-kit\dist\cli\flags-sync.js` (the symlinked
75
- * path) while `import.meta.url` resolved to
76
- * `...\node_modules\.pnpm\@flytedesk+app-kit@0.3.0_.../node_modules\@flytedesk\app-kit\dist\cli\flags-sync.js`
77
- * (the real store path). The mismatch meant `main()` was never called at all —
78
- * every CLI entrypoint silently no-op'd: exit code 0, no output, nothing written.
79
- *
80
- * `realpathSync.native` (the real OS `realpath` syscall, not Node's pure-JS
81
- * fallback — verified directly: the JS fallback leaves an on-disk casing mismatch
82
- * unresolved, e.g. `RealFile.js` vs `realfile.js` compare unequal even though NTFS
83
- * treats them as the same file, while `.native` correctly normalizes both to the
84
- * same canonical path) resolves both sides to the same canonical filesystem path
85
- * first — following symlinks AND normalizing casing — so the comparison is correct
86
- * regardless of symlinks, path-separator style, or casing differences between how
87
- * a shell/bin-shim sets `argv[1]` and how Node constructs `import.meta.url` for
88
- * the same file.
89
- */
90
- export function isRunningAsMain(moduleUrl) {
91
- if (process.argv[1] === undefined)
92
- return false;
93
- try {
94
- return (realpathSync.native(fileURLToPath(moduleUrl)) ===
95
- realpathSync.native(process.argv[1]));
96
- }
97
- catch {
98
- // Either path doesn't exist / isn't resolvable (e.g. a REPL or a bundler that
99
- // gives import.meta.url a non-file URL) — definitely not "run directly" then.
100
- return false;
101
- }
102
- }
59
+ // Re-exported so trace-sync.ts/profile-sync.ts/flags-sync.ts keep importing it from
60
+ // here unchanged — the implementation (and its symlink/casing bug history) now lives
61
+ // in its own Node-builtins-only module because src/chat/mcp/entry.ts needs the exact
62
+ // same check WITHOUT this file's `cross-spawn` import coming along for the ride. See
63
+ // is-running-as-main.ts's own doc comment for the full contract.
64
+ export { isRunningAsMain } from "./is-running-as-main.js";
103
65
  export class SyncCliError extends Error {
104
66
  }
105
67
  function readJson(filePath) {
@@ -1 +1 @@
1
- {"version":3,"file":"sync-engine.js","sourceRoot":"","sources":["../../src/cli/sync-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-engine.js","sourceRoot":"","sources":["../../src/cli/sync-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { FlagRow } from "./types.js";
2
+ /**
3
+ * The one caller identity `evaluateFlag` needs — deliberately not `AuthedUser`
4
+ * (auth/shared-types.ts) itself, so this module stays free of any dependency on
5
+ * `../auth`: a consumer with its own identity system (not @flytedesk/app-kit/auth)
6
+ * can call this evaluator too, as long as it can produce this shape. `plugin.ts`'s
7
+ * `GET {routePrefix}/me` route builds it from `request.authUser` (`id`, and
8
+ * `roles.map((r) => r.id)` — flytedesk-id role ids, matching `FlagRow.roles`).
9
+ */
10
+ export interface FlagEvaluationUser {
11
+ id: string;
12
+ roleIds: string[];
13
+ }
14
+ /**
15
+ * The single per-user flag evaluator @flytedesk/app-kit/flags owns (MP-252). Pure
16
+ * and synchronous — no I/O, no Fastify, no Prisma — so any consumer (the
17
+ * `GET {routePrefix}/me` route below, a batch job, a test) can call it directly
18
+ * against a `FlagRow` it already has in hand.
19
+ *
20
+ * Precedence, evaluated in this exact order (ported from media-planner's own
21
+ * `evaluateFlag`, which this replaces as the one evaluator — MP-222 already
22
+ * deleted that copy, and the design system's copy is next, PLN-2):
23
+ *
24
+ * 1. Kill switch: `!flag.enabled` -> always `false`, before anything else.
25
+ * 2. Per-user override: `flag.users[user.id]`, when set (`!= null`) and a user
26
+ * is known, wins over every other rule — the whole point of an override.
27
+ * 3. Role targeting: when `flag.roles` is non-empty, a `user` holding one of
28
+ * those roles gets `true`. Anyone else (a non-matching user, or no user at
29
+ * all) falls through to the flag's rollout being fully on (`>= 100`) rather
30
+ * than being bucketed — role targeting and percentage rollout are mutually
31
+ * exclusive by design once roles are set: a partial rollout with roles
32
+ * configured gates on role membership alone, not on whether an outside
33
+ * caller *also* would have landed in the rollout bucket.
34
+ * 4. No role targeting configured: fully on (`>= 100`) -> `true`; fully off
35
+ * (`<= 0`) -> `false`; otherwise a stable per-user bucket decides, and an
36
+ * unknown caller (`user === null`) never qualifies for a partial rollout.
37
+ *
38
+ * `user` is `null` for an unauthenticated caller — `GET {routePrefix}/me` never
39
+ * calls this with `null` (it requires authentication first), but the evaluator
40
+ * stays total over both cases so any future authenticated-optional consumer gets
41
+ * the same well-defined answer without a second code path.
42
+ */
43
+ export declare function evaluateFlag(flag: Pick<FlagRow, "key" | "enabled" | "rollout" | "roles" | "users">, user: FlagEvaluationUser | null): boolean;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Stable 0–99 bucket from a string, so a percentage-rollout answer never flickers
3
+ * between requests/reloads for the same user. FNV-1a, 32-bit — ported verbatim
4
+ * (same hash, same seed shape `${flagKey}:${userId}`) from media-planner's
5
+ * `services/session.ts` `bucket`, which itself matched the design system's demo
6
+ * `session.js` approximation. Keeping the identical hash here (the one evaluator
7
+ * every consumer now shares) means a user's rollout bucket for a given flag key
8
+ * does not change just because evaluation moved server-side into app-kit.
9
+ */
10
+ function bucket(seed) {
11
+ let h = 2166136261;
12
+ for (let i = 0; i < seed.length; i++) {
13
+ h ^= seed.charCodeAt(i);
14
+ h = Math.imul(h, 16777619);
15
+ }
16
+ return Math.abs(h) % 100;
17
+ }
18
+ /**
19
+ * The single per-user flag evaluator @flytedesk/app-kit/flags owns (MP-252). Pure
20
+ * and synchronous — no I/O, no Fastify, no Prisma — so any consumer (the
21
+ * `GET {routePrefix}/me` route below, a batch job, a test) can call it directly
22
+ * against a `FlagRow` it already has in hand.
23
+ *
24
+ * Precedence, evaluated in this exact order (ported from media-planner's own
25
+ * `evaluateFlag`, which this replaces as the one evaluator — MP-222 already
26
+ * deleted that copy, and the design system's copy is next, PLN-2):
27
+ *
28
+ * 1. Kill switch: `!flag.enabled` -> always `false`, before anything else.
29
+ * 2. Per-user override: `flag.users[user.id]`, when set (`!= null`) and a user
30
+ * is known, wins over every other rule — the whole point of an override.
31
+ * 3. Role targeting: when `flag.roles` is non-empty, a `user` holding one of
32
+ * those roles gets `true`. Anyone else (a non-matching user, or no user at
33
+ * all) falls through to the flag's rollout being fully on (`>= 100`) rather
34
+ * than being bucketed — role targeting and percentage rollout are mutually
35
+ * exclusive by design once roles are set: a partial rollout with roles
36
+ * configured gates on role membership alone, not on whether an outside
37
+ * caller *also* would have landed in the rollout bucket.
38
+ * 4. No role targeting configured: fully on (`>= 100`) -> `true`; fully off
39
+ * (`<= 0`) -> `false`; otherwise a stable per-user bucket decides, and an
40
+ * unknown caller (`user === null`) never qualifies for a partial rollout.
41
+ *
42
+ * `user` is `null` for an unauthenticated caller — `GET {routePrefix}/me` never
43
+ * calls this with `null` (it requires authentication first), but the evaluator
44
+ * stays total over both cases so any future authenticated-optional consumer gets
45
+ * the same well-defined answer without a second code path.
46
+ */
47
+ export function evaluateFlag(flag, user) {
48
+ if (!flag.enabled)
49
+ return false;
50
+ if (user && flag.users && flag.users[user.id] != null) {
51
+ return !!flag.users[user.id];
52
+ }
53
+ if (flag.roles && flag.roles.length) {
54
+ if (user && user.roleIds.some((r) => flag.roles.includes(r)))
55
+ return true;
56
+ return flag.rollout >= 100;
57
+ }
58
+ if (flag.rollout >= 100)
59
+ return true;
60
+ if (flag.rollout <= 0)
61
+ return false;
62
+ return user ? bucket(`${flag.key}:${user.id}`) < flag.rollout : false;
63
+ }
64
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/flags/evaluate.ts"],"names":[],"mappings":"AAeA;;;;;;;;GAQG;AACH,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAsE,EACtE,IAA+B;IAE/B,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QACtD,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1E,OAAO,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC;IAC7B,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACxE,CAAC"}
@@ -35,15 +35,31 @@
35
35
  * onChange: async (key, changes, actor) => {
36
36
  * await recordAudit({ actorId: actor.id, who: actor.name, action: "flag.update", target: key, ... });
37
37
  * },
38
+ * // MP-252, REQUIRED. This plugin applies requirePermission(...) itself to
39
+ * // ONLY the three admin routes below; GET /flags/me stays open to any
40
+ * // authenticated caller no matter what this names. Register this plugin
41
+ * // once, ungated, at the top level — do NOT wrap this whole
42
+ * // `.register(appKitFlags, ...)` call in your own gated scope (that was the
43
+ * // pre-MP-252 pattern): it would gate GET /flags/me too, since Fastify's
44
+ * // addHook applies to every route a nested plugin registers inside that
45
+ * // scope (see AppKitFlagsOptions.managePermission's doc comment).
46
+ * managePermission: "flags.manage",
38
47
  * });
39
48
  *
40
- * // GET /flags -> { rows, pager, sort, filter }
41
- * // GET /flags/:key -> single flag, or 404
42
- * // PATCH /flags/:key { enabled?, rollout?, roles?, users? } -> updated flag
49
+ * // GET /flags -> { rows, pager, sort, filter } (requires managePermission)
50
+ * // GET /flags/:key -> single flag, or 404 (requires managePermission)
51
+ * // PATCH /flags/:key { enabled?, rollout?, roles?, users? } -> updated flag (requires managePermission)
52
+ * // GET /flags/me -> { [key]: boolean }, evaluated for the caller (MP-252 — always any authenticated user)
43
53
  *
44
- * No permission check is baked in — register your own `preHandler` on top of these
45
- * routes for whatever RBAC category gates flag administration in your app (same
46
- * boundary @flytedesk/app-kit/profile draws).
54
+ * The admin routes (GET/PATCH above) are gated by
55
+ * `requirePermission(...managePermission)` (MP-252, required — no ungated-by-
56
+ * default mode, and no way to opt this plugin's OWN admin routes out of it).
57
+ * `GET /flags/me` is deliberately the one route `managePermission` never
58
+ * touches: every authenticated caller gets their own evaluated flags, by design,
59
+ * with no rule data in the response — see plugin.ts's doc comment on that route
60
+ * and `evaluateFlag` below for the precedence rule it evaluates.
47
61
  */
48
62
  export { appKitFlags } from "./plugin.js";
63
+ export { evaluateFlag } from "./evaluate.js";
64
+ export type { FlagEvaluationUser } from "./evaluate.js";
49
65
  export type { AppKitFlagsOptions, FlagFields, FlagListResponseBody, FlagMeta, FlagPager, FlagPatch, FlagResponseBody, FlagRow, FlagStore, } from "./types.js";
@@ -35,15 +35,30 @@
35
35
  * onChange: async (key, changes, actor) => {
36
36
  * await recordAudit({ actorId: actor.id, who: actor.name, action: "flag.update", target: key, ... });
37
37
  * },
38
+ * // MP-252, REQUIRED. This plugin applies requirePermission(...) itself to
39
+ * // ONLY the three admin routes below; GET /flags/me stays open to any
40
+ * // authenticated caller no matter what this names. Register this plugin
41
+ * // once, ungated, at the top level — do NOT wrap this whole
42
+ * // `.register(appKitFlags, ...)` call in your own gated scope (that was the
43
+ * // pre-MP-252 pattern): it would gate GET /flags/me too, since Fastify's
44
+ * // addHook applies to every route a nested plugin registers inside that
45
+ * // scope (see AppKitFlagsOptions.managePermission's doc comment).
46
+ * managePermission: "flags.manage",
38
47
  * });
39
48
  *
40
- * // GET /flags -> { rows, pager, sort, filter }
41
- * // GET /flags/:key -> single flag, or 404
42
- * // PATCH /flags/:key { enabled?, rollout?, roles?, users? } -> updated flag
49
+ * // GET /flags -> { rows, pager, sort, filter } (requires managePermission)
50
+ * // GET /flags/:key -> single flag, or 404 (requires managePermission)
51
+ * // PATCH /flags/:key { enabled?, rollout?, roles?, users? } -> updated flag (requires managePermission)
52
+ * // GET /flags/me -> { [key]: boolean }, evaluated for the caller (MP-252 — always any authenticated user)
43
53
  *
44
- * No permission check is baked in — register your own `preHandler` on top of these
45
- * routes for whatever RBAC category gates flag administration in your app (same
46
- * boundary @flytedesk/app-kit/profile draws).
54
+ * The admin routes (GET/PATCH above) are gated by
55
+ * `requirePermission(...managePermission)` (MP-252, required — no ungated-by-
56
+ * default mode, and no way to opt this plugin's OWN admin routes out of it).
57
+ * `GET /flags/me` is deliberately the one route `managePermission` never
58
+ * touches: every authenticated caller gets their own evaluated flags, by design,
59
+ * with no rule data in the response — see plugin.ts's doc comment on that route
60
+ * and `evaluateFlag` below for the precedence rule it evaluates.
47
61
  */
48
62
  export { appKitFlags } from "./plugin.js";
63
+ export { evaluateFlag } from "./evaluate.js";
49
64
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/flags/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/flags/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}