@owlmeans/client-planning 0.1.18-rc.26 → 0.1.18-rc.27
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/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/client-planning/SKILL.md +7 -1
- package/build/commits.d.ts.map +1 -1
- package/build/commits.js +6 -6
- package/build/commits.js.map +1 -1
- package/build/definitions.js +3 -3
- package/build/definitions.js.map +1 -1
- package/build/facade.d.ts.map +1 -1
- package/build/facade.js +2 -2
- package/build/facade.js.map +1 -1
- package/build/resources.d.ts.map +1 -1
- package/build/resources.js +4 -4
- package/build/resources.js.map +1 -1
- package/package.json +3 -3
- package/src/commits.ts +6 -6
- package/src/definitions.ts +4 -4
- package/src/facade.ts +18 -17
- package/src/resources.ts +5 -5
- package/tests/context.ts +8 -4
- package/tests/events.spec.ts +1 -1
- package/tests/facade.spec.ts +2 -1
- package/tests/replies.spec.ts +81 -0
- package/tests/resources.spec.ts +1 -1
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@owlmeans/client-planning",
|
|
4
|
-
"version": "0.1.18-rc.
|
|
5
|
-
"generatedAt": "2026-10-
|
|
4
|
+
"version": "0.1.18-rc.27",
|
|
5
|
+
"generatedAt": "2026-10-09T13:40:06.950Z",
|
|
6
6
|
"canonicalRepo": "https://github.com/owlmeans/common",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
@@ -8,7 +8,7 @@ user-invocable: false
|
|
|
8
8
|
# @owlmeans/client-planning
|
|
9
9
|
|
|
10
10
|
**Layer:** Client
|
|
11
|
-
**Install:** `"@owlmeans/client-planning": "^0.1.18-rc.
|
|
11
|
+
**Install:** `"@owlmeans/client-planning": "^0.1.18-rc.27"` in `dependencies`
|
|
12
12
|
|
|
13
13
|
The client half of OwlMeans planning. It answers the `PlanningFacade` interface of
|
|
14
14
|
`@owlmeans/planning` over the protocol tree a server mounted with `@owlmeans/server-planning`, keeps
|
|
@@ -245,6 +245,12 @@ Reload schemas and create fresh feeds after adopting the new credential. Never p
|
|
|
245
245
|
old-organization result into a new mirror; remote calls reject it with `client:scope-changed`.
|
|
246
246
|
Feed query scope alone is insufficient for this lifecycle.
|
|
247
247
|
|
|
248
|
+
Planning protocols return `PlanningReply<T>` without storage organization identifiers. Stock
|
|
249
|
+
facades hydrate records, receipts, schema scopes and socket frames with `entityId: ''` only to
|
|
250
|
+
preserve the shared facade shape. That value is an advisory placeholder, never an organization
|
|
251
|
+
identity or a credential. Use `scopeKey` and the authenticated organization entity slug for
|
|
252
|
+
identity changes and access isolation; native server records keep their verified stable scope.
|
|
253
|
+
|
|
248
254
|
Resource feed reconciliation snapshots mirror versions before requesting a list. Only unchanged
|
|
249
255
|
snapshot rows absent from that response are removed, so a new local write or a newer version
|
|
250
256
|
survives an older in-flight poll. Stopped feeds cannot publish. Track custom feeds through
|
package/build/commits.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commits.d.ts","sourceRoot":"","sources":["../src/commits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,
|
|
1
|
+
{"version":3,"file":"commits.d.ts","sourceRoot":"","sources":["../src/commits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAA2O,KAAK,iBAAiB,EAAmC,MAAM,oBAAoB,CAAA;AAGrU,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAqB/E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,WAC5E,CAAC,aAAa,iBAAiB,SAAS,yBAAyB,KACzE,kBAuMF,CAAA"}
|
package/build/commits.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { logger } from '@owlmeans/log';
|
|
2
|
-
import { CommitFailed, CommitState, CommitTimeout, DEFAULT_COMMIT_POLL, DEFAULT_COMMIT_TIMEOUT, MAX_COMMIT_POLL, PLANNING_COMMIT_EVENT, PlanningError, WorkcardKind } from '@owlmeans/planning';
|
|
2
|
+
import { planningReplyHelper, CommitFailed, CommitState, CommitTimeout, DEFAULT_COMMIT_POLL, DEFAULT_COMMIT_TIMEOUT, MAX_COMMIT_POLL, PLANNING_COMMIT_EVENT, PlanningError, WorkcardKind } from '@owlmeans/planning';
|
|
3
3
|
import { EARLY_POLL_LADDER, EARLY_POLL_MS, LONG_POLL_GRACE } from './consts.js';
|
|
4
4
|
import { recordUtils } from './utils/record.js';
|
|
5
5
|
const log = logger('client-planning');
|
|
@@ -58,7 +58,7 @@ export const makeRemoteCommitSource = (context, protocols, opts) => {
|
|
|
58
58
|
}
|
|
59
59
|
open = connection;
|
|
60
60
|
detach = connection.observe(PLANNING_COMMIT_EVENT, async (message) => {
|
|
61
|
-
await dispatch(message.payload);
|
|
61
|
+
await dispatch(planningReplyHelper.hydrate(message.payload));
|
|
62
62
|
});
|
|
63
63
|
return connection;
|
|
64
64
|
}
|
|
@@ -71,14 +71,14 @@ export const makeRemoteCommitSource = (context, protocols, opts) => {
|
|
|
71
71
|
return await opening;
|
|
72
72
|
};
|
|
73
73
|
const endpoint = () => context.entrypoint(protocols.commit.get);
|
|
74
|
-
const status = async (transition) => await endpoint().call({
|
|
74
|
+
const status = async (transition) => planningReplyHelper.hydrate(await endpoint().call({
|
|
75
75
|
params: { transition }, query: { wait: 0 }, timeout: opts?.timeout,
|
|
76
|
-
});
|
|
76
|
+
}));
|
|
77
77
|
const hold = async (transition, wait, signal) => {
|
|
78
78
|
try {
|
|
79
|
-
return await endpoint().call({
|
|
79
|
+
return planningReplyHelper.hydrate(await endpoint().call({
|
|
80
80
|
params: { transition }, query: { wait }, timeout: wait * 1000 + LONG_POLL_GRACE, signal,
|
|
81
|
-
});
|
|
81
|
+
}));
|
|
82
82
|
}
|
|
83
83
|
catch (e) {
|
|
84
84
|
if (signal.aborted || e instanceof PlanningError) {
|
package/build/commits.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commits.js","sourceRoot":"","sources":["../src/commits.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,eAAe,EAAE,qBAAqB,EAAE,aAAa,EAAE,YAAY,EAAmH,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"commits.js","sourceRoot":"","sources":["../src/commits.ts"],"names":[],"mappings":"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"}
|
package/build/definitions.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PlanningError, PlanningUnsupported, SchemaWriteMode, scopedSchemaHelper } from '@owlmeans/planning';
|
|
1
|
+
import { planningReplyHelper, PlanningError, PlanningUnsupported, SchemaWriteMode, scopedSchemaHelper } from '@owlmeans/planning';
|
|
2
2
|
const clean = (record) => Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
|
|
3
3
|
/**
|
|
4
4
|
* Data-defined types and flows over a tree declared with `definitions: true`: a layer's registry is
|
|
@@ -24,7 +24,7 @@ export const makeRemoteDefinitions = (context, protocols, opts = {}) => {
|
|
|
24
24
|
let entry = cache.get(key);
|
|
25
25
|
if (entry == null) {
|
|
26
26
|
const loading = (async () => {
|
|
27
|
-
const bundle = await context.entrypoint(protocols.schema.list).call({ query: project != null ? { project } : {}, timeout: opts.timeout });
|
|
27
|
+
const bundle = planningReplyHelper.hydrate(await context.entrypoint(protocols.schema.list).call({ query: project != null ? { project } : {}, timeout: opts.timeout }));
|
|
28
28
|
if ((opts.scopeKey?.() ?? '') !== identity)
|
|
29
29
|
throw new PlanningError('client:scope-changed');
|
|
30
30
|
return scopedSchemaHelper.scopedRegistryOf(bundle);
|
|
@@ -42,7 +42,7 @@ export const makeRemoteDefinitions = (context, protocols, opts = {}) => {
|
|
|
42
42
|
};
|
|
43
43
|
const write = async (request) => {
|
|
44
44
|
try {
|
|
45
|
-
return await context.entrypoint(define).call({ body: clean(request), timeout: opts.timeout });
|
|
45
|
+
return planningReplyHelper.hydrate(await context.entrypoint(define).call({ body: clean(request), timeout: opts.timeout }));
|
|
46
46
|
}
|
|
47
47
|
finally {
|
|
48
48
|
invalidate();
|
package/build/definitions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"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"}
|
package/build/facade.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facade.d.ts","sourceRoot":"","sources":["../src/facade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"facade.d.ts","sourceRoot":"","sources":["../src/facade.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKlE,OAAO,KAAK,EACV,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAEjD,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAErD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,WACtE,CAAC,aAAa,iBAAiB,SAAS,OAAO,CAAC,aAAa,CAAC,QAAQ,mBAAmB,KACjG,cAuKF,CAAA"}
|
package/build/facade.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CommitFailed, CommitState, DEFAULT_COMMIT_TIMEOUT, modelOf, PlanningError, PlanningUnsupported, wireHelper, WorkcardKind, WorkcardNotFound, } from '@owlmeans/planning';
|
|
1
|
+
import { CommitFailed, CommitState, DEFAULT_COMMIT_TIMEOUT, modelOf, PlanningError, PlanningUnsupported, wireHelper, WorkcardKind, WorkcardNotFound, planningReplyHelper, } from '@owlmeans/planning';
|
|
2
2
|
import { makeRemoteResourceFacade } from './resources.js';
|
|
3
3
|
import { planningMirrorOf } from './events.js';
|
|
4
4
|
/**
|
|
@@ -23,7 +23,7 @@ export const makeRemoteFacade = (context, protocols, scope, opts) => {
|
|
|
23
23
|
const reply = await run();
|
|
24
24
|
if (opts.scopeKey?.() !== key)
|
|
25
25
|
throw new PlanningError('client:scope-changed');
|
|
26
|
-
return reply;
|
|
26
|
+
return planningReplyHelper.hydrate(reply);
|
|
27
27
|
};
|
|
28
28
|
const receiptOf = (view) => {
|
|
29
29
|
const id = view.transition.id;
|
package/build/facade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../src/facade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../src/facade.ts"],"names":[],"mappings":"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"}
|
package/build/resources.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,KAAK,EAAsE,iBAAiB,EAA2B,sBAAsB,
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,KAAK,EAAsE,iBAAiB,EAA2B,sBAAsB,EAAyC,MAAM,oBAAoB,CAAA;AACvN,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAGrD,kGAAkG;AAClG,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,WAC9E,CAAC,aAAa,iBAAiB,QAAQ,mBAAmB,KAClE,sBA4EF,CAAA"}
|
package/build/resources.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PlanningError, PlanningUnsupported, WorkcardNotFound } from '@owlmeans/planning';
|
|
1
|
+
import { planningReplyHelper, PlanningError, PlanningUnsupported, WorkcardNotFound } from '@owlmeans/planning';
|
|
2
2
|
/** The same auxiliary facade in browsers and Node clients, with versioned stock state mirrors. */
|
|
3
3
|
export const makeRemoteResourceFacade = (context, protocols, opts) => {
|
|
4
4
|
const tree = (name) => {
|
|
@@ -17,7 +17,7 @@ export const makeRemoteResourceFacade = (context, protocols, opts) => {
|
|
|
17
17
|
};
|
|
18
18
|
const get = async (name, id) => {
|
|
19
19
|
const key = opts.scopeKey?.();
|
|
20
|
-
const row = await context.entrypoint(tree(name).get).call({ params: { id }, timeout: opts.timeout });
|
|
20
|
+
const row = planningReplyHelper.hydrate(await context.entrypoint(tree(name).get).call({ params: { id }, timeout: opts.timeout }));
|
|
21
21
|
if (opts.scopeKey?.() !== key)
|
|
22
22
|
throw new PlanningError('client:scope-changed');
|
|
23
23
|
await mirror(name, row);
|
|
@@ -35,14 +35,14 @@ export const makeRemoteResourceFacade = (context, protocols, opts) => {
|
|
|
35
35
|
};
|
|
36
36
|
const list = async (name, query) => {
|
|
37
37
|
const key = opts.scopeKey?.();
|
|
38
|
-
const rows = await context.entrypoint(tree(name).list).call({ query: { query: JSON.stringify(query ?? {}) }, timeout: opts.timeout });
|
|
38
|
+
const rows = planningReplyHelper.hydrate(await context.entrypoint(tree(name).list).call({ query: { query: JSON.stringify(query ?? {}) }, timeout: opts.timeout }));
|
|
39
39
|
if (opts.scopeKey?.() !== key)
|
|
40
40
|
throw new PlanningError('client:scope-changed');
|
|
41
41
|
return rows;
|
|
42
42
|
};
|
|
43
43
|
const write = async (name, body) => {
|
|
44
44
|
const key = opts.scopeKey?.();
|
|
45
|
-
const answer = await context.entrypoint(tree(name).write).call({ body, timeout: opts.timeout });
|
|
45
|
+
const answer = planningReplyHelper.hydrate(await context.entrypoint(tree(name).write).call({ body, timeout: opts.timeout }));
|
|
46
46
|
if (opts.scopeKey?.() !== key)
|
|
47
47
|
throw new PlanningError('client:scope-changed');
|
|
48
48
|
if (answer != null && !Array.isArray(answer))
|
package/build/resources.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/client-planning",
|
|
3
|
-
"version": "0.1.18-rc.
|
|
3
|
+
"version": "0.1.18-rc.27",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "The client half of OwlMeans planning — the remote planning facade, the state mirror and its commit fold, and the subscribe-then-poll commit wait. React-free: it runs in a browser and in a Node client alike.",
|
|
6
6
|
"type": "module",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@owlmeans/context": "^0.1.18-rc.34",
|
|
30
30
|
"@owlmeans/entrypoint": "^0.1.18-rc.41",
|
|
31
31
|
"@owlmeans/error": "^0.1.18-rc.38",
|
|
32
|
-
"@owlmeans/planning": "^0.1.18-rc.
|
|
32
|
+
"@owlmeans/planning": "^0.1.18-rc.24",
|
|
33
33
|
"@owlmeans/resource": "^0.1.18-rc.40",
|
|
34
34
|
"@owlmeans/log": "^0.1.18-rc.3",
|
|
35
35
|
"@owlmeans/route": "^0.1.18-rc.35",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@owlmeans/dep-config": "workspace:*",
|
|
45
|
-
"@owlmeans/server-planning": "^0.1.18-rc.
|
|
45
|
+
"@owlmeans/server-planning": "^0.1.18-rc.28",
|
|
46
46
|
"@owlmeans/test": "^0.1.18-rc.36",
|
|
47
47
|
"@types/bun": "^1.4.2",
|
|
48
48
|
"ajv": "^8.20.0",
|
package/src/commits.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BasicConfig, BasicContext } from '@owlmeans/context'
|
|
2
2
|
import { logger } from '@owlmeans/log'
|
|
3
|
-
import { CommitFailed, CommitState, CommitTimeout, DEFAULT_COMMIT_POLL, DEFAULT_COMMIT_TIMEOUT, MAX_COMMIT_POLL, PLANNING_COMMIT_EVENT, PlanningError, WorkcardKind, type CommitEvent, type CommitFilter, type CommitStatus, type PlanningProtocols, type Unsubscribe, type Workcard } from '@owlmeans/planning'
|
|
3
|
+
import { planningReplyHelper, CommitFailed, CommitState, CommitTimeout, DEFAULT_COMMIT_POLL, DEFAULT_COMMIT_TIMEOUT, MAX_COMMIT_POLL, PLANNING_COMMIT_EVENT, PlanningError, WorkcardKind, type CommitEvent, type CommitFilter, type CommitStatus, type PlanningProtocols, type Unsubscribe, type Workcard } from '@owlmeans/planning'
|
|
4
4
|
import type { Connection } from '@owlmeans/socket'
|
|
5
5
|
import { EARLY_POLL_LADDER, EARLY_POLL_MS, LONG_POLL_GRACE } from './consts.js'
|
|
6
6
|
import type { RemoteCommitSource, RemoteCommitSourceOptions } from './types.js'
|
|
@@ -74,7 +74,7 @@ export const makeRemoteCommitSource = <C extends BasicConfig, T extends BasicCon
|
|
|
74
74
|
}
|
|
75
75
|
open = connection
|
|
76
76
|
detach = connection.observe<CommitEvent>(PLANNING_COMMIT_EVENT, async message => {
|
|
77
|
-
await dispatch(message.payload)
|
|
77
|
+
await dispatch(planningReplyHelper.hydrate<CommitEvent>(message.payload))
|
|
78
78
|
})
|
|
79
79
|
return connection
|
|
80
80
|
} catch (e) {
|
|
@@ -89,15 +89,15 @@ export const makeRemoteCommitSource = <C extends BasicConfig, T extends BasicCon
|
|
|
89
89
|
|
|
90
90
|
const endpoint = () => context.entrypoint(protocols.commit.get)
|
|
91
91
|
|
|
92
|
-
const status = async (transition: string): Promise<CommitStatus> => await endpoint().call({
|
|
92
|
+
const status = async (transition: string): Promise<CommitStatus> => planningReplyHelper.hydrate<CommitStatus>(await endpoint().call({
|
|
93
93
|
params: { transition }, query: { wait: 0 }, timeout: opts?.timeout,
|
|
94
|
-
})
|
|
94
|
+
}))
|
|
95
95
|
|
|
96
96
|
const hold = async (transition: string, wait: number, signal: AbortSignal): Promise<CommitStatus> => {
|
|
97
97
|
try {
|
|
98
|
-
return await endpoint().call({
|
|
98
|
+
return planningReplyHelper.hydrate<CommitStatus>(await endpoint().call({
|
|
99
99
|
params: { transition }, query: { wait }, timeout: wait * 1000 + LONG_POLL_GRACE, signal,
|
|
100
|
-
})
|
|
100
|
+
}))
|
|
101
101
|
} catch (e) {
|
|
102
102
|
if (signal.aborted || e instanceof PlanningError) {
|
|
103
103
|
throw e
|
package/src/definitions.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { BasicConfig, BasicContext } from '@owlmeans/context'
|
|
2
|
-
import { PlanningError, PlanningUnsupported, SchemaWriteMode, scopedSchemaHelper } from '@owlmeans/planning'
|
|
2
|
+
import { planningReplyHelper, PlanningError, PlanningUnsupported, SchemaWriteMode, scopedSchemaHelper } from '@owlmeans/planning'
|
|
3
3
|
import type {
|
|
4
|
-
PlanningProtocols, SchemaDefineReply, SchemaDefineRequest, ScopedSchemaRegistry,
|
|
4
|
+
PlanningProtocols, SchemaDefineReply, SchemaDefineRequest, ScopedSchemaBundle, ScopedSchemaRegistry,
|
|
5
5
|
} from '@owlmeans/planning'
|
|
6
6
|
import type { RemoteDefinitions, RemoteDefinitionsOptions } from './types.js'
|
|
7
7
|
|
|
@@ -36,7 +36,7 @@ export const makeRemoteDefinitions = <C extends BasicConfig, T extends BasicCont
|
|
|
36
36
|
let entry = cache.get(key)
|
|
37
37
|
if (entry == null) {
|
|
38
38
|
const loading = (async () => {
|
|
39
|
-
const bundle = await context.entrypoint(protocols.schema.list).call({ query: project != null ? { project } : {}, timeout: opts.timeout })
|
|
39
|
+
const bundle = planningReplyHelper.hydrate<ScopedSchemaBundle>(await context.entrypoint(protocols.schema.list).call({ query: project != null ? { project } : {}, timeout: opts.timeout }))
|
|
40
40
|
if ((opts.scopeKey?.() ?? '') !== identity) throw new PlanningError('client:scope-changed')
|
|
41
41
|
return scopedSchemaHelper.scopedRegistryOf(bundle)
|
|
42
42
|
})()
|
|
@@ -54,7 +54,7 @@ export const makeRemoteDefinitions = <C extends BasicConfig, T extends BasicCont
|
|
|
54
54
|
|
|
55
55
|
const write = async (request: SchemaDefineRequest): Promise<SchemaDefineReply> => {
|
|
56
56
|
try {
|
|
57
|
-
return await context.entrypoint(define).call({ body: clean(request), timeout: opts.timeout })
|
|
57
|
+
return planningReplyHelper.hydrate<SchemaDefineReply>(await context.entrypoint(define).call({ body: clean(request), timeout: opts.timeout }))
|
|
58
58
|
} finally {
|
|
59
59
|
invalidate()
|
|
60
60
|
}
|
package/src/facade.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import type { ListResult } from '@owlmeans/resource'
|
|
1
2
|
import type { BasicConfig, BasicContext } from '@owlmeans/context'
|
|
2
3
|
import {
|
|
3
4
|
CommitFailed, CommitState, DEFAULT_COMMIT_TIMEOUT, modelOf, PlanningError, PlanningUnsupported, wireHelper,
|
|
4
|
-
WorkcardKind, WorkcardNotFound,
|
|
5
|
+
WorkcardKind, WorkcardNotFound, planningReplyHelper,
|
|
5
6
|
} from '@owlmeans/planning'
|
|
6
7
|
import type {
|
|
7
|
-
PlanningFacade, PlanningProtocols, PlanningScope, TransitionReceipt,
|
|
8
|
-
TransitionReceiptView, Workcard, WorkcardModel,
|
|
8
|
+
PlanningFacade, PlanningProtocols, PlanningScope, PlanningReply, TransitionReceipt,
|
|
9
|
+
TransitionReceiptView, Workcard, WorkcardModel, Specification, Relationship, Transition, SpecificationRevisionList, SummaryView,
|
|
9
10
|
} from '@owlmeans/planning'
|
|
10
11
|
import { makeRemoteResourceFacade } from './resources.js'
|
|
11
12
|
import { planningMirrorOf } from './events.js'
|
|
@@ -31,11 +32,11 @@ export const makeRemoteFacade = <C extends BasicConfig, T extends BasicContext<C
|
|
|
31
32
|
const timeout = opts.timeout
|
|
32
33
|
const { commits } = opts
|
|
33
34
|
|
|
34
|
-
const scopedCall = async <R>(run: () => Promise<R
|
|
35
|
+
const scopedCall = async <R>(run: () => Promise<PlanningReply<R>>): Promise<R> => {
|
|
35
36
|
const key = opts.scopeKey?.()
|
|
36
37
|
const reply = await run()
|
|
37
38
|
if (opts.scopeKey?.() !== key) throw new PlanningError('client:scope-changed')
|
|
38
|
-
return reply
|
|
39
|
+
return planningReplyHelper.hydrate<R>(reply)
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
const receiptOf = (view: TransitionReceiptView): TransitionReceipt => {
|
|
@@ -68,7 +69,7 @@ export const makeRemoteFacade = <C extends BasicConfig, T extends BasicContext<C
|
|
|
68
69
|
schemas: opts.schemas,
|
|
69
70
|
|
|
70
71
|
cards: {
|
|
71
|
-
get: async id => await scopedCall(() => context.entrypoint(protocols.card.get).call({ params: { id }, timeout })),
|
|
72
|
+
get: async id => await scopedCall<Workcard>(() => context.entrypoint(protocols.card.get).call({ params: { id }, timeout })),
|
|
72
73
|
|
|
73
74
|
load: async id => {
|
|
74
75
|
try {
|
|
@@ -81,41 +82,41 @@ export const makeRemoteFacade = <C extends BasicConfig, T extends BasicContext<C
|
|
|
81
82
|
}
|
|
82
83
|
},
|
|
83
84
|
|
|
84
|
-
list: async query => await scopedCall(() => context.entrypoint(protocols.card.list).call({
|
|
85
|
+
list: async query => await scopedCall<ListResult<Workcard>>(() => context.entrypoint(protocols.card.list).call({
|
|
85
86
|
query: wireHelper.encodeWorkcardQuery(query), timeout,
|
|
86
87
|
})),
|
|
87
88
|
|
|
88
89
|
count: async query => {
|
|
89
90
|
const { page: _page, size: _size, sort: _sort, ...where } = query ?? {}
|
|
90
|
-
const answer = await scopedCall(() => context.entrypoint(protocols.card.list).call({
|
|
91
|
+
const answer = await scopedCall<ListResult<Workcard>>(() => context.entrypoint(protocols.card.list).call({
|
|
91
92
|
query: wireHelper.encodeWorkcardQuery({ ...where, page: 0, size: 1 }), timeout,
|
|
92
93
|
}))
|
|
93
94
|
|
|
94
95
|
return answer.total
|
|
95
96
|
},
|
|
96
97
|
|
|
97
|
-
summary: async (parents, query) => await scopedCall(() => context.entrypoint(protocols.card.summary).call({
|
|
98
|
+
summary: async (parents, query) => await scopedCall<SummaryView>(() => context.entrypoint(protocols.card.summary).call({
|
|
98
99
|
query: wireHelper.encodeSummaryQuery({ ...query, parents }), timeout,
|
|
99
100
|
})),
|
|
100
101
|
},
|
|
101
102
|
|
|
102
103
|
specifications: {
|
|
103
104
|
current: async (parent, category) => {
|
|
104
|
-
const answer = await scopedCall(() => context.entrypoint(protocols.card.specifications).call({
|
|
105
|
+
const answer = await scopedCall<ListResult<Specification>>(() => context.entrypoint(protocols.card.specifications).call({
|
|
105
106
|
params: { id: parent }, query: wireHelper.encodeSpecificationQuery({ category }), timeout,
|
|
106
107
|
}))
|
|
107
108
|
|
|
108
109
|
return answer.items[0] ?? null
|
|
109
110
|
},
|
|
110
111
|
|
|
111
|
-
list: async (parent, query) => await scopedCall(() => context.entrypoint(protocols.card.specifications).call({
|
|
112
|
+
list: async (parent, query) => await scopedCall<ListResult<Specification>>(() => context.entrypoint(protocols.card.specifications).call({
|
|
112
113
|
params: { id: parent }, query: wireHelper.encodeSpecificationQuery(query), timeout,
|
|
113
114
|
})),
|
|
114
115
|
|
|
115
|
-
get: async id => await scopedCall(() => context.entrypoint(protocols.spec.get).call({ params: { id }, timeout })),
|
|
116
|
+
get: async id => await scopedCall<Specification>(() => context.entrypoint(protocols.spec.get).call({ params: { id }, timeout })),
|
|
116
117
|
|
|
117
118
|
revisions: async (id, limit) => {
|
|
118
|
-
const answer = await scopedCall(() => context.entrypoint(protocols.spec.revisions).call({
|
|
119
|
+
const answer = await scopedCall<SpecificationRevisionList>(() => context.entrypoint(protocols.spec.revisions).call({
|
|
119
120
|
params: { id }, query: limit != null ? { limit } : {}, timeout,
|
|
120
121
|
}))
|
|
121
122
|
|
|
@@ -124,13 +125,13 @@ export const makeRemoteFacade = <C extends BasicConfig, T extends BasicContext<C
|
|
|
124
125
|
},
|
|
125
126
|
|
|
126
127
|
relationships: {
|
|
127
|
-
list: async query => await scopedCall(() => context.entrypoint(protocols.link.list).call({
|
|
128
|
+
list: async query => await scopedCall<ListResult<Relationship>>(() => context.entrypoint(protocols.link.list).call({
|
|
128
129
|
query: wireHelper.encodeRelationshipQuery(query), timeout,
|
|
129
130
|
})),
|
|
130
131
|
},
|
|
131
132
|
|
|
132
133
|
transitions: {
|
|
133
|
-
get: async id => await scopedCall(() => context.entrypoint(protocols.transition.get).call({
|
|
134
|
+
get: async id => await scopedCall<Transition>(() => context.entrypoint(protocols.transition.get).call({
|
|
134
135
|
params: { transition: id }, timeout,
|
|
135
136
|
})),
|
|
136
137
|
|
|
@@ -140,7 +141,7 @@ export const makeRemoteFacade = <C extends BasicConfig, T extends BasicContext<C
|
|
|
140
141
|
throw new PlanningUnsupported('client:transitions-without-card')
|
|
141
142
|
}
|
|
142
143
|
|
|
143
|
-
return await scopedCall(() => context.entrypoint(protocols.card.transitions).call({
|
|
144
|
+
return await scopedCall<ListResult<Transition>>(() => context.entrypoint(protocols.card.transitions).call({
|
|
144
145
|
params: { id: query.card! }, query: wireHelper.encodeTransitionQuery(query), timeout,
|
|
145
146
|
}))
|
|
146
147
|
},
|
|
@@ -151,7 +152,7 @@ export const makeRemoteFacade = <C extends BasicConfig, T extends BasicContext<C
|
|
|
151
152
|
execute: async (exec, executeOpts) => {
|
|
152
153
|
// Neither the actor nor a hold travels: the server decides who wrote, and the wait is ours.
|
|
153
154
|
const { actor: _actor, ...body } = exec
|
|
154
|
-
const view = await scopedCall(() => context.entrypoint(protocols.execute).call({ body, timeout }))
|
|
155
|
+
const view = await scopedCall<TransitionReceiptView>(() => context.entrypoint(protocols.execute).call({ body, timeout }))
|
|
155
156
|
const stores = opts.stores?.()
|
|
156
157
|
if (stores != null) {
|
|
157
158
|
await planningMirrorOf(stores).applyReceipt(view)
|
package/src/resources.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BasicContext, BasicConfig } from '@owlmeans/context'
|
|
2
|
-
import { PlanningError, PlanningUnsupported, WorkcardNotFound } from '@owlmeans/planning'
|
|
3
|
-
import type { Assignee, Team, Comment, CommentMention, PlanningResourceProtocols, PlanningProtocols, PlanningResourceCommand, PlanningResourceFacade, PlanningRecord } from '@owlmeans/planning'
|
|
2
|
+
import { planningReplyHelper, PlanningError, PlanningUnsupported, WorkcardNotFound } from '@owlmeans/planning'
|
|
3
|
+
import type { Assignee, Team, Comment, CommentMention, PlanningResourceProtocols, PlanningProtocols, PlanningResourceCommand, PlanningResourceFacade, PlanningRecord, PlanningResourceReply } from '@owlmeans/planning'
|
|
4
4
|
import type { RemoteFacadeOptions } from './types.js'
|
|
5
5
|
import type { ListResult } from '@owlmeans/resource'
|
|
6
6
|
|
|
@@ -21,7 +21,7 @@ export const makeRemoteResourceFacade = <C extends BasicConfig, T extends BasicC
|
|
|
21
21
|
}
|
|
22
22
|
const get = async (name: 'assignees' | 'teams' | 'comments' | 'mentions', id: string) => {
|
|
23
23
|
const key = opts.scopeKey?.()
|
|
24
|
-
const row = await context.entrypoint(tree(name).get).call({ params: { id }, timeout: opts.timeout })
|
|
24
|
+
const row = planningReplyHelper.hydrate<PlanningRecord>(await context.entrypoint(tree(name).get).call({ params: { id }, timeout: opts.timeout }))
|
|
25
25
|
if (opts.scopeKey?.() !== key) throw new PlanningError('client:scope-changed')
|
|
26
26
|
await mirror(name, row)
|
|
27
27
|
return row
|
|
@@ -31,13 +31,13 @@ export const makeRemoteResourceFacade = <C extends BasicConfig, T extends BasicC
|
|
|
31
31
|
}
|
|
32
32
|
const list = async (name: 'assignees' | 'teams' | 'comments' | 'mentions', query?: object) => {
|
|
33
33
|
const key = opts.scopeKey?.()
|
|
34
|
-
const rows = await context.entrypoint(tree(name).list).call({ query: { query: JSON.stringify(query ?? {}) }, timeout: opts.timeout })
|
|
34
|
+
const rows = planningReplyHelper.hydrate<ListResult<PlanningRecord>>(await context.entrypoint(tree(name).list).call({ query: { query: JSON.stringify(query ?? {}) }, timeout: opts.timeout }))
|
|
35
35
|
if (opts.scopeKey?.() !== key) throw new PlanningError('client:scope-changed')
|
|
36
36
|
return rows
|
|
37
37
|
}
|
|
38
38
|
const write = async (name: 'assignees' | 'teams' | 'comments' | 'mentions', body: PlanningResourceCommand) => {
|
|
39
39
|
const key = opts.scopeKey?.()
|
|
40
|
-
const answer = await context.entrypoint(tree(name).write).call({ body, timeout: opts.timeout })
|
|
40
|
+
const answer = planningReplyHelper.hydrate<PlanningResourceReply>(await context.entrypoint(tree(name).write).call({ body, timeout: opts.timeout }))
|
|
41
41
|
if (opts.scopeKey?.() !== key) throw new PlanningError('client:scope-changed')
|
|
42
42
|
if (answer != null && !Array.isArray(answer)) await mirror(name, answer)
|
|
43
43
|
if (name === 'mentions' && Array.isArray(answer)) for (const row of answer) if (typeof row !== 'string') await mirror(name, row)
|
package/tests/context.ts
CHANGED
|
@@ -136,6 +136,7 @@ const entityOf = (id: string): ResolvedEntity => ({ id, slug: id, iamKey: id })
|
|
|
136
136
|
export interface Call {
|
|
137
137
|
alias: string
|
|
138
138
|
query: Record<string, unknown>
|
|
139
|
+
reply?: unknown
|
|
139
140
|
}
|
|
140
141
|
|
|
141
142
|
export interface SuiteOptions extends Partial<Pick<PlanningClientOptions, 'poll' | 'schemas' | 'scopeKey'>> {
|
|
@@ -165,6 +166,7 @@ export interface Suite {
|
|
|
165
166
|
/** The client's facade. */
|
|
166
167
|
planning: PlanningFacade
|
|
167
168
|
calls: Call[]
|
|
169
|
+
frames: unknown[]
|
|
168
170
|
sockets: () => number
|
|
169
171
|
project: (title?: string) => Promise<Project>
|
|
170
172
|
story: (project: string, title?: string, fields?: Record<string, unknown>) => Promise<Workcard>
|
|
@@ -175,7 +177,7 @@ const wire = <T>(value: T): T => value === undefined ? value : JSON.parse(JSON.s
|
|
|
175
177
|
type Handled = { handle?: EntrypointHandler }
|
|
176
178
|
|
|
177
179
|
/** A WebSocket-shaped pipe for the server handler, wired to a client connection reading its frames. */
|
|
178
|
-
const socketPair = (): { server: unknown, client: Connection } => {
|
|
180
|
+
const socketPair = (frames: unknown[]): { server: unknown, client: Connection } => {
|
|
179
181
|
const handlers = new Map<string, Set<(...args: unknown[]) => unknown>>()
|
|
180
182
|
const emit = async (event: string, ...args: unknown[]): Promise<void> => {
|
|
181
183
|
for (const handler of [...(handlers.get(event) ?? [])]) {
|
|
@@ -184,7 +186,7 @@ const socketPair = (): { server: unknown, client: Connection } => {
|
|
|
184
186
|
}
|
|
185
187
|
const client = createBasicConnection()
|
|
186
188
|
const server = {
|
|
187
|
-
send: async (data: string) => { await client.receive(data) },
|
|
189
|
+
send: async (data: string) => { frames.push(JSON.parse(data)); await client.receive(data) },
|
|
188
190
|
close: async () => { await emit('close', 1000) },
|
|
189
191
|
on: (event: string, handler: (...args: unknown[]) => unknown) => {
|
|
190
192
|
handlers.set(event, (handlers.get(event) ?? new Set()).add(handler))
|
|
@@ -217,6 +219,7 @@ export const makeSuite = async (opts: SuiteOptions = {}): Promise<Suite> => {
|
|
|
217
219
|
if (opts.resources) author = (await (server as unknown as { planning: () => PlanningService }).planning().for({ entityId }).assignees.create({ nickname: 'commenter', type: 'test:participant', kind: AssigneeKind.Human, authentication: { provider: 'tests', externalId: PROFILE_ID } })).id
|
|
218
220
|
|
|
219
221
|
const calls: Call[] = []
|
|
222
|
+
const frames: unknown[] = []
|
|
220
223
|
let opened = 0
|
|
221
224
|
|
|
222
225
|
const requestOf = (req: Partial<AbstractRequest>, body?: unknown): AbstractRequest => ({
|
|
@@ -249,7 +252,7 @@ export const makeSuite = async (opts: SuiteOptions = {}): Promise<Suite> => {
|
|
|
249
252
|
} catch (e) {
|
|
250
253
|
reply.reject(e as Error)
|
|
251
254
|
}
|
|
252
|
-
const call = { alias: req.alias, query: request.query as Record<string, unknown
|
|
255
|
+
const call = { alias: req.alias, query: request.query as Record<string, unknown>, reply: wire(reply.value) }
|
|
253
256
|
calls.push(call)
|
|
254
257
|
await opts.after?.(call)
|
|
255
258
|
if (reply.error != null) {
|
|
@@ -270,7 +273,7 @@ export const makeSuite = async (opts: SuiteOptions = {}): Promise<Suite> => {
|
|
|
270
273
|
...(opts.socket === true
|
|
271
274
|
? {
|
|
272
275
|
socket: async (protocol, request) => {
|
|
273
|
-
const pair = socketPair()
|
|
276
|
+
const pair = socketPair(frames)
|
|
274
277
|
await server.entrypoint<BasicEntrypoint & Handled>(protocol.alias).handle!(
|
|
275
278
|
requestOf({ alias: protocol.alias, query: request?.query ?? {} }, pair.server), provideResponse()
|
|
276
279
|
)
|
|
@@ -305,6 +308,7 @@ export const makeSuite = async (opts: SuiteOptions = {}): Promise<Suite> => {
|
|
|
305
308
|
client,
|
|
306
309
|
planning,
|
|
307
310
|
calls,
|
|
311
|
+
frames,
|
|
308
312
|
sockets: () => opened,
|
|
309
313
|
project: async (title = 'Board') => await committed(local.execute({
|
|
310
314
|
card: { kind: WorkcardKind.Project, type: PROJECT, title },
|
package/tests/events.spec.ts
CHANGED
|
@@ -32,7 +32,7 @@ describe('@owlmeans/client-planning — commit folds', () => {
|
|
|
32
32
|
|
|
33
33
|
await mirror.applyCommitEvent(frameOf(receipt.transition), suite.planning)
|
|
34
34
|
|
|
35
|
-
expect(await stores.cards.get(receipt.transition.card)).toEqual(receipt.card
|
|
35
|
+
expect(await stores.cards.get(receipt.transition.card)).toEqual({ ...receipt.card!, entityId: '' })
|
|
36
36
|
expect((await stores.commits.get(receipt.transition.id!)).state).toBe(CommitState.Committed)
|
|
37
37
|
})
|
|
38
38
|
|
package/tests/facade.spec.ts
CHANGED
|
@@ -19,7 +19,8 @@ describe('@owlmeans/client-planning — remote facade', () => {
|
|
|
19
19
|
}
|
|
20
20
|
const remote = await suite.planning.cards.list(query)
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
const native = await suite.local.cards.list(query)
|
|
23
|
+
expect(remote).toEqual({ ...native, items: native.items.map(card => ({ ...card, entityId: '' })) })
|
|
23
24
|
expect(remote.items.map(card => card.title)).toEqual(['Alpha login'])
|
|
24
25
|
expect(await suite.planning.cards.count({ parent: project.id })).toBe(3)
|
|
25
26
|
expect(await suite.planning.cards.summary([project.id!])).toEqual(await suite.local.cards.summary([project.id!]))
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { expect, test } from 'bun:test'
|
|
2
|
+
import { AssigneeKind, mentionHelper, TransitionAction, WorkcardKind } from '@owlmeans/planning'
|
|
3
|
+
import { ENTITY_ID, makeSuite, STORY_FLOW } from './context.js'
|
|
4
|
+
|
|
5
|
+
test('stock HTTP and socket replies omit storage organization metadata and preserve usable client records', async () => {
|
|
6
|
+
const suite = await makeSuite({ resources: true, socket: true })
|
|
7
|
+
const p = suite.planning
|
|
8
|
+
const unsubscribe = await p.commits.subscribe(() => {})
|
|
9
|
+
const project = await suite.project()
|
|
10
|
+
const fields = { scope: { entityId: 'custom-field-value' }, card: { entityId: 'opaque-field-value' } }
|
|
11
|
+
const created = await p.execute({ action: TransitionAction.Create,
|
|
12
|
+
card: { kind: WorkcardKind.Project, type: project.type, title: 'Remote project', fields },
|
|
13
|
+
}, { wait: true })
|
|
14
|
+
expect(created.card?.entityId).toBe('')
|
|
15
|
+
expect(created.transition.entityId).toBe('')
|
|
16
|
+
expect(created.card?.fields).toEqual(fields)
|
|
17
|
+
expect((await suite.local.cards.get(created.card!.id!)).entityId).toBe(ENTITY_ID)
|
|
18
|
+
const card = await suite.story(project.id!)
|
|
19
|
+
await p.cards.get(card.id!)
|
|
20
|
+
await p.cards.list({ size: 0 })
|
|
21
|
+
await p.transitions.get(created.transition.id!)
|
|
22
|
+
await p.transitions.list({ card: created.card!.id! })
|
|
23
|
+
await p.commits.status(created.transition.id!)
|
|
24
|
+
const model = await p.model(project.id!)
|
|
25
|
+
await model.write('brief', '# Saved', { wait: true })
|
|
26
|
+
const specification = await p.specifications.current(project.id!, 'brief')
|
|
27
|
+
await p.specifications.get(specification!.id!)
|
|
28
|
+
await p.specifications.list(project.id!)
|
|
29
|
+
await p.specifications.revisions(specification!.id!)
|
|
30
|
+
const actor = await p.assignees.create({ nickname: 'wire-reader', kind: AssigneeKind.Human,
|
|
31
|
+
type: 'test:participant', authentication: { provider: 'external', externalId: 'subject' } })
|
|
32
|
+
const team = await p.teams.create({ name: 'Wire team' })
|
|
33
|
+
await p.teams.addMember(team.id!, actor.id!)
|
|
34
|
+
await p.teams.attach(team.id!, project.id!)
|
|
35
|
+
for (const name of ['assignees', 'teams'] as const) {
|
|
36
|
+
const id = name === 'assignees' ? actor.id! : team.id!
|
|
37
|
+
await p[name].get(id)
|
|
38
|
+
await p[name].list()
|
|
39
|
+
}
|
|
40
|
+
expect((await p.teams.members(team.id!))[0]?.entityId).toBe('')
|
|
41
|
+
expect((await p.teams.assignees(project.id!))[0]?.id).toBe(actor.id)
|
|
42
|
+
expect(await p.teams.projects(team.id!)).toEqual([project.id!])
|
|
43
|
+
const comment = await p.comments.create({ card: card.id!, body: mentionHelper.encode(actor.id!, actor.nickname) })
|
|
44
|
+
await p.comments.get(comment.id!)
|
|
45
|
+
await p.comments.list()
|
|
46
|
+
const mentions = await p.mentions.list()
|
|
47
|
+
await p.mentions.get(mentions.items[0]!.id!)
|
|
48
|
+
await p.mentions.rebuild(comment.id!)
|
|
49
|
+
await p.relationships.list()
|
|
50
|
+
const definitions = await p.definitions!.define({ types: [{ type: 'test:wire', kind: WorkcardKind.Card,
|
|
51
|
+
version: 1, fields: { type: 'object', properties: { scope: { type: 'object', properties: { entityId: { type: 'string' } } } } },
|
|
52
|
+
flows: [STORY_FLOW], specifications: [],
|
|
53
|
+
}] }, { project: project.id })
|
|
54
|
+
expect(definitions[0]?.entityId).toBe('')
|
|
55
|
+
expect((await p.definitions!.bundle(project.id)).scope?.entityId).toBe('')
|
|
56
|
+
|
|
57
|
+
// Check the actual server responses before the client hydrates its advisory metadata.
|
|
58
|
+
for (const call of suite.calls) {
|
|
59
|
+
expect(JSON.stringify(call.reply) ?? '').not.toContain(ENTITY_ID)
|
|
60
|
+
const check = (value: unknown): void => {
|
|
61
|
+
if (Array.isArray(value)) { value.forEach(check); return }
|
|
62
|
+
if (value == null || typeof value !== 'object') return
|
|
63
|
+
const object = value as Record<string, unknown>
|
|
64
|
+
expect(object).not.toHaveProperty('entityId')
|
|
65
|
+
for (const key of ['items', 'records', 'card', 'record', 'transition', 'bundle', 'scope']) check(object[key])
|
|
66
|
+
}
|
|
67
|
+
check(call.reply)
|
|
68
|
+
}
|
|
69
|
+
const frames = suite.frames as Array<{ payload?: Record<string, unknown> }>
|
|
70
|
+
const commitFrames = frames.filter(frame => frame.payload?.transition != null)
|
|
71
|
+
expect(commitFrames.length).toBeGreaterThan(0)
|
|
72
|
+
for (const frame of commitFrames) {
|
|
73
|
+
expect(JSON.stringify(frame)).not.toContain(ENTITY_ID)
|
|
74
|
+
expect(frame.payload).not.toHaveProperty('entityId')
|
|
75
|
+
if (frame.payload?.record != null) expect(frame.payload.record).not.toHaveProperty('entityId')
|
|
76
|
+
}
|
|
77
|
+
expect((await suite.client.planningStores!().assignees.get(actor.id!)).entityId).toBe('')
|
|
78
|
+
expect((await suite.local.assignees.get(actor.id!)).entityId).toBe(ENTITY_ID)
|
|
79
|
+
unsubscribe()
|
|
80
|
+
await suite.client.planning().close()
|
|
81
|
+
})
|
package/tests/resources.spec.ts
CHANGED
|
@@ -17,7 +17,7 @@ describe('@owlmeans/client-planning — separate resources over real protocol ha
|
|
|
17
17
|
const comment = await p.comments.create({ card: card.id!, body: mentionHelper.encode(actor.id!, actor.nickname) })
|
|
18
18
|
expect(comment.author).toBe(suite.local.scope.assigneeId!)
|
|
19
19
|
const mentions = await p.mentions.list({ comment: comment.id })
|
|
20
|
-
expect(mentions.items.map(row => row.assignee)).toEqual([actor.id])
|
|
20
|
+
expect(mentions.items.map(row => row.assignee)).toEqual([actor.id!])
|
|
21
21
|
expect((await p.mentions.get(mentions.items[0].id!)).revision).toBe(1)
|
|
22
22
|
await p.comments.update(comment.id!, { body: 'no mentions' }, { version: 1 })
|
|
23
23
|
expect(await p.mentions.load(mentions.items[0].id!)).toBeNull()
|