This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
// The ports the notes module's use cases are written against, and the one it adds: the feature flags.
|
||||
//
|
||||
// The audit and usage sinks and the scope of an event delivery are the kernel's own tokens
|
||||
// (`FILES_AUDIT`, `FILES_USAGE`, `FILES_SCOPE`): the worker binds them once for every module, so a
|
||||
// module that audits and meters needs no binding of its own and no line in the worker.
|
||||
|
||||
import { type Container, type TenantScope, token } from "@conusai-kit/core"
|
||||
import type { DataSource } from "@conusai-kit/data"
|
||||
import type { FilesDeps } from "@conusai-kit/files"
|
||||
import { ATTACHMENTS_FLAG, NOTES_FLAG_DEFAULTS } from "../contract/index.js"
|
||||
|
||||
/** A project scope: the only level a note can live at. */
|
||||
export type NoteScope = TenantScope & { workspaceId: string; projectId: string }
|
||||
|
||||
export interface NotesDeps {
|
||||
readonly data: DataSource
|
||||
/** The files module's ports: an attachment is one of its files. */
|
||||
readonly files: FilesDeps
|
||||
readonly flags: NotesFlags
|
||||
}
|
||||
|
||||
/** What a flag service answers for the project a call runs in. */
|
||||
export interface NotesFlags {
|
||||
enabled(flag: keyof typeof NOTES_FLAG_DEFAULTS, scope: NoteScope): boolean | Promise<boolean>
|
||||
}
|
||||
|
||||
/**
|
||||
* Bound by an app that evaluates flags per organization, project or user (the platform's flag
|
||||
* service, through `@conusai-sdk/node-sdk/flags`). With nothing bound, a flag is its manifest default.
|
||||
*/
|
||||
export const NOTES_FLAGS = token<NotesFlags>("notes.flags")
|
||||
|
||||
export const defaultFlags: NotesFlags = { enabled: (flag) => NOTES_FLAG_DEFAULTS[flag] }
|
||||
|
||||
export const flagsOf = (container: Container): NotesFlags =>
|
||||
container.has(NOTES_FLAGS) ? container.resolve(NOTES_FLAGS) : defaultFlags
|
||||
|
||||
export const attachmentsEnabled = async (deps: NotesDeps, scope: NoteScope): Promise<boolean> =>
|
||||
deps.flags.enabled(ATTACHMENTS_FLAG, scope)
|
||||
Reference in New Issue
Block a user