diff --git a/README.md b/README.md index 69c4d7ce..3845eaa7 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ prerelease in `package.json`. The version output includes both runtime components: ```text -polymorfa/0.1.0-dev.0 sdk/0.1.0-dev.20260923115544 +polymorfa/0.1.0-dev.0 sdk/0.1.0-dev.20260926005918 ``` The SDK component reports the version built into the installed SDK. Dev @@ -1659,7 +1659,6 @@ polymorfa trigger session.restriction_updated --project PROJECT_ID --session my- --override restrictionActive=false polymorfa trigger template.status --project PROJECT_ID --session my-test-number \ --override templateStatus=REJECTED --override reason=INVALID_FORMAT -polymorfa trigger bansafe.enforcement --project PROJECT_ID --session my-test-number ``` The trigger prints the event ID. Without `--forward-to`, the listener prints @@ -1668,8 +1667,8 @@ the same line (`message.received `) when the event arrives; with with `--forward-secret-out ` (JSON forwarding requires the secret file), which writes one JSON line per event. Fixtures are `message.received`, `message.ack`, `message.failed`, `call.received`, -`call.missed`, `call.ended`, `session.status`, `session.restriction_updated`, `template.status`, -`bansafe.enforcement`, and `bansafe.risk_changed`. `--override key=value` +`call.missed`, `call.ended`, `session.status`, `session.restriction_updated`, +and `template.status`. `--override key=value` sets one payload field and can be repeated; `--text` and `--from` are shortcuts. `video` and `restrictionActive` accept only `true` or `false`; `durationSeconds` accepts a whole number. Set `restrictionActive=false` to diff --git a/package-lock.json b/package-lock.json index c52dfd2a..bac52793 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@modelcontextprotocol/server": "2.0.0", "@napi-rs/keyring": "1.3.0", "@oclif/core": "^4.13.5", - "@polymorfa/sdk": "0.1.0-dev.20260923202417", + "@polymorfa/sdk": "0.1.0-dev.20260926005918", "jq-wasm": "3.0.0-jq-1.8.2", "zod": "4.2.0" }, @@ -997,10 +997,9 @@ } }, "node_modules/@polymorfa/sdk": { - "version": "0.1.0-dev.20260923202417", - "resolved": "https://registry.npmjs.org/@polymorfa/sdk/-/sdk-0.1.0-dev.20260923202417.tgz", - "integrity": "sha512-XSaxRvSrYGhfrsdlCZfXUqAYOdDfYpcofUTEYiY0tONwuYJSaeTdSP1PJhPqZ8NYuQUAbEnzBRjiF1WodLo4MQ==", - "license": "MIT", + "version": "0.1.0-dev.20260926005918", + "resolved": "https://registry.npmjs.org/@polymorfa/sdk/-/sdk-0.1.0-dev.20260926005918.tgz", + "integrity": "sha512-PAkVAqN5QNSKcoT4i7DJHDRp5RfKbDmiJUDurkgxJYOyFR4d+wJ65HrAqkY5KGvBjtANsjkqRczmt8gQRAnGVw==", "engines": { "node": ">=20" } diff --git a/package.json b/package.json index 1f6bfb2e..f92f1306 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@modelcontextprotocol/server": "2.0.0", "@napi-rs/keyring": "1.3.0", "@oclif/core": "^4.13.5", - "@polymorfa/sdk": "0.1.0-dev.20260923202417", + "@polymorfa/sdk": "0.1.0-dev.20260926005918", "jq-wasm": "3.0.0-jq-1.8.2", "zod": "4.2.0" }, diff --git a/src/commands/trigger.ts b/src/commands/trigger.ts index ed11b31e..60dc555b 100644 --- a/src/commands/trigger.ts +++ b/src/commands/trigger.ts @@ -53,7 +53,6 @@ export default class Trigger extends BaseCommand { '<%= config.bin %> trigger message.received --session my-test-number --text "hi" --project ', '<%= config.bin %> trigger message.ack --session my-test-number --override ackStatus=read --project ', '<%= config.bin %> trigger template.status --session my-test-number --override templateStatus=REJECTED --override reason=INVALID_FORMAT --project ', - '<%= config.bin %> trigger bansafe.enforcement --session my-test-number --override enforcementKind=temporary_ban --project ', ] async run(): Promise { diff --git a/test/commands/trigger.test.ts b/test/commands/trigger.test.ts index 899990ea..67909f7e 100644 --- a/test/commands/trigger.test.ts +++ b/test/commands/trigger.test.ts @@ -193,6 +193,30 @@ test('requires a session and a fixture before any request', async () => { expect(unknown.requests).toHaveLength(0) }) +test.each([ + 'bansafe.risk_changed', + 'bansafe.health_changed', + 'bansafe.enforcement', +])('rejects retired %s test fixtures before any request', async (fixture) => { + const {result, requests} = await run( + `trigger ${fixture} --project ${projectId} --session test-a`, + [ + { + status: 202, + body: { + event: fixture, + session: 'test-a', + delivery: 'generated', + eventId, + source: 'test', + }, + }, + ], + ) + expect(result.error).toBeDefined() + expect(requests).toHaveLength(0) +}) + test('parses typed overrides and rejects malformed ones', () => { expect( parseOverrides(['video=true', 'durationSeconds=12', 'reason=a=b']),