@pegma/knowledge-base-application 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +140 -2
- package/dist/articles.d.ts +10 -0
- package/dist/articles.d.ts.map +1 -0
- package/dist/articles.js +454 -0
- package/dist/articles.js.map +1 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +34 -0
- package/dist/errors.js.map +1 -0
- package/dist/governance.d.ts +14 -0
- package/dist/governance.d.ts.map +1 -0
- package/dist/governance.js +364 -0
- package/dist/governance.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/lexical.d.ts +13 -0
- package/dist/lexical.d.ts.map +1 -0
- package/dist/lexical.js +105 -0
- package/dist/lexical.js.map +1 -0
- package/dist/publication.d.ts +42 -0
- package/dist/publication.d.ts.map +1 -0
- package/dist/publication.js +258 -0
- package/dist/publication.js.map +1 -0
- package/dist/reads.d.ts +5 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +228 -0
- package/dist/reads.js.map +1 -0
- package/dist/records.d.ts +40 -0
- package/dist/records.d.ts.map +1 -0
- package/dist/records.js +122 -0
- package/dist/records.js.map +1 -0
- package/dist/repository.d.ts +74 -0
- package/dist/repository.d.ts.map +1 -0
- package/dist/repository.js +738 -0
- package/dist/repository.js.map +1 -0
- package/dist/retrieval-budget.d.ts +37 -0
- package/dist/retrieval-budget.d.ts.map +1 -0
- package/dist/retrieval-budget.js +111 -0
- package/dist/retrieval-budget.js.map +1 -0
- package/dist/retrieval-limits.d.ts +4 -0
- package/dist/retrieval-limits.d.ts.map +1 -0
- package/dist/retrieval-limits.js +21 -0
- package/dist/retrieval-limits.js.map +1 -0
- package/dist/retrieval-maintenance.d.ts +19 -0
- package/dist/retrieval-maintenance.d.ts.map +1 -0
- package/dist/retrieval-maintenance.js +359 -0
- package/dist/retrieval-maintenance.js.map +1 -0
- package/dist/retrieval-records.d.ts +55 -0
- package/dist/retrieval-records.d.ts.map +1 -0
- package/dist/retrieval-records.js +140 -0
- package/dist/retrieval-records.js.map +1 -0
- package/dist/retrieval-repository.d.ts +32 -0
- package/dist/retrieval-repository.d.ts.map +1 -0
- package/dist/retrieval-repository.js +750 -0
- package/dist/retrieval-repository.js.map +1 -0
- package/dist/retrieval-types.d.ts +185 -0
- package/dist/retrieval-types.d.ts.map +1 -0
- package/dist/retrieval-types.js +24 -0
- package/dist/retrieval-types.js.map +1 -0
- package/dist/retrieval.d.ts +12 -0
- package/dist/retrieval.d.ts.map +1 -0
- package/dist/retrieval.js +541 -0
- package/dist/retrieval.js.map +1 -0
- package/dist/storage-helpers.d.ts +23 -0
- package/dist/storage-helpers.d.ts.map +1 -0
- package/dist/storage-helpers.js +138 -0
- package/dist/storage-helpers.js.map +1 -0
- package/dist/types.d.ts +280 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -4
package/dist/lexical.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { RepositoryCapacityError } from "./storage-helpers.js";
|
|
2
|
+
const maximumQueryCharacters = 256;
|
|
3
|
+
const maximumQueryTerms = 8;
|
|
4
|
+
const maximumIndexTerms = 256;
|
|
5
|
+
const maximumTermCharacters = 256;
|
|
6
|
+
const questionWords = new Set([
|
|
7
|
+
"a",
|
|
8
|
+
"an",
|
|
9
|
+
"and",
|
|
10
|
+
"are",
|
|
11
|
+
"as",
|
|
12
|
+
"at",
|
|
13
|
+
"be",
|
|
14
|
+
"can",
|
|
15
|
+
"do",
|
|
16
|
+
"does",
|
|
17
|
+
"for",
|
|
18
|
+
"from",
|
|
19
|
+
"how",
|
|
20
|
+
"i",
|
|
21
|
+
"in",
|
|
22
|
+
"is",
|
|
23
|
+
"it",
|
|
24
|
+
"me",
|
|
25
|
+
"my",
|
|
26
|
+
"of",
|
|
27
|
+
"on",
|
|
28
|
+
"or",
|
|
29
|
+
"please",
|
|
30
|
+
"the",
|
|
31
|
+
"to",
|
|
32
|
+
"with",
|
|
33
|
+
"you",
|
|
34
|
+
"your",
|
|
35
|
+
]);
|
|
36
|
+
/** Deterministic lexical terms only; aliases must be explicit approved tags. */
|
|
37
|
+
function terms(value) {
|
|
38
|
+
if (typeof value !== "string")
|
|
39
|
+
throw new TypeError("Search metadata must be text");
|
|
40
|
+
const normalized = value
|
|
41
|
+
.normalize("NFKD")
|
|
42
|
+
.replace(/\p{M}+/gu, "")
|
|
43
|
+
.toLowerCase();
|
|
44
|
+
const result = normalized.match(/[\p{L}\p{N}]+/gu) ?? [];
|
|
45
|
+
if (result.some((term) => term.length > maximumTermCharacters)) {
|
|
46
|
+
throw new TypeError("Search term exceeds the supported length");
|
|
47
|
+
}
|
|
48
|
+
return result.filter((term) => !questionWords.has(term));
|
|
49
|
+
}
|
|
50
|
+
/** Reject oversized input; never silently truncate a customer's query. */
|
|
51
|
+
export function normalizeQuery(query) {
|
|
52
|
+
if (typeof query !== "string" ||
|
|
53
|
+
query.length === 0 ||
|
|
54
|
+
query.length > maximumQueryCharacters ||
|
|
55
|
+
/[\u0000-\u001f\u007f]/u.test(query))
|
|
56
|
+
throw new TypeError("Query must contain at most 256 characters of text");
|
|
57
|
+
const normalized = [...new Set(terms(query))];
|
|
58
|
+
if (normalized.length > maximumQueryTerms) {
|
|
59
|
+
throw new TypeError("Query contains more than eight distinct search terms");
|
|
60
|
+
}
|
|
61
|
+
return Object.freeze(normalized);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Projection input is approved title/summary/tags, never body text or evidence.
|
|
65
|
+
* Overlarge metadata is a visible indexing failure, not a partial projection.
|
|
66
|
+
*/
|
|
67
|
+
export function indexArticleTerms(article, limit = maximumIndexTerms) {
|
|
68
|
+
if (!Number.isSafeInteger(limit) || limit < 1 || limit > maximumIndexTerms) {
|
|
69
|
+
throw new TypeError("Index term limit must be between one and 256");
|
|
70
|
+
}
|
|
71
|
+
if (!Array.isArray(article.tags) || article.tags.length > 16) {
|
|
72
|
+
throw new TypeError("Approved tags exceed their schema bound");
|
|
73
|
+
}
|
|
74
|
+
const result = [
|
|
75
|
+
...new Set([
|
|
76
|
+
...terms(article.title),
|
|
77
|
+
...terms(article.summary),
|
|
78
|
+
...article.tags.flatMap(terms),
|
|
79
|
+
]),
|
|
80
|
+
].sort();
|
|
81
|
+
if (result.length > limit) {
|
|
82
|
+
throw new RepositoryCapacityError("index_terms");
|
|
83
|
+
}
|
|
84
|
+
return Object.freeze(result);
|
|
85
|
+
}
|
|
86
|
+
/** Score only locally confirmed approved metadata, never posting-row text. */
|
|
87
|
+
export function scoreConfirmedArticle(article, queryTerms) {
|
|
88
|
+
if (queryTerms.length > maximumQueryTerms) {
|
|
89
|
+
throw new TypeError("Scoring query exceeds its term bound");
|
|
90
|
+
}
|
|
91
|
+
const title = new Set(terms(article.title));
|
|
92
|
+
const summary = new Set(terms(article.summary));
|
|
93
|
+
const tags = new Set(article.tags.flatMap(terms));
|
|
94
|
+
let score = 0;
|
|
95
|
+
for (const term of queryTerms) {
|
|
96
|
+
if (title.has(term))
|
|
97
|
+
score += 12;
|
|
98
|
+
if (tags.has(term))
|
|
99
|
+
score += 8;
|
|
100
|
+
if (summary.has(term))
|
|
101
|
+
score += 3;
|
|
102
|
+
}
|
|
103
|
+
return score;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=lexical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexical.js","sourceRoot":"","sources":["../src/lexical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type AccessContext } from "@pegma/authorization-core";
|
|
2
|
+
import { type Applicability, type ValidationPolicyReference } from "@pegma/knowledge-base-contracts";
|
|
3
|
+
import type { KnowledgeRepository } from "./repository.js";
|
|
4
|
+
import type { KnowledgeBaseServiceOptions, PublishedArticleDto } from "./types.js";
|
|
5
|
+
export type PublicationPurpose = "portal" | "bot" | "index";
|
|
6
|
+
export interface PublicationCheckRequest {
|
|
7
|
+
readonly articleId: string;
|
|
8
|
+
readonly purpose: PublicationPurpose;
|
|
9
|
+
readonly access: AccessContext;
|
|
10
|
+
/** Exact applicability, including absence of build/locale; no inferred fallback. */
|
|
11
|
+
readonly applicability?: Applicability;
|
|
12
|
+
}
|
|
13
|
+
/** Internal authority only. Never spread source fences into customer/model DTOs. */
|
|
14
|
+
export interface PublicationAuthorityBinding {
|
|
15
|
+
readonly articleId: string;
|
|
16
|
+
readonly revision: number;
|
|
17
|
+
readonly contentHash: string;
|
|
18
|
+
readonly articleGeneration: number;
|
|
19
|
+
readonly collectionId: string;
|
|
20
|
+
readonly governanceGeneration: number;
|
|
21
|
+
readonly validationPolicy: ValidationPolicyReference;
|
|
22
|
+
readonly validationGeneration: number;
|
|
23
|
+
readonly collectionPolicyVersion: number;
|
|
24
|
+
readonly collectionPolicyHash: string;
|
|
25
|
+
readonly validationPolicyHash: string;
|
|
26
|
+
readonly sourceGeneration: number;
|
|
27
|
+
readonly sourceSnapshotHash: string;
|
|
28
|
+
}
|
|
29
|
+
export interface CheckedPublication {
|
|
30
|
+
readonly article: PublishedArticleDto;
|
|
31
|
+
readonly binding: PublicationAuthorityBinding;
|
|
32
|
+
/** Whether this effective caller can browse the independently governed portal. */
|
|
33
|
+
readonly portalBrowseable: boolean;
|
|
34
|
+
/** Maintenance metadata under the same governance fence, never an access grant. */
|
|
35
|
+
readonly enabledUses: readonly ("portal" | "bot")[];
|
|
36
|
+
}
|
|
37
|
+
/** One authority path for portal reads, customer bot retrieval, and private indexing. */
|
|
38
|
+
export declare function createPublicationChecker(repository: KnowledgeRepository, options: KnowledgeBaseServiceOptions): {
|
|
39
|
+
readonly check: (request: PublicationCheckRequest) => Promise<CheckedPublication>;
|
|
40
|
+
readonly recheck: (checked: CheckedPublication) => Promise<void>;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=publication.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publication.d.ts","sourceRoot":"","sources":["../src/publication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAEL,KAAK,aAAa,EAKlB,KAAK,yBAAyB,EAE/B,MAAM,iCAAiC,CAAC;AAazC,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AASzB,OAAO,KAAK,EACV,2BAA2B,EAC3B,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAE5D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,oFAAoF;IACpF,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;CACxC;AAED,oFAAoF;AACpF,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;IACrD,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAC9C,kFAAkF;IAClF,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,mFAAmF;IACnF,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;CACrD;AAiGD,yFAAyF;AACzF,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE,2BAA2B,GACnC;IACD,QAAQ,CAAC,KAAK,EAAE,CACd,OAAO,EAAE,uBAAuB,KAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE,CA+NA"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { hasPermission } from "@pegma/authorization-core";
|
|
2
|
+
import { knowledgePermissions, } from "@pegma/knowledge-base-contracts";
|
|
3
|
+
import { isPublicationBoundToCurrentPolicies, KnowledgeBaseError, knowledgeLimits, publishArticle, } from "@pegma/knowledge-base-core";
|
|
4
|
+
import { KnowledgeBaseNotFoundError, KnowledgeBasePrerequisiteError, } from "./errors.js";
|
|
5
|
+
import { loadGovernanceContext } from "./governance.js";
|
|
6
|
+
import { canonicalJson, RepositoryCapacityError, RepositoryConflictError, RepositoryIntegrityError, requireIdentifier, snapshotData, } from "./storage-helpers.js";
|
|
7
|
+
function unavailable() {
|
|
8
|
+
return new KnowledgeBaseNotFoundError("article");
|
|
9
|
+
}
|
|
10
|
+
function clockTime(options) {
|
|
11
|
+
const at = options.clock.now();
|
|
12
|
+
if (typeof at !== "string" ||
|
|
13
|
+
!Number.isFinite(Date.parse(at)) ||
|
|
14
|
+
new Date(at).toISOString() !== at) {
|
|
15
|
+
throw new TypeError("Clock must return a canonical ISO timestamp");
|
|
16
|
+
}
|
|
17
|
+
return at;
|
|
18
|
+
}
|
|
19
|
+
function allows(use, access) {
|
|
20
|
+
return (use.enabled &&
|
|
21
|
+
(use.audience.kind === "anonymous" ||
|
|
22
|
+
hasPermission(access, use.audience.permission)));
|
|
23
|
+
}
|
|
24
|
+
function authorize(access, purpose) {
|
|
25
|
+
if (purpose === "index") {
|
|
26
|
+
if (!hasPermission(access, knowledgePermissions.indexManage))
|
|
27
|
+
throw unavailable();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (!hasPermission(access, knowledgePermissions.articleRead) ||
|
|
31
|
+
(purpose === "bot" && !hasPermission(access, knowledgePermissions.botRead)))
|
|
32
|
+
throw unavailable();
|
|
33
|
+
}
|
|
34
|
+
function isUnavailable(error) {
|
|
35
|
+
return (error instanceof KnowledgeBaseError ||
|
|
36
|
+
error instanceof KnowledgeBaseNotFoundError ||
|
|
37
|
+
error instanceof KnowledgeBasePrerequisiteError ||
|
|
38
|
+
error instanceof RepositoryCapacityError ||
|
|
39
|
+
error instanceof RepositoryConflictError ||
|
|
40
|
+
error instanceof RepositoryIntegrityError);
|
|
41
|
+
}
|
|
42
|
+
function immutable(value) {
|
|
43
|
+
if (value !== null && typeof value === "object") {
|
|
44
|
+
for (const child of Object.values(value))
|
|
45
|
+
immutable(child);
|
|
46
|
+
Object.freeze(value);
|
|
47
|
+
}
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
async function publishedEvidence(repository, current) {
|
|
51
|
+
const published = current.published;
|
|
52
|
+
if (published === undefined)
|
|
53
|
+
throw unavailable();
|
|
54
|
+
const references = published.approval.binding.evidence;
|
|
55
|
+
if (!Array.isArray(references) ||
|
|
56
|
+
references.length > knowledgeLimits.evidence)
|
|
57
|
+
throw new RepositoryIntegrityError();
|
|
58
|
+
return Promise.all(references.map(async (reference) => {
|
|
59
|
+
const [evidence, revoked] = await Promise.all([
|
|
60
|
+
repository.getEvidenceVersion(current.articleId, published.revision.number, reference.id, reference.version),
|
|
61
|
+
repository.isEvidenceRevoked(current.articleId, reference.hash),
|
|
62
|
+
]);
|
|
63
|
+
if (evidence === null || revoked || evidence.hash !== reference.hash)
|
|
64
|
+
throw unavailable();
|
|
65
|
+
return evidence;
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
/** One authority path for portal reads, customer bot retrieval, and private indexing. */
|
|
69
|
+
export function createPublicationChecker(repository, options) {
|
|
70
|
+
const confirmations = new WeakMap();
|
|
71
|
+
async function confirm(state) {
|
|
72
|
+
authorize(state.access, state.purpose);
|
|
73
|
+
if (state.use !== undefined && !allows(state.use, state.access))
|
|
74
|
+
throw unavailable();
|
|
75
|
+
if (!Array.isArray(state.source.references) ||
|
|
76
|
+
state.source.references.length > 32)
|
|
77
|
+
throw new RepositoryIntegrityError();
|
|
78
|
+
if (state.source.references.length > 0) {
|
|
79
|
+
const verifier = options.privateSources;
|
|
80
|
+
if (typeof verifier?.canPublish !== "function" ||
|
|
81
|
+
typeof verifier.isCurrent !== "function")
|
|
82
|
+
throw unavailable();
|
|
83
|
+
let eligible;
|
|
84
|
+
try {
|
|
85
|
+
eligible = await Promise.all([
|
|
86
|
+
verifier.canPublish({
|
|
87
|
+
article: snapshotData(state.revision),
|
|
88
|
+
snapshot: snapshotData(state.source),
|
|
89
|
+
}),
|
|
90
|
+
verifier.isCurrent({
|
|
91
|
+
article: snapshotData(state.revision),
|
|
92
|
+
snapshot: snapshotData(state.source),
|
|
93
|
+
}),
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
throw unavailable();
|
|
98
|
+
}
|
|
99
|
+
if (eligible.some((value) => value !== true))
|
|
100
|
+
throw unavailable();
|
|
101
|
+
}
|
|
102
|
+
const [article, collection, validation] = await Promise.all([
|
|
103
|
+
repository.readResourceGeneration("article", state.binding.articleId),
|
|
104
|
+
repository.readResourceGeneration("collection", state.binding.collectionId),
|
|
105
|
+
repository.readResourceGeneration("validation", state.binding.validationPolicy.id),
|
|
106
|
+
]);
|
|
107
|
+
if (article !== state.binding.articleGeneration ||
|
|
108
|
+
collection !== state.binding.governanceGeneration ||
|
|
109
|
+
validation !== state.binding.validationGeneration)
|
|
110
|
+
throw unavailable();
|
|
111
|
+
authorize(state.access, state.purpose);
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
async check(request) {
|
|
115
|
+
const access = immutable(snapshotData(request.access));
|
|
116
|
+
const articleId = request.articleId;
|
|
117
|
+
requireIdentifier(articleId, "articleId");
|
|
118
|
+
if (!["portal", "bot", "index"].includes(request.purpose))
|
|
119
|
+
throw new TypeError("Unknown publication purpose");
|
|
120
|
+
const purpose = request.purpose;
|
|
121
|
+
const applicability = request.applicability === undefined
|
|
122
|
+
? undefined
|
|
123
|
+
: snapshotData(request.applicability);
|
|
124
|
+
authorize(access, purpose);
|
|
125
|
+
try {
|
|
126
|
+
const loaded = await repository.readArticlePublicationVersioned(articleId);
|
|
127
|
+
const current = loaded?.value;
|
|
128
|
+
const publication = current?.published;
|
|
129
|
+
const review = current?.publicationReview;
|
|
130
|
+
const source = current?.publishedProvenance;
|
|
131
|
+
if (current === undefined ||
|
|
132
|
+
current.state === "retired" ||
|
|
133
|
+
current.publicationHeld ||
|
|
134
|
+
publication === undefined ||
|
|
135
|
+
review === undefined ||
|
|
136
|
+
source === undefined)
|
|
137
|
+
throw unavailable();
|
|
138
|
+
const revision = publication.revision;
|
|
139
|
+
if (applicability !== undefined &&
|
|
140
|
+
canonicalJson(applicability) !== canonicalJson(revision.applicability))
|
|
141
|
+
throw unavailable();
|
|
142
|
+
const at = clockTime(options);
|
|
143
|
+
const governance = await loadGovernanceContext(repository, revision.collectionId, at);
|
|
144
|
+
const policy = governance.context.collection.policy;
|
|
145
|
+
const enabledUses = [];
|
|
146
|
+
if (policy.portal.enabled)
|
|
147
|
+
enabledUses.push("portal");
|
|
148
|
+
if (policy.bot.enabled)
|
|
149
|
+
enabledUses.push("bot");
|
|
150
|
+
const use = purpose === "index" ? undefined : policy[purpose];
|
|
151
|
+
if (use === undefined ? enabledUses.length === 0 : !allows(use, access))
|
|
152
|
+
throw unavailable();
|
|
153
|
+
if (review.governanceGeneration !== governance.governanceGeneration ||
|
|
154
|
+
canonicalJson(review.binding) !==
|
|
155
|
+
canonicalJson(publication.approval.binding) ||
|
|
156
|
+
source.hash !== review.sourceSnapshotHash ||
|
|
157
|
+
source.generation !== review.sourceGeneration)
|
|
158
|
+
throw unavailable();
|
|
159
|
+
const evidence = await publishedEvidence(repository, current);
|
|
160
|
+
const proof = {
|
|
161
|
+
id: articleId,
|
|
162
|
+
state: "in-review",
|
|
163
|
+
current: revision,
|
|
164
|
+
evidence,
|
|
165
|
+
review: publication.approval.binding,
|
|
166
|
+
};
|
|
167
|
+
const publishedArticle = {
|
|
168
|
+
...proof,
|
|
169
|
+
state: "published",
|
|
170
|
+
published: publication,
|
|
171
|
+
};
|
|
172
|
+
if (!(await isPublicationBoundToCurrentPolicies(publishedArticle, governance.context.collection, governance.context.validationPolicy)))
|
|
173
|
+
throw unavailable();
|
|
174
|
+
const approvedAt = publication.approval.reviewedAt;
|
|
175
|
+
if (typeof approvedAt !== "string" ||
|
|
176
|
+
!Number.isFinite(Date.parse(approvedAt)) ||
|
|
177
|
+
new Date(approvedAt).toISOString() !== approvedAt ||
|
|
178
|
+
Date.parse(approvedAt) > Date.parse(at) ||
|
|
179
|
+
Date.parse(approvedAt) < Date.parse(revision.createdAt))
|
|
180
|
+
throw unavailable();
|
|
181
|
+
await publishArticle(proof, {
|
|
182
|
+
expectedRevision: revision.number,
|
|
183
|
+
binding: publication.approval.binding,
|
|
184
|
+
reviewerId: publication.approval.reviewerId,
|
|
185
|
+
context: { ...governance.context, at: approvedAt },
|
|
186
|
+
});
|
|
187
|
+
const binding = {
|
|
188
|
+
articleId,
|
|
189
|
+
revision: revision.number,
|
|
190
|
+
contentHash: revision.contentHash,
|
|
191
|
+
articleGeneration: current.generation,
|
|
192
|
+
collectionId: revision.collectionId,
|
|
193
|
+
governanceGeneration: governance.governanceGeneration,
|
|
194
|
+
validationPolicy: revision.validationPolicy,
|
|
195
|
+
validationGeneration: governance.validationGeneration,
|
|
196
|
+
collectionPolicyVersion: publication.approval.binding.collectionPolicyVersion,
|
|
197
|
+
collectionPolicyHash: publication.approval.binding.collectionPolicyHash,
|
|
198
|
+
validationPolicyHash: publication.approval.binding.validationPolicyHash,
|
|
199
|
+
sourceGeneration: source.generation,
|
|
200
|
+
sourceSnapshotHash: source.hash,
|
|
201
|
+
};
|
|
202
|
+
const state = immutable(snapshotData({
|
|
203
|
+
access,
|
|
204
|
+
purpose,
|
|
205
|
+
binding,
|
|
206
|
+
revision,
|
|
207
|
+
source,
|
|
208
|
+
...(use === undefined ? {} : { use }),
|
|
209
|
+
}));
|
|
210
|
+
await confirm(state);
|
|
211
|
+
const checked = immutable(snapshotData({
|
|
212
|
+
article: {
|
|
213
|
+
articleId,
|
|
214
|
+
collectionId: revision.collectionId,
|
|
215
|
+
revision: revision.number,
|
|
216
|
+
kind: revision.kind,
|
|
217
|
+
title: revision.title,
|
|
218
|
+
summary: revision.summary,
|
|
219
|
+
content: revision.content,
|
|
220
|
+
tags: revision.tags,
|
|
221
|
+
applicability: revision.applicability,
|
|
222
|
+
contentHash: revision.contentHash,
|
|
223
|
+
},
|
|
224
|
+
binding,
|
|
225
|
+
portalBrowseable: hasPermission(access, knowledgePermissions.articleRead) &&
|
|
226
|
+
allows(policy.portal, access),
|
|
227
|
+
enabledUses,
|
|
228
|
+
}));
|
|
229
|
+
confirmations.set(checked, state);
|
|
230
|
+
return checked;
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
if (purpose === "index" && error instanceof RepositoryCapacityError)
|
|
234
|
+
throw error;
|
|
235
|
+
if (isUnavailable(error))
|
|
236
|
+
throw unavailable();
|
|
237
|
+
throw error;
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
async recheck(checked) {
|
|
241
|
+
const state = confirmations.get(checked);
|
|
242
|
+
if (state === undefined)
|
|
243
|
+
throw unavailable();
|
|
244
|
+
try {
|
|
245
|
+
await confirm(state);
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
if (state.purpose === "index" &&
|
|
249
|
+
error instanceof RepositoryCapacityError)
|
|
250
|
+
throw error;
|
|
251
|
+
if (isUnavailable(error))
|
|
252
|
+
throw unavailable();
|
|
253
|
+
throw error;
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=publication.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publication.js","sourceRoot":"","sources":["../src/publication.ts"],"names":[],"mappings":"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"}
|
package/dist/reads.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { KnowledgeRepository } from "./repository.js";
|
|
2
|
+
import type { KnowledgeBaseApplication, KnowledgeBaseServiceOptions } from "./types.js";
|
|
3
|
+
/** Explicit keyed staff reads and a separately authorized portal-only read. */
|
|
4
|
+
export declare function createReadServices(repository: KnowledgeRepository, options: KnowledgeBaseServiceOptions): Pick<KnowledgeBaseApplication, "getCollection" | "getValidationPolicy" | "getGovernanceConfiguration" | "getValidationRequirements" | "getDraft" | "getEvidence" | "getProvenance" | "getReview" | "getPublishedArticle">;
|
|
5
|
+
//# sourceMappingURL=reads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../src/reads.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAQ3D,OAAO,KAAK,EACV,wBAAwB,EACxB,2BAA2B,EAG5B,MAAM,YAAY,CAAC;AAkDpB,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE,2BAA2B,GACnC,IAAI,CACL,wBAAwB,EACtB,eAAe,GACf,qBAAqB,GACrB,4BAA4B,GAC5B,2BAA2B,GAC3B,UAAU,GACV,aAAa,GACb,eAAe,GACf,WAAW,GACX,qBAAqB,CACxB,CAmNA"}
|