@rytass/bpm-core-nestjs-module 0.4.0 → 0.5.1
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/CHANGELOG.md +46 -0
- package/package.json +2 -2
- package/src/lib/identity/identity.service.d.ts +9 -0
- package/src/lib/identity/identity.service.js +56 -1
- package/src/lib/identity/identity.service.js.map +1 -1
- package/src/lib/identity/member-base.adapter.d.ts +29 -1
- package/src/lib/identity/member-base.adapter.js +10 -0
- package/src/lib/identity/member-base.adapter.js.map +1 -1
- package/src/lib/identity/member-resolver.interface.d.ts +53 -6
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
Releases are managed by [`nx release`](https://nx.dev/recipes/nx-release) with
|
|
10
10
|
Conventional Commits — see `nx.json` for the release config.
|
|
11
11
|
|
|
12
|
+
## 0.5.1 — 2026-07-06
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- **Broken 0.5.0 tarball.** 0.5.0 was published from the project source root, so
|
|
17
|
+
the npm tarball shipped only TypeScript sources (`src/*.ts`, tsconfig, jest
|
|
18
|
+
config) with no compiled `.js`/`.d.ts`, while `main`/`exports` point at
|
|
19
|
+
`./src/index.js` — downstream installs failed with webpack
|
|
20
|
+
`Module not found` and NestJS `require` errors. 0.5.1 is republished from the
|
|
21
|
+
build output (`dist/libs/bpm-core`), which contains the compiled `.js` +
|
|
22
|
+
`.d.ts` and a `generatePackageJson` manifest.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- Configured the `nx-release-publish` target with
|
|
27
|
+
`packageRoot: dist/libs/bpm-core` so `nx release publish` always publishes the
|
|
28
|
+
build artifacts instead of the source root, preventing a recurrence. No API or
|
|
29
|
+
runtime source changes from 0.5.0.
|
|
30
|
+
|
|
31
|
+
## 0.5.0 — 2026-07-06
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- Optional `searchPaged(searchText, { page, pageSize })` on `BPMMemberResolver`
|
|
36
|
+
(returning `{ items, total }`) and the matching optional `searchMembersPaged`
|
|
37
|
+
on `BPMMemberBaseDirectory`. When a host implements it, BPM delegates
|
|
38
|
+
pagination and total counting to the host's source (e.g. DB `LIMIT/OFFSET` +
|
|
39
|
+
`COUNT`) instead of pulling everything through the ~50-cap member-picker
|
|
40
|
+
`search` and paginating in memory. New exported types `BPMMemberSearchPage`,
|
|
41
|
+
`BPMMemberSearchPageOptions`, and `BPMMemberBaseSearchPage`.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- `searchMembers` and `memberCount` (via `IdentityService`) now detect the new
|
|
46
|
+
`searchPaged` capability: present → real paged delegation with an accurate
|
|
47
|
+
total and per-id `member_metadata_cache` backfill of the returned page;
|
|
48
|
+
absent → the pre-0.5.0 `search`-and-slice-in-memory path, unchanged. The
|
|
49
|
+
`search?` contract is clarified as member-picker-only (~50 matches, not
|
|
50
|
+
paginated).
|
|
51
|
+
- Peer dependency `@rytass/bpm-core-shared` now requires ^0.5.0.
|
|
52
|
+
|
|
53
|
+
> Behavior note: hosts that have **not** implemented `searchMembersPaged` still
|
|
54
|
+
> see the admin members list (`admin/users`) capped by whatever their `search()`
|
|
55
|
+
> returns (~50 rows) with a matching total. Implement `searchMembersPaged` to
|
|
56
|
+
> page a larger directory and report the true total.
|
|
57
|
+
|
|
12
58
|
## 0.4.0 — 2026-07-02
|
|
13
59
|
|
|
14
60
|
### Added
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rytass/bpm-core-nestjs-module",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "Embeddable NestJS BPM approval workflow module: workflow engine, approval templates, forms, organization/member contracts, attachments, signatures, notifications, delegation, and TypeORM migrations.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bpm",
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"@nestjs/core": "^11.0.0",
|
|
142
142
|
"@nestjs/graphql": "^13.4.0",
|
|
143
143
|
"@nestjs/typeorm": "^11.0.1",
|
|
144
|
-
"@rytass/bpm-core-shared": "^0.
|
|
144
|
+
"@rytass/bpm-core-shared": "^0.5.0",
|
|
145
145
|
"@rytass/secret-adapter-vault-nestjs": "^0.4.5 || ^0.5.0",
|
|
146
146
|
"express": "^4.0.0 || ^5.0.0",
|
|
147
147
|
"graphql": "^16.0.0",
|
|
@@ -17,6 +17,15 @@ export declare class IdentityService {
|
|
|
17
17
|
listCachedMembers(): Promise<readonly MemberMetadataCacheEntity[]>;
|
|
18
18
|
countMembers(searchText: string): Promise<number>;
|
|
19
19
|
searchMembers(searchText: string, options?: SearchMembersOptions): Promise<readonly MemberMetadata[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Backfills the per-id `member_metadata_cache` rows for members
|
|
22
|
+
* returned by a paged search, reusing the same row entities and TTL as
|
|
23
|
+
* `resolveMany`. Unlike `resolveMany` (which only rewrites rows it had
|
|
24
|
+
* to re-fetch), every returned member is refreshed here since a paged
|
|
25
|
+
* search always carries authoritative host data. The page query itself
|
|
26
|
+
* is never row-cached; only the individual member metadata is.
|
|
27
|
+
*/
|
|
28
|
+
private cacheMemberMetadata;
|
|
20
29
|
private searchAllMembers;
|
|
21
30
|
}
|
|
22
31
|
export {};
|
|
@@ -103,16 +103,71 @@ let IdentityService = class IdentityService {
|
|
|
103
103
|
return this.cacheRepository.find({ order: { memberId: 'ASC' } });
|
|
104
104
|
}
|
|
105
105
|
async countMembers(searchText) {
|
|
106
|
+
if (this.memberResolver.searchPaged) {
|
|
107
|
+
const page = await this.memberResolver.searchPaged(searchText, {
|
|
108
|
+
page: DEFAULT_MEMBER_PAGE,
|
|
109
|
+
pageSize: 1,
|
|
110
|
+
});
|
|
111
|
+
return page.total;
|
|
112
|
+
}
|
|
106
113
|
const members = await this.searchAllMembers(searchText);
|
|
107
114
|
return members.length;
|
|
108
115
|
}
|
|
109
116
|
async searchMembers(searchText, options = {}) {
|
|
117
|
+
const wantsPagination = options.page !== undefined || options.pageSize !== undefined;
|
|
118
|
+
if (wantsPagination && this.memberResolver.searchPaged) {
|
|
119
|
+
const page = await this.memberResolver.searchPaged(searchText, {
|
|
120
|
+
page: normalizePage(options.page),
|
|
121
|
+
pageSize: normalizePageSize(options.pageSize),
|
|
122
|
+
});
|
|
123
|
+
await this.cacheMemberMetadata(page.items);
|
|
124
|
+
return page.items;
|
|
125
|
+
}
|
|
110
126
|
const members = await this.searchAllMembers(searchText);
|
|
111
|
-
if (
|
|
127
|
+
if (!wantsPagination) {
|
|
112
128
|
return members;
|
|
113
129
|
}
|
|
114
130
|
return paginateMembers(members, options);
|
|
115
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Backfills the per-id `member_metadata_cache` rows for members
|
|
134
|
+
* returned by a paged search, reusing the same row entities and TTL as
|
|
135
|
+
* `resolveMany`. Unlike `resolveMany` (which only rewrites rows it had
|
|
136
|
+
* to re-fetch), every returned member is refreshed here since a paged
|
|
137
|
+
* search always carries authoritative host data. The page query itself
|
|
138
|
+
* is never row-cached; only the individual member metadata is.
|
|
139
|
+
*/
|
|
140
|
+
async cacheMemberMetadata(members) {
|
|
141
|
+
if (members.length === 0) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const now = new Date();
|
|
145
|
+
const expiresAt = new Date(now.getTime() + this.identityOptions.memberMetadataCacheTtlMs);
|
|
146
|
+
const memberIds = members.map((member) => member.memberId);
|
|
147
|
+
const existingRows = await this.cacheRepository.find({
|
|
148
|
+
where: { memberId: (0, typeorm_2.In)([...memberIds]) },
|
|
149
|
+
});
|
|
150
|
+
const existingRowByMemberId = new Map(existingRows.map((row) => [
|
|
151
|
+
row.memberId,
|
|
152
|
+
row,
|
|
153
|
+
]));
|
|
154
|
+
const seenMemberIds = new Set();
|
|
155
|
+
const entitiesToSave = [];
|
|
156
|
+
for (const metadata of members) {
|
|
157
|
+
if (seenMemberIds.has(metadata.memberId)) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
seenMemberIds.add(metadata.memberId);
|
|
161
|
+
const cacheEntity = existingRowByMemberId.get(metadata.memberId) ??
|
|
162
|
+
new member_metadata_cache_entity_1.MemberMetadataCacheEntity();
|
|
163
|
+
cacheEntity.memberId = metadata.memberId;
|
|
164
|
+
cacheEntity.metadata = metadata;
|
|
165
|
+
cacheEntity.fetchedAt = now;
|
|
166
|
+
cacheEntity.expiresAt = expiresAt;
|
|
167
|
+
entitiesToSave.push(cacheEntity);
|
|
168
|
+
}
|
|
169
|
+
await this.cacheRepository.save(entitiesToSave);
|
|
170
|
+
}
|
|
116
171
|
async searchAllMembers(searchText) {
|
|
117
172
|
if (this.memberResolver.search) {
|
|
118
173
|
return this.memberResolver.search(searchText);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.service.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/identity/identity.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"identity.service.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/identity/identity.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { InjectionToken, Provider } from '@nestjs/common';
|
|
2
2
|
import { MemberMetadata } from '@rytass/bpm-core-shared';
|
|
3
3
|
import { BPMAuthContext } from '../bpm-auth';
|
|
4
|
-
import { BPMMemberResolver } from './member-resolver.interface';
|
|
4
|
+
import { BPMMemberResolver, BPMMemberSearchPage, BPMMemberSearchPageOptions } from './member-resolver.interface';
|
|
5
5
|
/**
|
|
6
6
|
* Structural contract a host identity backend should implement (or a thin
|
|
7
7
|
* adapter wrap) so BPM can be plugged into any `member-base`-style
|
|
@@ -15,6 +15,27 @@ export interface BPMMemberBaseDirectory<TMember> {
|
|
|
15
15
|
readonly resolveMember: (memberId: string) => Promise<TMember | null>;
|
|
16
16
|
readonly resolveMembers?: (memberIds: readonly string[]) => Promise<readonly TMember[]>;
|
|
17
17
|
readonly searchMembers?: (searchText: string) => Promise<readonly TMember[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Optional paged directory search. Implement this (in addition to, or
|
|
20
|
+
* instead of, `searchMembers`) to let BPM page through a directory
|
|
21
|
+
* larger than `searchMembers`' member-picker cap and report an
|
|
22
|
+
* accurate total on the admin members list. `page` is 1-based and
|
|
23
|
+
* already normalized/clamped by BPM. Return the requested slice as
|
|
24
|
+
* `items` and the full match count as `total`. When omitted, the
|
|
25
|
+
* adapter's `searchPaged` stays `undefined` and BPM falls back to the
|
|
26
|
+
* `searchMembers`-and-slice path.
|
|
27
|
+
*/
|
|
28
|
+
readonly searchMembersPaged?: (searchText: string, options: BPMMemberSearchPageOptions) => Promise<BPMMemberBaseSearchPage<TMember>>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Host-shaped page returned by
|
|
32
|
+
* {@link BPMMemberBaseDirectory.searchMembersPaged}. The adapter maps
|
|
33
|
+
* each `TMember` in `items` through the field readers into
|
|
34
|
+
* {@link MemberMetadata} and forwards `total` unchanged.
|
|
35
|
+
*/
|
|
36
|
+
export interface BPMMemberBaseSearchPage<TMember> {
|
|
37
|
+
readonly items: readonly TMember[];
|
|
38
|
+
readonly total: number;
|
|
18
39
|
}
|
|
19
40
|
/**
|
|
20
41
|
* Per-host field readers that tell the adapter how to extract canonical
|
|
@@ -44,6 +65,13 @@ export interface BPMMemberBaseResolverProviderOptions<TMember> {
|
|
|
44
65
|
export declare class BPMMemberBaseResolverAdapter<TMember> implements BPMMemberResolver {
|
|
45
66
|
private readonly directory;
|
|
46
67
|
private readonly options;
|
|
68
|
+
/**
|
|
69
|
+
* Present only when the wrapped directory implements
|
|
70
|
+
* `searchMembersPaged`. Left `undefined` otherwise so `IdentityService`
|
|
71
|
+
* capability detection falls back to the `search`-and-slice path,
|
|
72
|
+
* preserving pre-0.5.0 behavior.
|
|
73
|
+
*/
|
|
74
|
+
readonly searchPaged?: (searchText: string, options: BPMMemberSearchPageOptions) => Promise<BPMMemberSearchPage>;
|
|
47
75
|
constructor(directory: BPMMemberBaseDirectory<TMember>, options?: BPMMemberBaseAdapterOptions<TMember>);
|
|
48
76
|
resolve(memberId: string): Promise<MemberMetadata>;
|
|
49
77
|
resolveMany(memberIds: readonly string[]): Promise<ReadonlyMap<string, MemberMetadata>>;
|
|
@@ -8,6 +8,16 @@ class BPMMemberBaseResolverAdapter {
|
|
|
8
8
|
constructor(directory, options = {}) {
|
|
9
9
|
this.directory = directory;
|
|
10
10
|
this.options = options;
|
|
11
|
+
const searchMembersPaged = directory.searchMembersPaged;
|
|
12
|
+
if (searchMembersPaged) {
|
|
13
|
+
this.searchPaged = async (searchText, pageOptions) => {
|
|
14
|
+
const page = await searchMembersPaged(searchText, pageOptions);
|
|
15
|
+
return {
|
|
16
|
+
items: page.items.map((member) => readMemberMetadataFromMemberBaseMember(member, this.options)),
|
|
17
|
+
total: page.total,
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}
|
|
11
21
|
}
|
|
12
22
|
async resolve(memberId) {
|
|
13
23
|
const member = await this.directory.resolveMember(memberId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-base.adapter.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/identity/member-base.adapter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"member-base.adapter.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/identity/member-base.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,9 +46,20 @@ export declare const MEMBER_RESOLVER: symbol;
|
|
|
46
46
|
* as deleted/anonymized members and renders a placeholder. Throwing
|
|
47
47
|
* here aborts the entire batch and fails the GraphQL query — almost
|
|
48
48
|
* never the right choice.
|
|
49
|
-
* - `search(text)` is
|
|
50
|
-
*
|
|
51
|
-
*
|
|
49
|
+
* - `search(text)` is the **member-picker** contract: an optional,
|
|
50
|
+
* non-paginated fuzzy search that returns up to ~50 best matches. When
|
|
51
|
+
* omitted, BPM's `searchMembers` GraphQL query returns an empty array
|
|
52
|
+
* (the picker UI degrades to id-only entry). It is **not** meant to
|
|
53
|
+
* back a full member-directory listing page — see `searchPaged`.
|
|
54
|
+
* - `searchPaged(text, { page, pageSize })` is the optional **directory
|
|
55
|
+
* listing** contract. When implemented, BPM delegates pagination and
|
|
56
|
+
* total counting to the host (typically DB-level `LIMIT/OFFSET` + `COUNT`)
|
|
57
|
+
* instead of fetching everything through `search` and paginating in
|
|
58
|
+
* memory. This is what the admin members list (`admin/users`) needs to
|
|
59
|
+
* page through a directory larger than `search`'s ~50-row cap and to
|
|
60
|
+
* report an accurate total. When omitted, BPM falls back to
|
|
61
|
+
* `search`-and-slice, so the listing page is capped by whatever `search`
|
|
62
|
+
* returns (backwards-compatible with pre-0.5.0 hosts).
|
|
52
63
|
*
|
|
53
64
|
* Implementations may de-duplicate within a single call freely.
|
|
54
65
|
*/
|
|
@@ -66,11 +77,47 @@ export interface BPMMemberResolver {
|
|
|
66
77
|
*/
|
|
67
78
|
resolveMany(memberIds: readonly string[]): Promise<ReadonlyMap<string, MemberMetadata>>;
|
|
68
79
|
/**
|
|
69
|
-
* Optional free-text search. Return up to ~50 best
|
|
70
|
-
* not paginate the result. Omit the method entirely
|
|
71
|
-
* member-picker search.
|
|
80
|
+
* Optional **member-picker** free-text search. Return up to ~50 best
|
|
81
|
+
* matches; BPM does not paginate the result. Omit the method entirely
|
|
82
|
+
* to disable member-picker search. This contract is intentionally
|
|
83
|
+
* non-paginated — to back a full directory listing page implement
|
|
84
|
+
* {@link BPMMemberResolver.searchPaged} instead.
|
|
72
85
|
*/
|
|
73
86
|
search?(searchText: string): Promise<readonly MemberMetadata[]>;
|
|
87
|
+
/**
|
|
88
|
+
* Optional **directory-listing** paged search. When present, BPM
|
|
89
|
+
* delegates both pagination and total counting to the host — the
|
|
90
|
+
* host is expected to page at the source (e.g. DB `LIMIT/OFFSET`) and
|
|
91
|
+
* return an accurate `total` — bypassing the `search`-and-slice-in-
|
|
92
|
+
* memory path that caps the listing at `search`'s ~50 rows.
|
|
93
|
+
*
|
|
94
|
+
* `page` is 1-based and `pageSize` is the number of rows per page;
|
|
95
|
+
* BPM normalizes and clamps both before calling (see the identity
|
|
96
|
+
* service pagination defaults). BPM row-caches the returned `items`
|
|
97
|
+
* under the same TTL as `resolve`/`resolveMany`, but never caches the
|
|
98
|
+
* page query itself. Omit the method to keep the pre-0.5.0
|
|
99
|
+
* `search`-backed behavior.
|
|
100
|
+
*/
|
|
101
|
+
searchPaged?(searchText: string, options: BPMMemberSearchPageOptions): Promise<BPMMemberSearchPage>;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Pagination request passed to {@link BPMMemberResolver.searchPaged}.
|
|
105
|
+
* `page` is 1-based; `pageSize` is the page length. BPM normalizes both
|
|
106
|
+
* to sane, clamped values before delegating, so hosts can trust them.
|
|
107
|
+
*/
|
|
108
|
+
export interface BPMMemberSearchPageOptions {
|
|
109
|
+
readonly page: number;
|
|
110
|
+
readonly pageSize: number;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A single page of member search results returned by
|
|
114
|
+
* {@link BPMMemberResolver.searchPaged}. `items` is the requested slice
|
|
115
|
+
* (already limited to `pageSize`); `total` is the full unpaginated match
|
|
116
|
+
* count used by the `memberCount` GraphQL query.
|
|
117
|
+
*/
|
|
118
|
+
export interface BPMMemberSearchPage {
|
|
119
|
+
readonly items: readonly MemberMetadata[];
|
|
120
|
+
readonly total: number;
|
|
74
121
|
}
|
|
75
122
|
/**
|
|
76
123
|
* @deprecated Use {@link BPMMemberResolver}. Kept as a backwards-compatible
|