@relayfile/adapter-linear 0.1.17 → 0.1.19
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/__tests__/path-mapper.test.d.ts +2 -0
- package/dist/__tests__/path-mapper.test.d.ts.map +1 -0
- package/dist/__tests__/path-mapper.test.js +61 -0
- package/dist/__tests__/path-mapper.test.js.map +1 -0
- package/dist/path-mapper.d.ts +2 -0
- package/dist/path-mapper.d.ts.map +1 -1
- package/dist/path-mapper.js +38 -0
- package/dist/path-mapper.js.map +1 -1
- package/dist/writeback.js +43 -22
- package/dist/writeback.js.map +1 -1
- package/dist/writeback.test.js +37 -0
- package/dist/writeback.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-mapper.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/path-mapper.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { computeLinearPath, normalizeLinearObjectType, normalizeNangoLinearModel, tryNormalizeLinearObjectType, } from '../path-mapper.js';
|
|
4
|
+
describe('linear path-mapper', () => {
|
|
5
|
+
describe('normalizeLinearObjectType', () => {
|
|
6
|
+
it('accepts canonical types', () => {
|
|
7
|
+
assert.equal(normalizeLinearObjectType('issue'), 'issue');
|
|
8
|
+
assert.equal(normalizeLinearObjectType('TEAM'), 'team');
|
|
9
|
+
});
|
|
10
|
+
it('accepts plural aliases', () => {
|
|
11
|
+
assert.equal(normalizeLinearObjectType('issues'), 'issue');
|
|
12
|
+
assert.equal(normalizeLinearObjectType('teams'), 'team');
|
|
13
|
+
});
|
|
14
|
+
it('accepts Nango-style PascalCase model names', () => {
|
|
15
|
+
assert.equal(normalizeLinearObjectType('LinearTeam'), 'team');
|
|
16
|
+
assert.equal(normalizeLinearObjectType('LinearUser'), 'user');
|
|
17
|
+
assert.equal(normalizeLinearObjectType('LinearIssue'), 'issue');
|
|
18
|
+
assert.equal(normalizeLinearObjectType('LinearComment'), 'comment');
|
|
19
|
+
assert.equal(normalizeLinearObjectType('LinearCycle'), 'cycle');
|
|
20
|
+
assert.equal(normalizeLinearObjectType('LinearMilestone'), 'milestone');
|
|
21
|
+
assert.equal(normalizeLinearObjectType('LinearProject'), 'project');
|
|
22
|
+
assert.equal(normalizeLinearObjectType('LinearRoadmap'), 'roadmap');
|
|
23
|
+
});
|
|
24
|
+
it('throws on unknown types', () => {
|
|
25
|
+
assert.throws(() => normalizeLinearObjectType('flarb'));
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe('tryNormalizeLinearObjectType', () => {
|
|
29
|
+
it('returns undefined on unknown types', () => {
|
|
30
|
+
assert.equal(tryNormalizeLinearObjectType('flarb'), undefined);
|
|
31
|
+
});
|
|
32
|
+
it('returns the resolved type for known input', () => {
|
|
33
|
+
assert.equal(tryNormalizeLinearObjectType('LinearIssue'), 'issue');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('normalizeNangoLinearModel', () => {
|
|
37
|
+
// Each Nango sync emits a single PascalCase model — see
|
|
38
|
+
// cloud/nango-integrations/linear-relay/syncs/*.ts. This test pins those
|
|
39
|
+
// contracts so any future sync rename surfaces here as a failure.
|
|
40
|
+
it('maps every Nango linear-relay sync model', () => {
|
|
41
|
+
assert.equal(normalizeNangoLinearModel('LinearComment'), 'comment');
|
|
42
|
+
assert.equal(normalizeNangoLinearModel('LinearCycle'), 'cycle');
|
|
43
|
+
assert.equal(normalizeNangoLinearModel('LinearIssue'), 'issue');
|
|
44
|
+
assert.equal(normalizeNangoLinearModel('LinearMilestone'), 'milestone');
|
|
45
|
+
assert.equal(normalizeNangoLinearModel('LinearProject'), 'project');
|
|
46
|
+
assert.equal(normalizeNangoLinearModel('LinearRoadmap'), 'roadmap');
|
|
47
|
+
assert.equal(normalizeNangoLinearModel('LinearTeam'), 'team');
|
|
48
|
+
assert.equal(normalizeNangoLinearModel('LinearUser'), 'user');
|
|
49
|
+
});
|
|
50
|
+
it('falls back to alias-map normalization for non-Nango input', () => {
|
|
51
|
+
assert.equal(normalizeNangoLinearModel('issues'), 'issue');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('computeLinearPath', () => {
|
|
55
|
+
it('produces Nango-driven paths from PascalCase model names', () => {
|
|
56
|
+
assert.equal(computeLinearPath('LinearTeam', '50cf92f3-f53c-4ab6-bf05-ea76ebd21692'), '/linear/teams/50cf92f3-f53c-4ab6-bf05-ea76ebd21692.json');
|
|
57
|
+
assert.equal(computeLinearPath('LinearUser', 'usr_123'), '/linear/users/usr_123.json');
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=path-mapper.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-mapper.test.js","sourceRoot":"","sources":["../../src/__tests__/path-mapper.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC;AAE3B,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC,CAAC;YACxE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,wDAAwD;QACxD,yEAAyE;QACzE,kEAAkE;QAClE,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC,CAAC;YACxE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;YACpE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,CAAC,KAAK,CACV,iBAAiB,CAAC,YAAY,EAAE,sCAAsC,CAAC,EACvE,yDAAyD,CAC1D,CAAC;YACF,MAAM,CAAC,KAAK,CACV,iBAAiB,CAAC,YAAY,EAAE,SAAS,CAAC,EAC1C,4BAA4B,CAC7B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/path-mapper.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export declare const LINEAR_OBJECT_TYPES: readonly ["comment", "cycle", "issue",
|
|
|
3
3
|
export type LinearPathObjectType = (typeof LINEAR_OBJECT_TYPES)[number];
|
|
4
4
|
export declare function encodeLinearPathSegment(value: string): string;
|
|
5
5
|
export declare function normalizeLinearObjectType(objectType: string): LinearPathObjectType;
|
|
6
|
+
export declare function tryNormalizeLinearObjectType(objectType: string): LinearPathObjectType | undefined;
|
|
7
|
+
export declare function normalizeNangoLinearModel(model: string): LinearPathObjectType;
|
|
6
8
|
export declare function linearIssuePath(issueId: string, title?: string): string;
|
|
7
9
|
export declare function linearCommentPath(commentId: string): string;
|
|
8
10
|
export declare function linearProjectPath(projectId: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-mapper.d.ts","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C,eAAO,MAAM,mBAAmB,2FAStB,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"path-mapper.d.ts","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C,eAAO,MAAM,mBAAmB,2FAStB,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAyDxE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AA0BD,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,CAOlF;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAMjG;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAI7E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAsB9F"}
|
package/dist/path-mapper.js
CHANGED
|
@@ -12,23 +12,47 @@ export const LINEAR_OBJECT_TYPES = [
|
|
|
12
12
|
const OBJECT_TYPE_ALIASES = {
|
|
13
13
|
comment: 'comment',
|
|
14
14
|
comments: 'comment',
|
|
15
|
+
linearcomment: 'comment',
|
|
15
16
|
cycle: 'cycle',
|
|
16
17
|
cycles: 'cycle',
|
|
18
|
+
linearcycle: 'cycle',
|
|
17
19
|
issue: 'issue',
|
|
18
20
|
issues: 'issue',
|
|
21
|
+
linearissue: 'issue',
|
|
19
22
|
milestone: 'milestone',
|
|
20
23
|
milestones: 'milestone',
|
|
21
24
|
projectmilestone: 'milestone',
|
|
22
25
|
projectmilestones: 'milestone',
|
|
26
|
+
linearmilestone: 'milestone',
|
|
23
27
|
project: 'project',
|
|
24
28
|
projects: 'project',
|
|
25
29
|
linearproject: 'project',
|
|
26
30
|
roadmap: 'roadmap',
|
|
27
31
|
roadmaps: 'roadmap',
|
|
32
|
+
linearroadmap: 'roadmap',
|
|
28
33
|
team: 'team',
|
|
29
34
|
teams: 'team',
|
|
35
|
+
linearteam: 'team',
|
|
30
36
|
user: 'user',
|
|
31
37
|
users: 'user',
|
|
38
|
+
linearuser: 'user',
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Nango sync record `model` names → canonical Linear object types. The Nango
|
|
42
|
+
* `linear-relay` integration emits records under these PascalCase model names
|
|
43
|
+
* (see `cloud/nango-integrations/linear-relay/syncs/*.ts`). Resolving them
|
|
44
|
+
* here lets the cloud's record-writer turn a Nango payload into a relayfile
|
|
45
|
+
* path without hardcoding the mapping at the dispatch site.
|
|
46
|
+
*/
|
|
47
|
+
const NANGO_MODEL_MAP = {
|
|
48
|
+
LinearComment: 'comment',
|
|
49
|
+
LinearCycle: 'cycle',
|
|
50
|
+
LinearIssue: 'issue',
|
|
51
|
+
LinearMilestone: 'milestone',
|
|
52
|
+
LinearProject: 'project',
|
|
53
|
+
LinearRoadmap: 'roadmap',
|
|
54
|
+
LinearTeam: 'team',
|
|
55
|
+
LinearUser: 'user',
|
|
32
56
|
};
|
|
33
57
|
function assertNonEmptySegment(value, label) {
|
|
34
58
|
const trimmed = value.trim();
|
|
@@ -69,6 +93,20 @@ export function normalizeLinearObjectType(objectType) {
|
|
|
69
93
|
}
|
|
70
94
|
return mapped;
|
|
71
95
|
}
|
|
96
|
+
export function tryNormalizeLinearObjectType(objectType) {
|
|
97
|
+
try {
|
|
98
|
+
return normalizeLinearObjectType(objectType);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export function normalizeNangoLinearModel(model) {
|
|
105
|
+
const direct = NANGO_MODEL_MAP[model];
|
|
106
|
+
if (direct)
|
|
107
|
+
return direct;
|
|
108
|
+
return normalizeLinearObjectType(model);
|
|
109
|
+
}
|
|
72
110
|
export function linearIssuePath(issueId, title) {
|
|
73
111
|
return `${LINEAR_PATH_ROOT}/issues/${titleSegmentWithId(title, issueId)}.json`;
|
|
74
112
|
}
|
package/dist/path-mapper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-mapper.js","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAE1C,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS;IACT,OAAO;IACP,OAAO;IACP,WAAW;IACX,SAAS;IACT,SAAS;IACT,MAAM;IACN,MAAM;CACE,CAAC;AAIX,MAAM,mBAAmB,GAAmD;IAC1E,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,WAAW;IACvB,gBAAgB,EAAE,WAAW;IAC7B,iBAAiB,EAAE,WAAW;IAC9B,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;IACnB,aAAa,EAAE,SAAS;IACxB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"path-mapper.js","sourceRoot":"","sources":["../src/path-mapper.ts"],"names":[],"mappings":"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"}
|
package/dist/writeback.js
CHANGED
|
@@ -189,25 +189,10 @@ function buildIssueCreate(content) {
|
|
|
189
189
|
body: { query: ISSUE_CREATE_MUTATION, variables: { input } },
|
|
190
190
|
};
|
|
191
191
|
}
|
|
192
|
-
/**
|
|
193
|
-
* Server-managed fields that must never be forwarded as part of an
|
|
194
|
-
* `IssueUpdateInput`. Linear rejects updates that try to mutate these.
|
|
195
|
-
*/
|
|
196
|
-
const ISSUE_UPDATE_DENYLIST = new Set([
|
|
197
|
-
'id',
|
|
198
|
-
'identifier',
|
|
199
|
-
'createdAt',
|
|
200
|
-
'updatedAt',
|
|
201
|
-
'archivedAt',
|
|
202
|
-
'url',
|
|
203
|
-
'team',
|
|
204
|
-
'creator',
|
|
205
|
-
'parent',
|
|
206
|
-
]);
|
|
207
192
|
/**
|
|
208
193
|
* Envelope marker fields written by `LinearAdapter.renderContent()`. When the
|
|
209
194
|
* payload presents itself as the synced envelope (rather than a bare update
|
|
210
|
-
* input), unwrap to the inner `payload` before applying the
|
|
195
|
+
* input), unwrap to the inner `payload` before applying the allowlist.
|
|
211
196
|
*
|
|
212
197
|
* Without this step, a round-tripped synced file would forward `provider`,
|
|
213
198
|
* `workspaceId`, `objectType`, etc. into the GraphQL mutation and Linear
|
|
@@ -219,16 +204,51 @@ function looksLikeSyncedEnvelope(payload) {
|
|
|
219
204
|
return false;
|
|
220
205
|
return ENVELOPE_MARKER_KEYS.some((key) => key in payload);
|
|
221
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Fields Linear's `IssueUpdateInput` accepts. We use an explicit allowlist
|
|
209
|
+
* (rather than a denylist) so that synced-file fields the read API returns
|
|
210
|
+
* — `state_name`, `assignee_name`, `priority_label`, `created_at`, `_webhook`,
|
|
211
|
+
* etc. — get silently dropped instead of being forwarded into the mutation
|
|
212
|
+
* and rejected with `Field "X" is not defined by type "IssueUpdateInput"`.
|
|
213
|
+
*
|
|
214
|
+
* Mirrors the field set buildIssueCreate already accepts (which is itself a
|
|
215
|
+
* subset of `IssueCreateInput`), plus update-specific fields that are
|
|
216
|
+
* commonly edited in a synced-file workflow:
|
|
217
|
+
* - `subscriberIds` — change watchers
|
|
218
|
+
* - `sortOrder` — manual reordering
|
|
219
|
+
* - `descriptionData` — Linear's prosemirror-doc form of `description`
|
|
220
|
+
*
|
|
221
|
+
* If you need to set a field not in this list (e.g. `addedLabelIds` /
|
|
222
|
+
* `removedLabelIds` for incremental label changes), add it here and add a
|
|
223
|
+
* regression test in `__tests__/writeback-allowlist.test.ts`.
|
|
224
|
+
*/
|
|
225
|
+
const ISSUE_UPDATE_ALLOWLIST = new Set([
|
|
226
|
+
'title',
|
|
227
|
+
'description',
|
|
228
|
+
'descriptionData',
|
|
229
|
+
'priority',
|
|
230
|
+
'assigneeId',
|
|
231
|
+
'stateId',
|
|
232
|
+
'projectId',
|
|
233
|
+
'cycleId',
|
|
234
|
+
'labelIds',
|
|
235
|
+
'dueDate',
|
|
236
|
+
'estimate',
|
|
237
|
+
'parentId',
|
|
238
|
+
'subscriberIds',
|
|
239
|
+
'sortOrder',
|
|
240
|
+
]);
|
|
222
241
|
/**
|
|
223
242
|
* Build an `issueUpdate` mutation request for the writeback engine.
|
|
224
243
|
*
|
|
225
244
|
* Accepts two payload shapes:
|
|
226
245
|
* - the full synced envelope produced by `LinearAdapter.renderContent()`,
|
|
227
246
|
* with editable fields under `payload`. We unwrap automatically.
|
|
228
|
-
* - a bare update input where the top-level object IS the input
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
247
|
+
* - a bare update input where the top-level object IS the input — covers
|
|
248
|
+
* both hand-written workflow payloads and edits to the synced-file
|
|
249
|
+
* denormalized read (where the user keeps the full `{state_name,
|
|
250
|
+
* assignee_name, ...}` envelope and just changes a field). Synced-only
|
|
251
|
+
* fields are silently dropped via the allowlist.
|
|
232
252
|
*/
|
|
233
253
|
function buildIssueUpdate(issueId, content) {
|
|
234
254
|
const parsed = parseJsonObject(content);
|
|
@@ -237,12 +257,13 @@ function buildIssueUpdate(issueId, content) {
|
|
|
237
257
|
: parsed;
|
|
238
258
|
const input = {};
|
|
239
259
|
for (const [key, value] of Object.entries(source)) {
|
|
240
|
-
if (
|
|
260
|
+
if (!ISSUE_UPDATE_ALLOWLIST.has(key))
|
|
241
261
|
continue;
|
|
242
262
|
input[key] = value;
|
|
243
263
|
}
|
|
244
264
|
if (Object.keys(input).length === 0) {
|
|
245
|
-
throw new Error('issues/<id>.json update writeback requires at least one mutable field'
|
|
265
|
+
throw new Error('issues/<id>.json update writeback requires at least one mutable field ' +
|
|
266
|
+
'(see ISSUE_UPDATE_ALLOWLIST in @relayfile/adapter-linear/writeback for the accepted set)');
|
|
246
267
|
}
|
|
247
268
|
return {
|
|
248
269
|
action: 'update_issue',
|
package/dist/writeback.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeback.js","sourceRoot":"","sources":["../src/writeback.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"writeback.js","sourceRoot":"","sources":["../src/writeback.ts"],"names":[],"mappings":"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"}
|
package/dist/writeback.test.js
CHANGED
|
@@ -60,6 +60,43 @@ describe('linear writeback', () => {
|
|
|
60
60
|
description: 'New description',
|
|
61
61
|
});
|
|
62
62
|
});
|
|
63
|
+
it('drops denormalized synced-read fields that IssueUpdateInput does not accept', () => {
|
|
64
|
+
// Pins the bug surfaced on op_31 in workspace rw_517d60b6: the synced
|
|
65
|
+
// file the path-mapper wrote on the read side included Linear's
|
|
66
|
+
// denormalized fields (state_name, assignee_name, priority_label,
|
|
67
|
+
// _connection, _webhook, descriptionData, …). When a user edited the
|
|
68
|
+
// file in place keeping the full envelope and just changed the title,
|
|
69
|
+
// the writeback forwarded every field as IssueUpdateInput and Linear
|
|
70
|
+
// rejected with `Field "state_name" is not defined by type
|
|
71
|
+
// "IssueUpdateInput". Did you mean "stateId"?`.
|
|
72
|
+
//
|
|
73
|
+
// The fix: explicit allowlist matching IssueUpdateInput. Anything not
|
|
74
|
+
// in the schema is silently dropped; only mutable fields go through.
|
|
75
|
+
const req = resolveWritebackRequest(`/linear/issues/${PAGE_UUID}.json`, JSON.stringify({
|
|
76
|
+
id: PAGE_UUID,
|
|
77
|
+
identifier: 'PROJ-441',
|
|
78
|
+
title: 'edited title',
|
|
79
|
+
description: 'edited description',
|
|
80
|
+
// Denormalized read-only fields the writeback must NOT forward:
|
|
81
|
+
state_name: 'Backlog',
|
|
82
|
+
assignee_name: null,
|
|
83
|
+
priority_label: 'No priority',
|
|
84
|
+
created_at: '2026-04-03T18:38:27.932Z',
|
|
85
|
+
updated_at: '2026-04-03T18:38:28.177Z',
|
|
86
|
+
url: 'https://linear.app/x/issue/PROJ-441',
|
|
87
|
+
// Read-side metadata Linear's webhook normalizer emits:
|
|
88
|
+
_connection: { provider: 'linear' },
|
|
89
|
+
_webhook: { action: 'update' },
|
|
90
|
+
descriptionData: '{"type":"doc"}',
|
|
91
|
+
}));
|
|
92
|
+
const variables = req.body.variables;
|
|
93
|
+
assert.strictEqual(variables.id, PAGE_UUID);
|
|
94
|
+
assert.deepStrictEqual(variables.input, {
|
|
95
|
+
title: 'edited title',
|
|
96
|
+
description: 'edited description',
|
|
97
|
+
descriptionData: '{"type":"doc"}',
|
|
98
|
+
});
|
|
99
|
+
});
|
|
63
100
|
it('unwraps the synced envelope written by LinearAdapter.renderContent', () => {
|
|
64
101
|
// This is the exact shape an agent sees when it reads a synced
|
|
65
102
|
// /linear/issues/<id>.json file produced by LinearAdapter.renderContent.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeback.test.js","sourceRoot":"","sources":["../src/writeback.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"writeback.test.js","sourceRoot":"","sources":["../src/writeback.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,SAAS,GAAG,sCAAsC,CAAC;AACzD,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAE7C,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,GAAG,GAAG,uBAAuB,CACjC,iCAAiC,QAAQ,oBAAoB,EAC7D,qBAAqB,CACtB,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACvC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAI,GAAG,CAAC,IAAI,CAAC,SAA0D,CAAC,KAAK,CAAC;YACzF,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC7C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,GAAG,GAAG,uBAAuB,CACjC,iCAAiC,QAAQ,oBAAoB,EAC7D,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CACvE,CAAC;YACF,MAAM,KAAK,GAAI,GAAG,CAAC,IAAI,CAAC,SAEtB,CAAC,KAAK,CAAC;YACT,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAChD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CACH,uBAAuB,CACrB,iCAAiC,QAAQ,oBAAoB,EAC7D,IAAI,CACL,EACH,6BAA6B,CAC9B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CACH,uBAAuB,CACrB,0DAA0D,EAC1D,IAAI,CACL,EACH,yCAAyC,CAC1C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,uBAAuB,CAAC,2CAA2C,EAAE,IAAI,CAAC,EAChF,0BAA0B,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,GAAG,GAAG,uBAAuB,CACjC,yBAAyB,EACzB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAC7E,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAI,GAAG,CAAC,IAAI,CAAC,SAEtB,CAAC,KAAK,CAAC;YACT,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,uBAAuB,CAAC,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EACxF,qBAAqB,CACtB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,GAAG,GAAG,uBAAuB,CACjC,iCAAiC,QAAQ,OAAO,EAChD,IAAI,CAAC,SAAS,CAAC;gBACb,EAAE,EAAE,oBAAoB;gBACxB,UAAU,EAAE,UAAU;gBACtB,SAAS,EAAE,oBAAoB;gBAC/B,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,iBAAiB;aAC/B,CAAC,CACH,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAA2D,CAAC;YACvF,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE;gBACtC,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,iBAAiB;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;YACrF,sEAAsE;YACtE,gEAAgE;YAChE,kEAAkE;YAClE,qEAAqE;YACrE,sEAAsE;YACtE,qEAAqE;YACrE,2DAA2D;YAC3D,gDAAgD;YAChD,EAAE;YACF,sEAAsE;YACtE,qEAAqE;YACrE,MAAM,GAAG,GAAG,uBAAuB,CACjC,kBAAkB,SAAS,OAAO,EAClC,IAAI,CAAC,SAAS,CAAC;gBACb,EAAE,EAAE,SAAS;gBACb,UAAU,EAAE,UAAU;gBACtB,KAAK,EAAE,cAAc;gBACrB,WAAW,EAAE,oBAAoB;gBACjC,gEAAgE;gBAChE,UAAU,EAAE,SAAS;gBACrB,aAAa,EAAE,IAAI;gBACnB,cAAc,EAAE,aAAa;gBAC7B,UAAU,EAAE,0BAA0B;gBACtC,UAAU,EAAE,0BAA0B;gBACtC,GAAG,EAAE,qCAAqC;gBAC1C,wDAAwD;gBACxD,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBACnC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC9B,eAAe,EAAE,gBAAgB;aAClC,CAAC,CACH,CAAC;YACF,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAA2D,CAAC;YACvF,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE;gBACtC,KAAK,EAAE,cAAc;gBACrB,WAAW,EAAE,oBAAoB;gBACjC,eAAe,EAAE,gBAAgB;aAClC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,+DAA+D;YAC/D,yEAAyE;YACzE,wEAAwE;YACxE,qEAAqE;YACrE,4BAA4B;YAC5B,MAAM,GAAG,GAAG,uBAAuB,CACjC,iCAAiC,QAAQ,OAAO,EAChD,IAAI,CAAC,SAAS,CAAC;gBACb,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,QAAQ;gBACtB,WAAW,EAAE,OAAO;gBACpB,SAAS,EAAE,eAAe;gBAC1B,UAAU,EAAE,OAAO;gBACnB,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE;oBACP,EAAE,EAAE,SAAS;oBACb,UAAU,EAAE,UAAU;oBACtB,KAAK,EAAE,cAAc;oBACrB,WAAW,EAAE,oBAAoB;oBACjC,QAAQ,EAAE,CAAC;iBACZ;aACF,CAAC,CACH,CAAC;YACF,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAA2D,CAAC;YACvF,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAC5C,kEAAkE;YAClE,yDAAyD;YACzD,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE;gBACtC,KAAK,EAAE,cAAc;gBACrB,WAAW,EAAE,oBAAoB;gBACjC,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,uBAAuB,CAAC,2BAA2B,EAAE,IAAI,CAAC,EAChE,kCAAkC,CACnC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|