@geoly-ai/social-hub-authz 0.0.3 → 0.0.5
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/dist/index.d.ts +73 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +522 -41
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +312 -256
- package/dist/index.test.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
export type Role = "internal" | "senior" | "supervisor" | "manager" | "client" | "admin";
|
|
2
|
-
export type Resource = "brand" | "campaign" | "socialAccount" | "task" | "publishingPlan" | "contentDraft" | "report" | "dashboardSummary" | "opReport" | "postSnapshot" | "postSnapshotStats" | "postSnapshotRefresh" | "postSnapshotImport" | "apiKey" | "cliAuthorization" | "cliTokenDuration" | "auditLog" | "compliance" | "subredditIntelligence" | "member" | "systemMember" | "systemBrand" | "systemCampaign" | "invite" | "systemSetting" | "permissionMatrix" | "agentTeam" | "notificationChannel" | "browserEnvironment" | "brandMember" | "campaignAccount";
|
|
2
|
+
export type Resource = "brand" | "campaign" | "socialAccount" | "task" | "publishingPlan" | "contentDraft" | "report" | "dashboardSummary" | "opReport" | "postSnapshot" | "postSnapshotStats" | "postSnapshotRefresh" | "postSnapshotImport" | "postSnapshotSentimentReview" | "redditMetricsSnapshot" | "apiKey" | "cliAuthorization" | "cliTokenDuration" | "auditLog" | "compliance" | "subredditIntelligence" | "subredditIntelMonitoring" | "subredditIntelDiscovery" | "subredditIntelEvidence" | "subredditIntelKol" | "subredditPool" | "member" | "systemMember" | "systemBrand" | "systemPersona" | "systemSubredditBlocklist" | "subredditIntelRuns" | "systemCampaign" | "invite" | "systemSetting" | "permissionMatrix" | "agentTeam" | "notificationChannel" | "browserEnvironment" | "brandMember" | "campaignAccount" | "brandMentionAuthorization" | "scrape" | "contentReview";
|
|
3
3
|
export type Action = "list" | "read" | "create" | "update" | "delete" | "retry" | "cancel" | "export";
|
|
4
4
|
export type PermissionMatrix = Record<Role, Record<Resource, Record<Action, boolean>>>;
|
|
5
5
|
export declare const ROLE_VALUES: Role[];
|
|
6
6
|
export declare const RESOURCE_VALUES: Resource[];
|
|
7
|
+
/**
|
|
8
|
+
* 板块情报页四个 Tab 对应的子资源。归属**按页面当前实际内容**划分(而不是
|
|
9
|
+
* 名字听起来该管什么),否则会出现"Tab 可见但里面的接口 403"(Codex):
|
|
10
|
+
* - monitoring:watchlists CRUD、industry-pools、tier-rules、fetch-by-industry/tier
|
|
11
|
+
* - discovery :hot-posts(含 CSV/dispatch)、insights 全系列、fetch-by-keywords
|
|
12
|
+
* - evidence :evidence、comments、coverage、voc、handoffs
|
|
13
|
+
* - kol :kol-intents、kol-profiles
|
|
14
|
+
* 运行记录仍归既有的独立资源 `subredditIntelRuns`,不并入 discovery。
|
|
15
|
+
*/
|
|
16
|
+
export declare const SUBREDDIT_INTEL_CHILD_RESOURCES: readonly ["subredditIntelMonitoring", "subredditIntelDiscovery", "subredditIntelEvidence", "subredditIntelKol"];
|
|
17
|
+
export type SubredditIntelChildResource = (typeof SUBREDDIT_INTEL_CHILD_RESOURCES)[number];
|
|
7
18
|
export declare const ACTION_VALUES: Action[];
|
|
19
|
+
/** @deprecated Superseded by the field visibility registry/matrix below. */
|
|
8
20
|
export type FieldMaskMode = "omit" | "null" | "redact" | "aggregateOnly";
|
|
21
|
+
/** @deprecated Superseded by the field visibility registry/matrix below. */
|
|
9
22
|
export type FieldPolicy = {
|
|
10
23
|
resource: "postSnapshot" | "socialAccount" | "opReport";
|
|
11
24
|
field: string;
|
|
@@ -13,12 +26,59 @@ export type FieldPolicy = {
|
|
|
13
26
|
editable: boolean;
|
|
14
27
|
mask?: FieldMaskMode;
|
|
15
28
|
};
|
|
29
|
+
export declare const FIELD_VISIBILITY_RESOURCES: readonly ["postSnapshot", "postSnapshotStats", "browserEnvironment", "browserEnvironmentTelemetryEvent", "socialAccount", "opReport", "subredditHotPost", "subredditWatchlist", "redditCommentSample", "subredditEvidence", "kolEngagementIntent", "kolProfile", "sopHandoff", "redditSentimentReview"];
|
|
30
|
+
export type FieldVisibilityResource = (typeof FIELD_VISIBILITY_RESOURCES)[number];
|
|
31
|
+
/** "omit" deletes the field from the response; "empty" replaces it with [] to keep array contracts. */
|
|
32
|
+
export type FieldVisibilityMask = "omit" | "empty";
|
|
33
|
+
export type FieldVisibilityRegistryEntry = {
|
|
34
|
+
resource: FieldVisibilityResource;
|
|
35
|
+
/** Dotted paths address nested objects (e.g. "telemetry.baselineIp"). */
|
|
36
|
+
field: string;
|
|
37
|
+
mask: FieldVisibilityMask;
|
|
38
|
+
defaultReadable: Record<Role, boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* 对 client **不可覆盖**:产品语义上就写明"仅内部可见"的字段,可治理的只是
|
|
41
|
+
* "内部谁能看",而不是"要不要给客户看"。矩阵 UI 应把它显示为锁定,写入侧与
|
|
42
|
+
* 读取侧都会钳回 false —— 锁定规则跟着条目走,而不是另维护一份字段名单。
|
|
43
|
+
*/
|
|
44
|
+
clientLocked?: true;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Governable sensitive fields. Only fields registered here can be toggled in
|
|
48
|
+
* the field visibility matrix; absolute secrets (credentialsRef, password/key
|
|
49
|
+
* hashes, ...) must never be registered — they stay hard-sanitized at the
|
|
50
|
+
* source and the matrix cannot expose them.
|
|
51
|
+
*/
|
|
52
|
+
export declare const FIELD_VISIBILITY_REGISTRY: FieldVisibilityRegistryEntry[];
|
|
53
|
+
/**
|
|
54
|
+
* Structural/debug telemetry-event fields always hidden from client sessions
|
|
55
|
+
* regardless of matrix overrides (the configurable entries above only cover
|
|
56
|
+
* the semantically sensitive ones).
|
|
57
|
+
*/
|
|
58
|
+
export declare const TELEMETRY_EVENT_HARD_HIDDEN_FOR_CLIENT: string[];
|
|
59
|
+
/** role → "resource.field" → readable */
|
|
60
|
+
export type FieldVisibilityMatrix = Record<Role, Record<string, boolean>>;
|
|
61
|
+
/** 该字段对 client 是否被锁死(不可通过 override 打开)。 */
|
|
62
|
+
export declare function isClientLockedField(resource: string, field: string): boolean;
|
|
63
|
+
export declare function fieldVisibilityKey(resource: string, field: string): string;
|
|
64
|
+
export declare function isRegisteredField(resource: string, field: string): boolean;
|
|
65
|
+
export declare function buildFieldVisibilityMatrix(): FieldVisibilityMatrix;
|
|
66
|
+
/** Flat `resource.field` readability flags shipped to the web app alongside permissionAllowance. */
|
|
67
|
+
export declare function fieldAllowanceFromMatrix(matrix: FieldVisibilityMatrix, role: Role): Record<string, boolean>;
|
|
16
68
|
export type ResolvedAccessContext = {
|
|
17
69
|
role: Role;
|
|
18
70
|
teamIds: string[];
|
|
19
71
|
brandIds: string[];
|
|
20
72
|
campaignIds: string[];
|
|
21
73
|
accountIds: string[];
|
|
74
|
+
/**
|
|
75
|
+
* 账号级授权的 (账号, 品牌) 对。行级判定用它做**成对**匹配:授权一个发帖
|
|
76
|
+
* 账号 = 只看它名下、且归属它所绑定品牌的数据(产品口径)。
|
|
77
|
+
*/
|
|
78
|
+
accountBrandPairs: Array<{
|
|
79
|
+
accountId: string;
|
|
80
|
+
brandId: string;
|
|
81
|
+
}>;
|
|
22
82
|
hasAllCampaignAccess: boolean;
|
|
23
83
|
};
|
|
24
84
|
/**
|
|
@@ -38,6 +98,13 @@ export declare function assertTeamPathForContext(ctx: {
|
|
|
38
98
|
role?: Role;
|
|
39
99
|
visibleTeamIds?: string[];
|
|
40
100
|
}, pathTeamId: string): void;
|
|
101
|
+
/** Enforce account-level visibility for session/cli_token callers (admin bypass). */
|
|
102
|
+
export declare function assertAccountVisibleForContext(input: {
|
|
103
|
+
role?: Role;
|
|
104
|
+
kind: "api_key" | "session" | "cli_token";
|
|
105
|
+
visibleAccountIds?: string[];
|
|
106
|
+
accountId: string;
|
|
107
|
+
}): void;
|
|
41
108
|
export declare function assertCanPerformAction(input: {
|
|
42
109
|
role: Role;
|
|
43
110
|
resource: Resource;
|
|
@@ -107,10 +174,10 @@ export declare function resolveAccessContext(input: {
|
|
|
107
174
|
visibleBrandIds?: string[];
|
|
108
175
|
visibleCampaignIds?: string[] | null;
|
|
109
176
|
visibleAccountIds?: string[];
|
|
177
|
+
/** 账号级授权的 (账号, 品牌) 对;仅受限主体有意义。 */
|
|
178
|
+
visibleAccountBrandPairs?: Array<{
|
|
179
|
+
accountId: string;
|
|
180
|
+
brandId: string;
|
|
181
|
+
}>;
|
|
110
182
|
}): ResolvedAccessContext;
|
|
111
|
-
export declare function getFieldPolicy(input: {
|
|
112
|
-
role: Role;
|
|
113
|
-
resource: FieldPolicy["resource"];
|
|
114
|
-
field: string;
|
|
115
|
-
}): FieldPolicy | null;
|
|
116
183
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,IAAI,GACZ,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,QAAQ,GACR,OAAO,CAAC;AACZ,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,UAAU,GACV,eAAe,GACf,MAAM,GACN,gBAAgB,GAChB,cAAc,GACd,QAAQ,GACR,kBAAkB,GAClB,UAAU,GACV,cAAc,GACd,mBAAmB,GACnB,qBAAqB,GACrB,oBAAoB,GACpB,QAAQ,GACR,kBAAkB,GAClB,kBAAkB,GAClB,UAAU,GACV,YAAY,GACZ,uBAAuB,GACvB,QAAQ,GACR,cAAc,GACd,aAAa,GACb,gBAAgB,GAChB,QAAQ,GACR,eAAe,GACf,kBAAkB,GAClB,WAAW,GACX,qBAAqB,GACrB,oBAAoB,GACpB,aAAa,GACb,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|