mppx 0.5.13 → 0.5.16

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.
Files changed (83) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/Method.d.ts +5 -2
  3. package/dist/Method.d.ts.map +1 -1
  4. package/dist/Method.js.map +1 -1
  5. package/dist/mcp-sdk/server/Transport.d.ts.map +1 -1
  6. package/dist/mcp-sdk/server/Transport.js +8 -2
  7. package/dist/mcp-sdk/server/Transport.js.map +1 -1
  8. package/dist/server/Mppx.d.ts.map +1 -1
  9. package/dist/server/Mppx.js +17 -10
  10. package/dist/server/Mppx.js.map +1 -1
  11. package/dist/server/Request.js +5 -1
  12. package/dist/server/Request.js.map +1 -1
  13. package/dist/server/Transport.d.ts.map +1 -1
  14. package/dist/server/Transport.js +4 -0
  15. package/dist/server/Transport.js.map +1 -1
  16. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  17. package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
  18. package/dist/stripe/server/internal/html.gen.js +1 -1
  19. package/dist/stripe/server/internal/html.gen.js.map +1 -1
  20. package/dist/tempo/Methods.d.ts.map +1 -1
  21. package/dist/tempo/Methods.js +4 -2
  22. package/dist/tempo/Methods.js.map +1 -1
  23. package/dist/tempo/client/SessionManager.d.ts.map +1 -1
  24. package/dist/tempo/client/SessionManager.js +20 -10
  25. package/dist/tempo/client/SessionManager.js.map +1 -1
  26. package/dist/tempo/internal/fee-payer.d.ts +4 -1
  27. package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
  28. package/dist/tempo/internal/fee-payer.js +99 -23
  29. package/dist/tempo/internal/fee-payer.js.map +1 -1
  30. package/dist/tempo/server/Charge.d.ts.map +1 -1
  31. package/dist/tempo/server/Charge.js +6 -0
  32. package/dist/tempo/server/Charge.js.map +1 -1
  33. package/dist/tempo/server/Session.d.ts +4 -0
  34. package/dist/tempo/server/Session.d.ts.map +1 -1
  35. package/dist/tempo/server/Session.js +79 -48
  36. package/dist/tempo/server/Session.js.map +1 -1
  37. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  38. package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
  39. package/dist/tempo/server/internal/html.gen.js +1 -1
  40. package/dist/tempo/server/internal/html.gen.js.map +1 -1
  41. package/dist/tempo/server/internal/transport.d.ts +0 -7
  42. package/dist/tempo/server/internal/transport.d.ts.map +1 -1
  43. package/dist/tempo/server/internal/transport.js +84 -13
  44. package/dist/tempo/server/internal/transport.js.map +1 -1
  45. package/dist/tempo/session/Chain.d.ts +5 -0
  46. package/dist/tempo/session/Chain.d.ts.map +1 -1
  47. package/dist/tempo/session/Chain.js +202 -63
  48. package/dist/tempo/session/Chain.js.map +1 -1
  49. package/dist/tempo/session/ChannelStore.d.ts +1 -0
  50. package/dist/tempo/session/ChannelStore.d.ts.map +1 -1
  51. package/dist/tempo/session/ChannelStore.js +38 -15
  52. package/dist/tempo/session/ChannelStore.js.map +1 -1
  53. package/package.json +2 -2
  54. package/src/Method.ts +5 -2
  55. package/src/internal/changeset.test.ts +106 -0
  56. package/src/mcp-sdk/client/McpClient.integration.test.ts +634 -0
  57. package/src/mcp-sdk/server/Transport.test.ts +1 -0
  58. package/src/mcp-sdk/server/Transport.ts +10 -2
  59. package/src/proxy/Proxy.test.ts +149 -1
  60. package/src/server/Mppx.test.ts +120 -0
  61. package/src/server/Mppx.ts +27 -11
  62. package/src/server/Request.test.ts +46 -1
  63. package/src/server/Request.ts +6 -1
  64. package/src/server/Transport.test.ts +2 -0
  65. package/src/server/Transport.ts +4 -0
  66. package/src/stripe/server/internal/html.gen.ts +1 -1
  67. package/src/tempo/Methods.test.ts +13 -0
  68. package/src/tempo/Methods.ts +23 -16
  69. package/src/tempo/client/SessionManager.ts +32 -9
  70. package/src/tempo/internal/fee-payer.test.ts +88 -16
  71. package/src/tempo/internal/fee-payer.ts +118 -23
  72. package/src/tempo/server/Charge.test.ts +73 -0
  73. package/src/tempo/server/Charge.ts +6 -0
  74. package/src/tempo/server/Session.test.ts +934 -47
  75. package/src/tempo/server/Session.ts +100 -52
  76. package/src/tempo/server/internal/html.gen.ts +1 -1
  77. package/src/tempo/server/internal/transport.test.ts +321 -10
  78. package/src/tempo/server/internal/transport.ts +101 -14
  79. package/src/tempo/session/Chain.test.ts +225 -2
  80. package/src/tempo/session/Chain.ts +250 -65
  81. package/src/tempo/session/ChannelStore.test.ts +23 -0
  82. package/src/tempo/session/ChannelStore.ts +46 -13
  83. package/src/viem/Client.test.ts +52 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelStore.d.ts","sourceRoot":"","sources":["../../../src/tempo/session/ChannelStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAExC,OAAO,KAAK,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,KAAK;IACpB,kEAAkE;IAClE,gBAAgB,EAAE,OAAO,CAAA;IACzB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,yDAAyD;IACzD,cAAc,EAAE,OAAO,CAAA;IACvB,kDAAkD;IAClD,SAAS,EAAE,GAAG,CAAA;IACd,iFAAiF;IACjF,gBAAgB,EAAE,MAAM,CAAA;IACxB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAA;IAClB,kEAAkE;IAClE,cAAc,EAAE,aAAa,GAAG,IAAI,CAAA;IACpC,gEAAgE;IAChE,oBAAoB,EAAE,MAAM,CAAA;IAC5B,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAA;IACd,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAA;IACd,iDAAiD;IACjD,cAAc,EAAE,MAAM,CAAA;IACtB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAA;IACb,gDAAgD;IAChD,KAAK,EAAE,OAAO,CAAA;IACd,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IAEjD;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IAEjG;;;;;;;;;OASG;IACH,aAAa,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE7C;;;;;;OAMG;IACH,mBAAmB,CAAC,CAAC,MAAM,EACzB,SAAS,EAAE,GAAG,EACd,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GACzD,OAAO,CAAC,MAAM,CAAC,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAA;AAEvF;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CAoCvB;AAqBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG,YAAY,CAyF9E"}
1
+ {"version":3,"file":"ChannelStore.d.ts","sourceRoot":"","sources":["../../../src/tempo/session/ChannelStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAExC,OAAO,KAAK,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,KAAK;IACpB,kEAAkE;IAClE,gBAAgB,EAAE,OAAO,CAAA;IACzB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,yDAAyD;IACzD,cAAc,EAAE,OAAO,CAAA;IACvB,kDAAkD;IAClD,SAAS,EAAE,GAAG,CAAA;IACd,iFAAiF;IACjF,gBAAgB,EAAE,MAAM,CAAA;IACxB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAA;IAClB,kEAAkE;IAClE,cAAc,EAAE,aAAa,GAAG,IAAI,CAAA;IACpC,gEAAgE;IAChE,oBAAoB,EAAE,MAAM,CAAA;IAC5B,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAA;IACd,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAA;IACd,iDAAiD;IACjD,cAAc,EAAE,MAAM,CAAA;IACtB,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAA;IACb,gDAAgD;IAChD,KAAK,EAAE,OAAO,CAAA;IACd,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IAEjD;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;IAEjG;;;;;;;;;OASG;IACH,aAAa,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE7C;;;;;;OAMG;IACH,mBAAmB,CAAC,CAAC,MAAM,EACzB,SAAS,EAAE,GAAG,EACd,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GACzD,OAAO,CAAC,MAAM,CAAC,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAA;AAEvF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,GAAG,GAAG,GAAG,CAEtD;AAUD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,GAAG,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CAoCvB;AAqBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG,YAAY,CA8G9E"}
@@ -1,3 +1,12 @@
1
+ export function normalizeChannelId(channelId) {
2
+ return channelId.toLowerCase();
3
+ }
4
+ function normalizeState(channelId, state) {
5
+ return state.channelId === channelId ? state : { ...state, channelId };
6
+ }
7
+ function normalizeMaybeState(channelId, state) {
8
+ return state ? normalizeState(channelId, state) : null;
9
+ }
1
10
  /**
2
11
  * Atomically deduct `amount` from a channel's available balance.
3
12
  *
@@ -84,53 +93,67 @@ export function fromStore(store) {
84
93
  });
85
94
  }
86
95
  async function updateResult(channelId, fn) {
96
+ const normalizedChannelId = normalizeChannelId(channelId);
87
97
  let change;
88
98
  if (atomicUpdate) {
89
- const result = await atomicUpdate(channelId, (current) => {
90
- change = fn(current ?? null);
99
+ const result = await atomicUpdate(normalizedChannelId, (current) => {
100
+ change = fn(normalizeMaybeState(normalizedChannelId, current ?? null));
101
+ if (change.op === 'set') {
102
+ change = {
103
+ ...change,
104
+ value: normalizeState(normalizedChannelId, change.value),
105
+ };
106
+ }
91
107
  if (change.op !== 'set')
92
108
  return change;
93
109
  return { ...change, value: change.value };
94
110
  });
95
111
  if (change?.op !== 'noop')
96
- notify(channelId);
112
+ notify(normalizedChannelId);
97
113
  return result;
98
114
  }
99
- while (locks.has(channelId))
100
- await locks.get(channelId);
115
+ while (locks.has(normalizedChannelId))
116
+ await locks.get(normalizedChannelId);
101
117
  let release;
102
- locks.set(channelId, new Promise((r) => {
118
+ locks.set(normalizedChannelId, new Promise((r) => {
103
119
  release = r;
104
120
  }));
105
121
  try {
106
- const current = (await store.get(channelId));
122
+ const current = normalizeMaybeState(normalizedChannelId, (await store.get(normalizedChannelId)));
107
123
  change = fn(current);
108
- if (change.op === 'set')
109
- await store.put(channelId, change.value);
124
+ if (change.op === 'set') {
125
+ change = {
126
+ ...change,
127
+ value: normalizeState(normalizedChannelId, change.value),
128
+ };
129
+ await store.put(normalizedChannelId, change.value);
130
+ }
110
131
  if (change.op === 'delete')
111
- await store.delete(channelId);
132
+ await store.delete(normalizedChannelId);
112
133
  if (change.op !== 'noop')
113
- notify(channelId);
134
+ notify(normalizedChannelId);
114
135
  return change.result;
115
136
  }
116
137
  finally {
117
- locks.delete(channelId);
138
+ locks.delete(normalizedChannelId);
118
139
  release();
119
140
  }
120
141
  }
121
142
  const cs = {
122
143
  async getChannel(channelId) {
123
- return (await store.get(channelId));
144
+ const normalizedChannelId = normalizeChannelId(channelId);
145
+ return normalizeMaybeState(normalizedChannelId, (await store.get(normalizedChannelId)));
124
146
  },
125
147
  async updateChannel(channelId, fn) {
126
148
  return update(channelId, fn);
127
149
  },
128
150
  waitForUpdate(channelId) {
129
151
  return new Promise((resolve) => {
130
- let set = waiters.get(channelId);
152
+ const normalizedChannelId = normalizeChannelId(channelId);
153
+ let set = waiters.get(normalizedChannelId);
131
154
  if (!set) {
132
155
  set = new Set();
133
- waiters.set(channelId, set);
156
+ waiters.set(normalizedChannelId, set);
134
157
  }
135
158
  set.add(resolve);
136
159
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelStore.js","sourceRoot":"","sources":["../../../src/tempo/session/ChannelStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChannelStore.js","sourceRoot":"","sources":["../../../src/tempo/session/ChannelStore.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mppx",
3
3
  "type": "module",
4
- "version": "0.5.13",
4
+ "version": "0.5.16",
5
5
  "main": "./dist/index.js",
6
6
  "license": "MIT",
7
7
  "files": [
@@ -105,7 +105,7 @@
105
105
  "@modelcontextprotocol/sdk": ">=1.25.0",
106
106
  "elysia": ">=1",
107
107
  "express": ">=5",
108
- "hono": ">=4.12.12",
108
+ "hono": ">=4.12.14",
109
109
  "viem": ">=2.47.5"
110
110
  },
111
111
  "peerDependenciesMeta": {
package/src/Method.ts CHANGED
@@ -69,6 +69,7 @@ export type AnyClient = Client<any, any>
69
69
 
70
70
  /** Transport-captured request metadata used as the authoritative request snapshot. */
71
71
  export type CapturedRequest = {
72
+ readonly hasBody?: boolean | undefined
72
73
  readonly headers: Headers
73
74
  readonly method: string
74
75
  readonly url: URL
@@ -167,8 +168,10 @@ export type VerifyFn<method extends Method> = (
167
168
  * response or generator. If it returns `undefined`, the server handler
168
169
  * is expected to serve content via `withReceipt(response)`.
169
170
  *
170
- * **HTTP-only.** The `input` parameter is a `Request` object; MCP transports
171
- * do not invoke this hook.
171
+ * Use `parameters.envelope?.capturedRequest` for any transport-agnostic
172
+ * authorization, billing, or routing decisions. The raw `input` should only
173
+ * be used for transport-specific response shaping (for example, HTTP content
174
+ * negotiation).
172
175
  */
173
176
  export type RespondFn<method extends Method> = (
174
177
  parameters: RespondContext<method>,
@@ -0,0 +1,106 @@
1
+ import * as fs from 'node:fs'
2
+ import * as path from 'node:path'
3
+
4
+ import { describe, expect, test } from 'vp/test'
5
+
6
+ const changesetDir = path.resolve(import.meta.dirname, '../../.changeset')
7
+ const validPackages = new Set(['mppx'])
8
+ const validBumpTypes = new Set(['major', 'minor', 'patch', 'none'])
9
+
10
+ function getChangesetFiles() {
11
+ return fs
12
+ .readdirSync(changesetDir)
13
+ .filter((f) => f.endsWith('.md') && f !== 'README.md' && !f.startsWith('.'))
14
+ }
15
+
16
+ function parseFrontmatter(content: string) {
17
+ const match = content.match(/^\s*---\n([^]*?)\n\s*---/)
18
+ if (!match) return undefined
19
+ return match[1]
20
+ }
21
+
22
+ function parseReleases(frontmatter: string) {
23
+ return [...frontmatter.matchAll(/^['"]?([^'":\n]+?)['"]?\s*:\s*(.+)$/gm)].map(
24
+ ([, name, type]) => ({ name: name!.trim(), type: type!.trim().replace(/['"]/g, '') }),
25
+ )
26
+ }
27
+
28
+ describe('changesets', () => {
29
+ const files = getChangesetFiles()
30
+
31
+ test('all changeset files have valid frontmatter fences', () => {
32
+ for (const file of files) {
33
+ const content = fs.readFileSync(path.join(changesetDir, file), 'utf-8')
34
+ expect(content, `${file}: must start with "---"`).toMatch(/^---\n/)
35
+ const closingIdx = content.indexOf('---', 3)
36
+ expect(closingIdx, `${file}: missing closing "---" fence`).toBeGreaterThan(3)
37
+
38
+ // closing fence must not have trailing non-whitespace (parser chokes)
39
+ const afterClosing = content.slice(closingIdx + 3).split('\n')[0]!
40
+ expect(afterClosing.trim(), `${file}: trailing characters after closing "---"`).toBe('')
41
+ }
42
+ })
43
+
44
+ test('all changesets reference valid packages', () => {
45
+ for (const file of files) {
46
+ const content = fs.readFileSync(path.join(changesetDir, file), 'utf-8')
47
+ const frontmatter = parseFrontmatter(content)
48
+ if (!frontmatter) continue
49
+ for (const { name } of parseReleases(frontmatter)) {
50
+ expect(
51
+ validPackages.has(name),
52
+ `${file}: unknown package "${name}" (valid: ${[...validPackages].join(', ')})`,
53
+ ).toBe(true)
54
+ }
55
+ }
56
+ })
57
+
58
+ test('all changesets use valid bump types', () => {
59
+ for (const file of files) {
60
+ const content = fs.readFileSync(path.join(changesetDir, file), 'utf-8')
61
+ const frontmatter = parseFrontmatter(content)
62
+ if (!frontmatter) continue
63
+ for (const { name, type } of parseReleases(frontmatter)) {
64
+ expect(
65
+ validBumpTypes.has(type),
66
+ `${file}: invalid bump type "${type}" for "${name}" (valid: major, minor, patch, none)`,
67
+ ).toBe(true)
68
+ }
69
+ }
70
+ })
71
+
72
+ test('no changeset uses major bump (pre-v1 policy)', () => {
73
+ for (const file of files) {
74
+ const content = fs.readFileSync(path.join(changesetDir, file), 'utf-8')
75
+ const frontmatter = parseFrontmatter(content)
76
+ if (!frontmatter) continue
77
+ for (const { name, type } of parseReleases(frontmatter)) {
78
+ expect(type, `${file}: "${name}" uses major bump — pre-v1 policy forbids this`).not.toBe(
79
+ 'major',
80
+ )
81
+ }
82
+ }
83
+ })
84
+
85
+ test('all changesets have a non-empty description', () => {
86
+ for (const file of files) {
87
+ const content = fs.readFileSync(path.join(changesetDir, file), 'utf-8')
88
+ const match = content.match(/^\s*---[^]*?---\s*(.*)$/s)
89
+ expect(match?.[1]?.trim(), `${file}: changeset has an empty description`).toBeTruthy()
90
+ }
91
+ })
92
+
93
+ test('no duplicate package entries in frontmatter', () => {
94
+ for (const file of files) {
95
+ const content = fs.readFileSync(path.join(changesetDir, file), 'utf-8')
96
+ const frontmatter = parseFrontmatter(content)
97
+ if (!frontmatter) continue
98
+ const releases = parseReleases(frontmatter)
99
+ const seen = new Set<string>()
100
+ for (const { name } of releases) {
101
+ expect(seen.has(name), `${file}: duplicate entry for "${name}"`).toBe(false)
102
+ seen.add(name)
103
+ }
104
+ }
105
+ })
106
+ })