From fc6a33d290941e6a228fbeb9f43d1cb3773e963d Mon Sep 17 00:00:00 2001 From: Nico Krause Date: Wed, 18 Feb 2026 09:26:06 +0100 Subject: [PATCH 1/7] fix(client): resolve client.spec typecheck regressions --- packages/client/test/client.spec.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/client/test/client.spec.js b/packages/client/test/client.spec.js index a45f2817..33ad160e 100644 --- a/packages/client/test/client.spec.js +++ b/packages/client/test/client.spec.js @@ -218,7 +218,6 @@ const server = Server.create({ }) // Use server directly as channel (no HTTP, no mock fetch!) -/** @type {Client.ConnectionView} */ const connection = Client.connect({ id: w3, channel: server, // 🎯 Server directly as channel - validates delegation chains! @@ -255,7 +254,6 @@ test('execute', async () => { assert.deepEqual(e1.out, { error: { - // @ts-expect-error name: 'UnknownDIDError', message: `DID ${alice.did()} has no account`, did: alice.did(), @@ -300,7 +298,6 @@ test('execute with delegations', async () => { assert.deepEqual(e1.out, { error: { - // @ts-expect-error name: 'UnknownDIDError', message: `DID ${bob.did()} has no account`, did: bob.did(), From 603fb87cb8874244950dac1e4228664d51118f92 Mon Sep 17 00:00:00 2001 From: Nico Krause Date: Wed, 18 Feb 2026 09:31:39 +0100 Subject: [PATCH 2/7] fix(client): make client spec pass isolated typecheck --- packages/client/test/client.spec.js | 48 +++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/packages/client/test/client.spec.js b/packages/client/test/client.spec.js index 33ad160e..944cf495 100644 --- a/packages/client/test/client.spec.js +++ b/packages/client/test/client.spec.js @@ -6,7 +6,9 @@ import * as Service from './service.js' import { Receipt, Message, CBOR } from '@ucanto/core' import { alice, bob, mallory, service as w3 } from './fixtures.js' import fetch from '@web-std/fetch' +// @ts-ignore test-only package is outside client project references import * as Server from '@ucanto/server' +// @ts-ignore test-only package is outside client project references import { Schema } from '@ucanto/validator' test('encode invocation', async () => { @@ -152,7 +154,10 @@ const storeAddCapability = Server.capability({ nb: Schema.struct({ link: Server.Link.match().optional(), }), - derives: (claimed, delegated) => { + derives: ( + /** @type {{ with: string, nb: { link?: unknown } }} */ claimed, + /** @type {{ with: string, nb: { link?: unknown } }} */ delegated + ) => { if (claimed.with !== delegated.with) { return Server.fail( `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` @@ -178,7 +183,10 @@ const storeRemoveCapability = Server.capability({ nb: Schema.struct({ link: Server.Link.match().optional(), }), - derives: (claimed, delegated) => { + derives: ( + /** @type {{ with: string, nb: { link?: unknown } }} */ claimed, + /** @type {{ with: string, nb: { link?: unknown } }} */ delegated + ) => { if (claimed.with !== delegated.with) { return Server.fail( `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` @@ -203,14 +211,34 @@ const server = Server.create({ id: w3, service: { store: { - add: Server.provide(storeAddCapability, async ({ capability, invocation }) => { - // Call the existing service method with the invocation - return await service.store.add(/** @type {Client.Invocation} */ (invocation)) - }), - remove: Server.provide(storeRemoveCapability, async ({ capability, invocation }) => { - // Call the existing service method with the invocation - return await service.store.remove(/** @type {Client.Invocation} */ (invocation)) - }), + add: Server.provide( + storeAddCapability, + async ( + /** @type {{ capability: unknown, invocation: unknown }} */ { + capability, + invocation, + } + ) => { + // Call the existing service method with the invocation + return await service.store.add( + /** @type {Client.Invocation} */ (invocation) + ) + } + ), + remove: Server.provide( + storeRemoveCapability, + async ( + /** @type {{ capability: unknown, invocation: unknown }} */ { + capability, + invocation, + } + ) => { + // Call the existing service method with the invocation + return await service.store.remove( + /** @type {Client.Invocation} */ (invocation) + ) + } + ), }, }, codec: CAR.inbound, From a4180766e17fa10dd0e8af6865ab20c669a98577 Mon Sep 17 00:00:00 2001 From: Nico Krause Date: Wed, 18 Feb 2026 09:42:18 +0100 Subject: [PATCH 3/7] fix(client): type connection in client spec --- packages/client/test/client.spec.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/client/test/client.spec.js b/packages/client/test/client.spec.js index 944cf495..cf874fed 100644 --- a/packages/client/test/client.spec.js +++ b/packages/client/test/client.spec.js @@ -245,7 +245,17 @@ const server = Server.create({ validateAuthorization: () => ({ ok: {} }), }) +/** + * @typedef {{ + * store: { + * add: Client.ServiceMethod + * remove: Client.ServiceMethod + * } + * }} StoreService + */ + // Use server directly as channel (no HTTP, no mock fetch!) +/** @type {Client.ConnectionView} */ const connection = Client.connect({ id: w3, channel: server, // 🎯 Server directly as channel - validates delegation chains! From b7fdd625fbcd4ea0e8fd8531f0c79b055b3cc1ff Mon Sep 17 00:00:00 2001 From: Nico Krause Date: Wed, 18 Feb 2026 09:50:16 +0100 Subject: [PATCH 4/7] test: move server-as-channel coverage from client to server --- packages/client/test/client.spec.js | 261 -------------------- packages/server/test/client-channel.spec.js | 222 +++++++++++++++++ 2 files changed, 222 insertions(+), 261 deletions(-) create mode 100644 packages/server/test/client-channel.spec.js diff --git a/packages/client/test/client.spec.js b/packages/client/test/client.spec.js index cf874fed..145cbcce 100644 --- a/packages/client/test/client.spec.js +++ b/packages/client/test/client.spec.js @@ -6,10 +6,6 @@ import * as Service from './service.js' import { Receipt, Message, CBOR } from '@ucanto/core' import { alice, bob, mallory, service as w3 } from './fixtures.js' import fetch from '@web-std/fetch' -// @ts-ignore test-only package is outside client project references -import * as Server from '@ucanto/server' -// @ts-ignore test-only package is outside client project references -import { Schema } from '@ucanto/validator' test('encode invocation', async () => { /** @type {Client.ConnectionView} */ @@ -143,260 +139,3 @@ test('encode delegated invocation', async () => { ) } }) - -// Create the service instance -const service = Service.create() - -// Define capabilities -const storeAddCapability = Server.capability({ - can: 'store/add', - with: Server.URI.match({ protocol: 'did:' }), - nb: Schema.struct({ - link: Server.Link.match().optional(), - }), - derives: ( - /** @type {{ with: string, nb: { link?: unknown } }} */ claimed, - /** @type {{ with: string, nb: { link?: unknown } }} */ delegated - ) => { - if (claimed.with !== delegated.with) { - return Server.fail( - `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` - ) - } else if ( - delegated.nb.link && - `${delegated.nb.link}` !== `${claimed.nb.link}` - ) { - return Server.fail( - `Link ${ - claimed.nb.link == null ? '' : `${claimed.nb.link} ` - }violates imposed ${delegated.nb.link} constraint` - ) - } else { - return Server.ok({}) - } - }, -}) - -const storeRemoveCapability = Server.capability({ - can: 'store/remove', - with: Server.URI.match({ protocol: 'did:' }), - nb: Schema.struct({ - link: Server.Link.match().optional(), - }), - derives: ( - /** @type {{ with: string, nb: { link?: unknown } }} */ claimed, - /** @type {{ with: string, nb: { link?: unknown } }} */ delegated - ) => { - if (claimed.with !== delegated.with) { - return Server.fail( - `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` - ) - } else if ( - delegated.nb.link && - `${delegated.nb.link}` !== `${claimed.nb.link}` - ) { - return Server.fail( - `Link ${ - claimed.nb.link == null ? '' : `${claimed.nb.link} ` - }violates imposed ${delegated.nb.link} constraint` - ) - } else { - return Server.ok({}) - } - }, -}) - -// Create server with service handlers using Server.provide -const server = Server.create({ - id: w3, - service: { - store: { - add: Server.provide( - storeAddCapability, - async ( - /** @type {{ capability: unknown, invocation: unknown }} */ { - capability, - invocation, - } - ) => { - // Call the existing service method with the invocation - return await service.store.add( - /** @type {Client.Invocation} */ (invocation) - ) - } - ), - remove: Server.provide( - storeRemoveCapability, - async ( - /** @type {{ capability: unknown, invocation: unknown }} */ { - capability, - invocation, - } - ) => { - // Call the existing service method with the invocation - return await service.store.remove( - /** @type {Client.Invocation} */ (invocation) - ) - } - ), - }, - }, - codec: CAR.inbound, - validateAuthorization: () => ({ ok: {} }), -}) - -/** - * @typedef {{ - * store: { - * add: Client.ServiceMethod - * remove: Client.ServiceMethod - * } - * }} StoreService - */ - -// Use server directly as channel (no HTTP, no mock fetch!) -/** @type {Client.ConnectionView} */ -const connection = Client.connect({ - id: w3, - channel: server, // 🎯 Server directly as channel - validates delegation chains! - codec: CAR.outbound, -}) - -test('execute', async () => { - const car = await CAR.codec.write({ - roots: [await CBOR.write({ hello: 'world ' })], - }) - - const add = Client.invoke({ - issuer: alice, - audience: w3, - capability: { - can: 'store/add', - with: alice.did(), - nb: { link: car.cid }, - }, - proofs: [], - }) - - const remove = Client.invoke({ - issuer: alice, - audience: w3, - capability: { - can: 'store/remove', - with: alice.did(), - nb: { link: car.cid }, - }, - }) - - const e1 = await add.execute(connection) - - assert.deepEqual(e1.out, { - error: { - name: 'UnknownDIDError', - message: `DID ${alice.did()} has no account`, - did: alice.did(), - }, - }) - - // fake register alice - service.access.accounts.register( - alice.did(), - 'did:email:alice@web.mail', - car.cid - ) - - const [r1] = await connection.execute(add) - assert.deepEqual(r1.out, { - ok: { - with: alice.did(), - link: car.cid, - status: 'upload', - url: 'http://localhost:9090/', - }, - }) -}) - -test('execute with delegations', async () => { - const car = await CAR.codec.write({ - roots: [await CBOR.write({ hello: 'world ' })], - }) - - const add = Client.invoke({ - issuer: bob, - audience: w3, - capability: { - can: 'store/add', - with: bob.did(), - nb: { link: car.cid }, - }, - proofs: [], - }) - - const [e1] = await connection.execute(await add.delegate()) - - assert.deepEqual(e1.out, { - error: { - name: 'UnknownDIDError', - message: `DID ${bob.did()} has no account`, - did: bob.did(), - }, - }) - - // fake register alice - service.access.accounts.register(bob.did(), 'did:email:bob@web.mail', car.cid) - - const [r1] = await connection.execute(await add.delegate()) - assert.deepEqual(r1.out, { - ok: { - with: bob.did(), - link: car.cid, - status: 'upload', - url: 'http://localhost:9090/', - }, - }) -}) - -test('decode error', async () => { - const client = Client.connect({ - id: w3, - channel: server, - codec: Codec.outbound({ - encoders: { - 'application/car': CAR.request, - }, - decoders: { - 'application/car+receipt': CAR.response, - }, - }), - }) - - const car = await CAR.codec.write({ - roots: [await CBOR.write({ hello: 'world ' })], - }) - - const add = Client.invoke({ - issuer: alice, - audience: w3, - capability: { - can: 'store/add', - with: alice.did(), - nb: { link: car.cid }, - }, - proofs: [], - }) - - const [e1] = await client.execute(await add.delegate()) - - assert.deepEqual( - { - error: { - message: - "Can not decode response with content-type 'application/vnd.ipld.car' because no matching transport decoder is configured.", - // @ts-expect-error - name: 'TypeError', - error: true, - }, - }, - e1.out - ) -}) diff --git a/packages/server/test/client-channel.spec.js b/packages/server/test/client-channel.spec.js new file mode 100644 index 00000000..f178ae3b --- /dev/null +++ b/packages/server/test/client-channel.spec.js @@ -0,0 +1,222 @@ +import * as Client from '@ucanto/client' +import * as Server from '../src/lib.js' +import * as CAR from '@ucanto/transport/car' +import { Codec } from '@ucanto/transport' +import * as CBOR from '@ucanto/core/cbor' +import { Schema } from '@ucanto/core' +import * as Service from '../../client/test/service.js' +import { alice, bob, service as w3 } from './fixtures.js' +import { test, assert } from './test.js' + +const service = Service.create() + +const storeAddCapability = Server.capability({ + can: 'store/add', + with: Server.URI.match({ protocol: 'did:' }), + nb: Schema.struct({ + link: Server.Link.match().optional(), + }), + derives: (claimed, delegated) => { + if (claimed.with !== delegated.with) { + return Server.fail( + `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` + ) + } else if ( + delegated.nb.link && + `${delegated.nb.link}` !== `${claimed.nb.link}` + ) { + return Server.fail( + `Link ${ + claimed.nb.link == null ? '' : `${claimed.nb.link} ` + }violates imposed ${delegated.nb.link} constraint` + ) + } else { + return Server.ok({}) + } + }, +}) + +const storeRemoveCapability = Server.capability({ + can: 'store/remove', + with: Server.URI.match({ protocol: 'did:' }), + nb: Schema.struct({ + link: Server.Link.match().optional(), + }), + derives: (claimed, delegated) => { + if (claimed.with !== delegated.with) { + return Server.fail( + `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` + ) + } else if ( + delegated.nb.link && + `${delegated.nb.link}` !== `${claimed.nb.link}` + ) { + return Server.fail( + `Link ${ + claimed.nb.link == null ? '' : `${claimed.nb.link} ` + }violates imposed ${delegated.nb.link} constraint` + ) + } else { + return Server.ok({}) + } + }, +}) + +const server = Server.create({ + id: w3, + service: { + store: { + add: Server.provide(storeAddCapability, async ({ invocation }) => + service.store.add(/** @type {Client.Invocation} */ (invocation)) + ), + remove: Server.provide(storeRemoveCapability, async ({ invocation }) => + service.store.remove(/** @type {Client.Invocation} */ (invocation)) + ), + }, + }, + codec: CAR.inbound, + validateAuthorization: () => ({ ok: {} }), +}) + +/** + * @typedef {{ + * store: { + * add: Client.ServiceMethod + * remove: Client.ServiceMethod + * } + * }} StoreService + */ + +/** @type {Client.ConnectionView} */ +const connection = Client.connect({ + id: w3, + channel: server, + codec: CAR.outbound, +}) + +test('execute with server as channel', async () => { + const car = await CAR.codec.write({ + roots: [await CBOR.write({ hello: 'world ' })], + }) + + const add = Client.invoke({ + issuer: alice, + audience: w3, + capability: { + can: 'store/add', + with: alice.did(), + nb: { link: car.cid }, + }, + proofs: [], + }) + + const e1 = await add.execute(connection) + + assert.deepEqual(e1.out, { + error: { + name: 'UnknownDIDError', + message: `DID ${alice.did()} has no account`, + did: alice.did(), + }, + }) + + service.access.accounts.register( + alice.did(), + 'did:email:alice@web.mail', + car.cid + ) + + const [r1] = await connection.execute(add) + assert.deepEqual(r1.out, { + ok: { + with: alice.did(), + link: car.cid, + status: 'upload', + url: 'http://localhost:9090/', + }, + }) +}) + +test('execute with delegations and server as channel', async () => { + const car = await CAR.codec.write({ + roots: [await CBOR.write({ hello: 'world ' })], + }) + + const add = Client.invoke({ + issuer: bob, + audience: w3, + capability: { + can: 'store/add', + with: bob.did(), + nb: { link: car.cid }, + }, + proofs: [], + }) + + const [e1] = await connection.execute(await add.delegate()) + + assert.deepEqual(e1.out, { + error: { + name: 'UnknownDIDError', + message: `DID ${bob.did()} has no account`, + did: bob.did(), + }, + }) + + service.access.accounts.register(bob.did(), 'did:email:bob@web.mail', car.cid) + + const [r1] = await connection.execute(await add.delegate()) + assert.deepEqual(r1.out, { + ok: { + with: bob.did(), + link: car.cid, + status: 'upload', + url: 'http://localhost:9090/', + }, + }) +}) + +test('decode error with server as channel', async () => { + const client = Client.connect({ + id: w3, + channel: server, + codec: Codec.outbound({ + encoders: { + 'application/car': CAR.request, + }, + decoders: { + 'application/car+receipt': CAR.response, + }, + }), + }) + + const car = await CAR.codec.write({ + roots: [await CBOR.write({ hello: 'world ' })], + }) + + const add = Client.invoke({ + issuer: alice, + audience: w3, + capability: { + can: 'store/add', + with: alice.did(), + nb: { link: car.cid }, + }, + proofs: [], + }) + + const [e1] = await client.execute(await add.delegate()) + + assert.deepEqual( + { + error: { + message: + "Can not decode response with content-type 'application/vnd.ipld.car' because no matching transport decoder is configured.", + // @ts-expect-error + name: 'TypeError', + error: true, + }, + }, + e1.out + ) +}) From 37f8f08a10759e67e40a10d6b5338b2d8b584f8b Mon Sep 17 00:00:00 2001 From: Nico Krause Date: Wed, 18 Feb 2026 09:54:56 +0100 Subject: [PATCH 5/7] test(client): add local execute/decode tests after server-channel move --- packages/client/test/client.spec.js | 123 ++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/packages/client/test/client.spec.js b/packages/client/test/client.spec.js index 145cbcce..abad8c1f 100644 --- a/packages/client/test/client.spec.js +++ b/packages/client/test/client.spec.js @@ -139,3 +139,126 @@ test('encode delegated invocation', async () => { ) } }) + +test('execute invocation', async () => { + const car = await CAR.codec.write({ + roots: [await CBOR.write({ hello: 'world ' })], + }) + + const add = Client.invoke({ + issuer: alice, + audience: w3, + capability: { + can: 'store/add', + with: alice.did(), + nb: { link: car.cid }, + }, + proofs: [], + }) + + const channel = { + request: async (/** @type {any} */ input) => { + const { invocations } = await CAR.request.decode(input) + const receipts = await Promise.all( + invocations.map(invocation => + Receipt.issue({ + ran: invocation.cid, + issuer: w3, + result: { + ok: { + with: invocation.capabilities[0].with, + link: car.cid, + status: 'upload', + url: 'http://localhost:9090/', + }, + }, + }) + ) + ) + const message = await Message.build({ + receipts: /** @type {any} */ (receipts), + }) + return CAR.response.encode(message) + }, + } + + const connection = Client.connect({ + id: w3, + channel: /** @type {any} */ (channel), + codec: CAR.outbound, + }) + + const [r1] = await connection.execute(add) + assert.deepEqual(r1.out, { + ok: { + with: alice.did(), + link: car.cid, + status: 'upload', + url: 'http://localhost:9090/', + }, + }) +}) + +test('decode error', async () => { + const car = await CAR.codec.write({ + roots: [await CBOR.write({ hello: 'world ' })], + }) + + const add = Client.invoke({ + issuer: alice, + audience: w3, + capability: { + can: 'store/add', + with: alice.did(), + nb: { link: car.cid }, + }, + proofs: [], + }) + + const channel = { + request: async (/** @type {any} */ input) => { + const { invocations } = await CAR.request.decode(input) + const receipts = await Promise.all( + invocations.map(invocation => + Receipt.issue({ + ran: invocation.cid, + issuer: w3, + result: { ok: {} }, + }) + ) + ) + const message = await Message.build({ + receipts: /** @type {any} */ (receipts), + }) + return CAR.response.encode(message) + }, + } + + const client = Client.connect({ + id: w3, + channel: /** @type {any} */ (channel), + codec: Codec.outbound({ + encoders: { + 'application/car': CAR.request, + }, + decoders: { + 'application/car+receipt': CAR.response, + }, + }), + }) + + const [e1] = await client.execute(add) + + assert.deepEqual( + { + error: { + message: + "Can not decode response with content-type 'application/vnd.ipld.car' because no matching transport decoder is configured.", + // @ts-expect-error + name: 'TypeError', + error: true, + }, + }, + e1.out + ) +}) From 05ab2fbcd6199a003eaa9bf0a4f848a1dcc2f6e6 Mon Sep 17 00:00:00 2001 From: Nico Krause Date: Wed, 18 Feb 2026 10:56:28 +0100 Subject: [PATCH 6/7] ci: run package workflows on all branch pushes --- .github/workflows/client.yml | 2 +- .github/workflows/core.yml | 2 +- .github/workflows/interface.yml | 2 +- .github/workflows/principal.yml | 2 +- .github/workflows/server.yml | 2 +- .github/workflows/transport.yml | 2 +- .github/workflows/validator.yml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/client.yml b/.github/workflows/client.yml index 54512ae4..52693962 100644 --- a/.github/workflows/client.yml +++ b/.github/workflows/client.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: push: branches: - - main + - '**' paths: - 'packages/interface/**' - 'packages/core/**' diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index dbc65abb..9c19ea23 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: push: branches: - - main + - '**' paths: - 'packages/core/**' - 'packages/interface/**' diff --git a/.github/workflows/interface.yml b/.github/workflows/interface.yml index c7c9fbf6..2dd49eea 100644 --- a/.github/workflows/interface.yml +++ b/.github/workflows/interface.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: push: branches: - - main + - '**' paths: - 'packages/interface/**' pull_request: diff --git a/.github/workflows/principal.yml b/.github/workflows/principal.yml index c3255cdf..30e36c71 100644 --- a/.github/workflows/principal.yml +++ b/.github/workflows/principal.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: push: branches: - - main + - '**' paths: - 'packages/interface/**' - 'packages/principal/**' diff --git a/.github/workflows/server.yml b/.github/workflows/server.yml index 560b5f00..fc1cfc16 100644 --- a/.github/workflows/server.yml +++ b/.github/workflows/server.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: push: branches: - - main + - '**' paths: - 'packages/interface/**' - 'packages/core/**' diff --git a/.github/workflows/transport.yml b/.github/workflows/transport.yml index 2c5e321c..386bc052 100644 --- a/.github/workflows/transport.yml +++ b/.github/workflows/transport.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: push: branches: - - main + - '**' paths: - 'packages/core/**' - 'packages/interface/**' diff --git a/.github/workflows/validator.yml b/.github/workflows/validator.yml index 61a66579..37a5320e 100644 --- a/.github/workflows/validator.yml +++ b/.github/workflows/validator.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: push: branches: - - main + - '**' paths: - 'packages/interface/**' - 'packages/core/**' From b5d06b6e73caf8241d8085aa0042b43d10366a81 Mon Sep 17 00:00:00 2001 From: Nico Krause Date: Fri, 13 Mar 2026 12:21:48 +0100 Subject: [PATCH 7/7] ci: run package workflows on PRs; rename server channel spec --- .github/workflows/client.yml | 4 +--- .github/workflows/core.yml | 4 +--- .github/workflows/interface.yml | 4 +--- .github/workflows/principal.yml | 4 +--- .github/workflows/server.yml | 4 +--- .github/workflows/transport.yml | 4 +--- .github/workflows/validator.yml | 4 +--- .../test/{client-channel.spec.js => server-channel.spec.js} | 0 8 files changed, 7 insertions(+), 21 deletions(-) rename packages/server/test/{client-channel.spec.js => server-channel.spec.js} (100%) diff --git a/.github/workflows/client.yml b/.github/workflows/client.yml index 52693962..cb8d7ee4 100644 --- a/.github/workflows/client.yml +++ b/.github/workflows/client.yml @@ -4,15 +4,13 @@ on: workflow_dispatch: push: branches: - - '**' + - main paths: - 'packages/interface/**' - 'packages/core/**' - 'packages/transport/**' - 'packages/client/**' pull_request: - branches: - - main paths: - 'packages/interface/**' - 'packages/core/**' diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 9c19ea23..2b9b443e 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -4,13 +4,11 @@ on: workflow_dispatch: push: branches: - - '**' + - main paths: - 'packages/core/**' - 'packages/interface/**' pull_request: - branches: - - main paths: - 'packages/core/**' - 'packages/interface/**' diff --git a/.github/workflows/interface.yml b/.github/workflows/interface.yml index 2dd49eea..027ef592 100644 --- a/.github/workflows/interface.yml +++ b/.github/workflows/interface.yml @@ -4,12 +4,10 @@ on: workflow_dispatch: push: branches: - - '**' + - main paths: - 'packages/interface/**' pull_request: - branches: - - main paths: - 'packages/interface/**' - '.github/workflows/interface.yml' diff --git a/.github/workflows/principal.yml b/.github/workflows/principal.yml index 30e36c71..8397096d 100644 --- a/.github/workflows/principal.yml +++ b/.github/workflows/principal.yml @@ -4,13 +4,11 @@ on: workflow_dispatch: push: branches: - - '**' + - main paths: - 'packages/interface/**' - 'packages/principal/**' pull_request: - branches: - - main paths: - 'packages/interface/**' - 'packages/principal/**' diff --git a/.github/workflows/server.yml b/.github/workflows/server.yml index fc1cfc16..d3437e2d 100644 --- a/.github/workflows/server.yml +++ b/.github/workflows/server.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: push: branches: - - '**' + - main paths: - 'packages/interface/**' - 'packages/core/**' @@ -13,8 +13,6 @@ on: - 'packages/validator/**' - 'packages/server/**' pull_request: - branches: - - main paths: - 'packages/interface/**' - 'packages/core/**' diff --git a/.github/workflows/transport.yml b/.github/workflows/transport.yml index 386bc052..c907c300 100644 --- a/.github/workflows/transport.yml +++ b/.github/workflows/transport.yml @@ -4,14 +4,12 @@ on: workflow_dispatch: push: branches: - - '**' + - main paths: - 'packages/core/**' - 'packages/interface/**' - 'packages/transport/**' pull_request: - branches: - - main paths: - 'packages/core/**' - 'packages/interface/**' diff --git a/.github/workflows/validator.yml b/.github/workflows/validator.yml index 37a5320e..0ac39039 100644 --- a/.github/workflows/validator.yml +++ b/.github/workflows/validator.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: push: branches: - - '**' + - main paths: - 'packages/interface/**' - 'packages/core/**' @@ -12,8 +12,6 @@ on: - 'packages/client/**' - 'packages/validator/**' pull_request: - branches: - - main paths: - 'packages/interface/**' - 'packages/core/**' diff --git a/packages/server/test/client-channel.spec.js b/packages/server/test/server-channel.spec.js similarity index 100% rename from packages/server/test/client-channel.spec.js rename to packages/server/test/server-channel.spec.js