queue-pilot 0.2.0

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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +177 -0
  3. package/dist/index.d.ts +9 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +81 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/rabbitmq/client.d.ts +22 -0
  8. package/dist/rabbitmq/client.d.ts.map +1 -0
  9. package/dist/rabbitmq/client.js +82 -0
  10. package/dist/rabbitmq/client.js.map +1 -0
  11. package/dist/rabbitmq/types.d.ts +55 -0
  12. package/dist/rabbitmq/types.d.ts.map +1 -0
  13. package/dist/rabbitmq/types.js +2 -0
  14. package/dist/rabbitmq/types.js.map +1 -0
  15. package/dist/schemas/loader.d.ts +3 -0
  16. package/dist/schemas/loader.d.ts.map +1 -0
  17. package/dist/schemas/loader.js +37 -0
  18. package/dist/schemas/loader.js.map +1 -0
  19. package/dist/schemas/types.d.ts +27 -0
  20. package/dist/schemas/types.d.ts.map +1 -0
  21. package/dist/schemas/types.js +2 -0
  22. package/dist/schemas/types.js.map +1 -0
  23. package/dist/schemas/validator.d.ts +10 -0
  24. package/dist/schemas/validator.d.ts.map +1 -0
  25. package/dist/schemas/validator.js +106 -0
  26. package/dist/schemas/validator.js.map +1 -0
  27. package/dist/server.d.ts +10 -0
  28. package/dist/server.d.ts.map +1 -0
  29. package/dist/server.js +208 -0
  30. package/dist/server.js.map +1 -0
  31. package/dist/tools/create-binding.d.ts +15 -0
  32. package/dist/tools/create-binding.d.ts.map +1 -0
  33. package/dist/tools/create-binding.js +10 -0
  34. package/dist/tools/create-binding.js.map +1 -0
  35. package/dist/tools/create-queue.d.ts +15 -0
  36. package/dist/tools/create-queue.d.ts.map +1 -0
  37. package/dist/tools/create-queue.js +13 -0
  38. package/dist/tools/create-queue.js.map +1 -0
  39. package/dist/tools/get-schema.d.ts +9 -0
  40. package/dist/tools/get-schema.d.ts.map +1 -0
  41. package/dist/tools/get-schema.js +16 -0
  42. package/dist/tools/get-schema.js.map +1 -0
  43. package/dist/tools/inspect-queue.d.ts +36 -0
  44. package/dist/tools/inspect-queue.d.ts.map +1 -0
  45. package/dist/tools/inspect-queue.js +74 -0
  46. package/dist/tools/inspect-queue.js.map +1 -0
  47. package/dist/tools/list-bindings.d.ts +11 -0
  48. package/dist/tools/list-bindings.d.ts.map +1 -0
  49. package/dist/tools/list-bindings.js +12 -0
  50. package/dist/tools/list-bindings.js.map +1 -0
  51. package/dist/tools/list-exchanges.d.ts +10 -0
  52. package/dist/tools/list-exchanges.d.ts.map +1 -0
  53. package/dist/tools/list-exchanges.js +11 -0
  54. package/dist/tools/list-exchanges.js.map +1 -0
  55. package/dist/tools/list-queues.d.ts +11 -0
  56. package/dist/tools/list-queues.d.ts.map +1 -0
  57. package/dist/tools/list-queues.js +12 -0
  58. package/dist/tools/list-queues.js.map +1 -0
  59. package/dist/tools/list-schemas.d.ts +11 -0
  60. package/dist/tools/list-schemas.d.ts.map +1 -0
  61. package/dist/tools/list-schemas.js +14 -0
  62. package/dist/tools/list-schemas.js.map +1 -0
  63. package/dist/tools/peek-messages.d.ts +19 -0
  64. package/dist/tools/peek-messages.d.ts.map +1 -0
  65. package/dist/tools/peek-messages.js +20 -0
  66. package/dist/tools/peek-messages.js.map +1 -0
  67. package/dist/tools/publish-message.d.ts +28 -0
  68. package/dist/tools/publish-message.d.ts.map +1 -0
  69. package/dist/tools/publish-message.js +80 -0
  70. package/dist/tools/publish-message.js.map +1 -0
  71. package/dist/tools/purge-queue.d.ts +7 -0
  72. package/dist/tools/purge-queue.d.ts.map +1 -0
  73. package/dist/tools/purge-queue.js +8 -0
  74. package/dist/tools/purge-queue.js.map +1 -0
  75. package/dist/tools/validate-message.d.ts +11 -0
  76. package/dist/tools/validate-message.d.ts.map +1 -0
  77. package/dist/tools/validate-message.js +20 -0
  78. package/dist/tools/validate-message.js.map +1 -0
  79. package/package.json +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-exchanges.js","sourceRoot":"","sources":["../../src/tools/list-exchanges.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAsB,EACtB,KAAa;IAEb,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAEpD,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { RabbitMQClient } from "../rabbitmq/client.js";
2
+ export interface ListQueuesResult {
3
+ queues: Array<{
4
+ name: string;
5
+ messages_ready: number;
6
+ messages_unacknowledged: number;
7
+ state: string;
8
+ }>;
9
+ }
10
+ export declare function listQueues(client: RabbitMQClient, vhost: string): Promise<ListQueuesResult>;
11
+ //# sourceMappingURL=list-queues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-queues.d.ts","sourceRoot":"","sources":["../../src/tools/list-queues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,uBAAuB,EAAE,MAAM,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAW3B"}
@@ -0,0 +1,12 @@
1
+ export async function listQueues(client, vhost) {
2
+ const queues = await client.listQueues(vhost);
3
+ return {
4
+ queues: queues.map((q) => ({
5
+ name: q.name,
6
+ messages_ready: q.messages_ready,
7
+ messages_unacknowledged: q.messages_unacknowledged,
8
+ state: q.state,
9
+ })),
10
+ };
11
+ }
12
+ //# sourceMappingURL=list-queues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-queues.js","sourceRoot":"","sources":["../../src/tools/list-queues.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAsB,EACtB,KAAa;IAEb,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,uBAAuB,EAAE,CAAC,CAAC,uBAAuB;YAClD,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { SchemaValidator } from "../schemas/validator.js";
2
+ export interface ListSchemasResult {
3
+ schemas: Array<{
4
+ name: string;
5
+ version: string;
6
+ title: string;
7
+ description: string;
8
+ }>;
9
+ }
10
+ export declare function listSchemas(validator: SchemaValidator): ListSchemasResult;
11
+ //# sourceMappingURL=list-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-schemas.d.ts","sourceRoot":"","sources":["../../src/tools/list-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,eAAe,GAAG,iBAAiB,CAazE"}
@@ -0,0 +1,14 @@
1
+ export function listSchemas(validator) {
2
+ const names = validator.getSchemaNames();
3
+ const schemas = names.map((name) => {
4
+ const entry = validator.getSchema(name);
5
+ return {
6
+ name: entry.name,
7
+ version: entry.version,
8
+ title: entry.title,
9
+ description: entry.description,
10
+ };
11
+ });
12
+ return { schemas };
13
+ }
14
+ //# sourceMappingURL=list-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-schemas.js","sourceRoot":"","sources":["../../src/tools/list-schemas.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,WAAW,CAAC,SAA0B;IACpD,MAAM,KAAK,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC;QACzC,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { RabbitMQClient } from "../rabbitmq/client.js";
2
+ export interface PeekMessagesResult {
3
+ messages: Array<{
4
+ payload: string;
5
+ properties: {
6
+ correlation_id?: string;
7
+ message_id?: string;
8
+ type?: string;
9
+ timestamp?: number;
10
+ headers?: Record<string, unknown>;
11
+ content_type?: string;
12
+ };
13
+ exchange: string;
14
+ routing_key: string;
15
+ }>;
16
+ count: number;
17
+ }
18
+ export declare function peekMessages(client: RabbitMQClient, vhost: string, queue: string, count: number): Promise<PeekMessagesResult>;
19
+ //# sourceMappingURL=peek-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peek-messages.d.ts","sourceRoot":"","sources":["../../src/tools/peek-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE;YACV,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAClC,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;QACF,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,CAAC,CAmB7B"}
@@ -0,0 +1,20 @@
1
+ export async function peekMessages(client, vhost, queue, count) {
2
+ const messages = await client.peekMessages(vhost, queue, count);
3
+ return {
4
+ messages: messages.map((m) => ({
5
+ payload: m.payload,
6
+ properties: {
7
+ correlation_id: m.properties.correlation_id,
8
+ message_id: m.properties.message_id,
9
+ type: m.properties.type,
10
+ timestamp: m.properties.timestamp,
11
+ headers: m.properties.headers,
12
+ content_type: m.properties.content_type,
13
+ },
14
+ exchange: m.exchange,
15
+ routing_key: m.routing_key,
16
+ })),
17
+ count: messages.length,
18
+ };
19
+ }
20
+ //# sourceMappingURL=peek-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peek-messages.js","sourceRoot":"","sources":["../../src/tools/peek-messages.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAsB,EACtB,KAAa,EACb,KAAa,EACb,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAEhE,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,UAAU,EAAE;gBACV,cAAc,EAAE,CAAC,CAAC,UAAU,CAAC,cAAc;gBAC3C,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,UAAU;gBACnC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI;gBACvB,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS;gBACjC,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO;gBAC7B,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY;aACxC;YACD,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC;QACH,KAAK,EAAE,QAAQ,CAAC,MAAM;KACvB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { RabbitMQClient } from "../rabbitmq/client.js";
2
+ import type { SchemaValidator } from "../schemas/validator.js";
3
+ export interface PublishMessageParams {
4
+ exchange: string;
5
+ routing_key: string;
6
+ payload: string;
7
+ message_type?: string;
8
+ headers?: Record<string, unknown>;
9
+ validate: boolean;
10
+ vhost: string;
11
+ }
12
+ export interface PublishMessageResult {
13
+ published: boolean;
14
+ routed: boolean;
15
+ exchange: string;
16
+ routing_key: string;
17
+ validation: {
18
+ validated: boolean;
19
+ schemaName: string | null;
20
+ valid: boolean | null;
21
+ errors: Array<{
22
+ path: string;
23
+ message: string;
24
+ }>;
25
+ };
26
+ }
27
+ export declare function publishMessage(client: RabbitMQClient, validator: SchemaValidator, params: PublishMessageParams): Promise<PublishMessageResult>;
28
+ //# sourceMappingURL=publish-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-message.d.ts","sourceRoot":"","sources":["../../src/tools/publish-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAClD,CAAC;CACH;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAyF/B"}
@@ -0,0 +1,80 @@
1
+ export async function publishMessage(client, validator, params) {
2
+ const { exchange, routing_key, payload, message_type, headers, validate, vhost } = params;
3
+ const baseResult = {
4
+ published: false,
5
+ routed: false,
6
+ exchange,
7
+ routing_key,
8
+ validation: {
9
+ validated: false,
10
+ schemaName: message_type ?? null,
11
+ valid: null,
12
+ errors: [],
13
+ },
14
+ };
15
+ // 1. Always parse payload as JSON. Block publish if invalid.
16
+ let parsedPayload;
17
+ try {
18
+ parsedPayload = JSON.parse(payload);
19
+ }
20
+ catch {
21
+ return {
22
+ ...baseResult,
23
+ validation: {
24
+ ...baseResult.validation,
25
+ errors: [{ path: "", message: "Invalid JSON payload" }],
26
+ },
27
+ };
28
+ }
29
+ // 2. Validate if requested and message_type is provided
30
+ if (validate && message_type) {
31
+ const schemaEntry = validator.getSchema(message_type);
32
+ if (!schemaEntry) {
33
+ return {
34
+ ...baseResult,
35
+ validation: {
36
+ ...baseResult.validation,
37
+ validated: true,
38
+ valid: false,
39
+ errors: [{ path: "", message: `Schema "${message_type}" not found` }],
40
+ },
41
+ };
42
+ }
43
+ const validationResult = validator.validate(message_type, parsedPayload);
44
+ if (!validationResult.valid) {
45
+ return {
46
+ ...baseResult,
47
+ validation: {
48
+ ...baseResult.validation,
49
+ validated: true,
50
+ valid: false,
51
+ errors: validationResult.errors,
52
+ },
53
+ };
54
+ }
55
+ baseResult.validation.validated = true;
56
+ baseResult.validation.valid = true;
57
+ }
58
+ // 3. Publish via client
59
+ const properties = {
60
+ content_type: "application/json",
61
+ };
62
+ if (message_type) {
63
+ properties.type = message_type;
64
+ }
65
+ if (headers) {
66
+ properties.headers = headers;
67
+ }
68
+ const response = await client.publishMessage(vhost, exchange, {
69
+ routing_key,
70
+ payload,
71
+ payload_encoding: "string",
72
+ properties,
73
+ });
74
+ return {
75
+ ...baseResult,
76
+ published: true,
77
+ routed: response.routed,
78
+ };
79
+ }
80
+ //# sourceMappingURL=publish-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-message.js","sourceRoot":"","sources":["../../src/tools/publish-message.ts"],"names":[],"mappings":"AA0BA,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAsB,EACtB,SAA0B,EAC1B,MAA4B;IAE5B,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAE1F,MAAM,UAAU,GAAyB;QACvC,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,KAAK;QACb,QAAQ;QACR,WAAW;QACX,UAAU,EAAE;YACV,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,YAAY,IAAI,IAAI;YAChC,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,EAAE;SACX;KACF,CAAC;IAEF,6DAA6D;IAC7D,IAAI,aAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,GAAG,UAAU;YACb,UAAU,EAAE;gBACV,GAAG,UAAU,CAAC,UAAU;gBACxB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;aACxD;SACF,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAEtD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;gBACL,GAAG,UAAU;gBACb,UAAU,EAAE;oBACV,GAAG,UAAU,CAAC,UAAU;oBACxB,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,YAAY,aAAa,EAAE,CAAC;iBACtE;aACF,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAEzE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO;gBACL,GAAG,UAAU;gBACb,UAAU,EAAE;oBACV,GAAG,UAAU,CAAC,UAAU;oBACxB,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,gBAAgB,CAAC,MAAM;iBAChC;aACF,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC;QACvC,UAAU,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;IACrC,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAA4B;QAC1C,YAAY,EAAE,kBAAkB;KACjC,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,UAAU,CAAC,IAAI,GAAG,YAAY,CAAC;IACjC,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE;QAC5D,WAAW;QACX,OAAO;QACP,gBAAgB,EAAE,QAAQ;QAC1B,UAAU;KACX,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,UAAU;QACb,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { RabbitMQClient } from "../rabbitmq/client.js";
2
+ export interface PurgeQueueResult {
3
+ queue: string;
4
+ messages_purged: number;
5
+ }
6
+ export declare function purgeQueue(client: RabbitMQClient, vhost: string, queue: string): Promise<PurgeQueueResult>;
7
+ //# sourceMappingURL=purge-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge-queue.d.ts","sourceRoot":"","sources":["../../src/tools/purge-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAO3B"}
@@ -0,0 +1,8 @@
1
+ export async function purgeQueue(client, vhost, queue) {
2
+ const response = await client.purgeQueue(vhost, queue);
3
+ return {
4
+ queue,
5
+ messages_purged: response.messages_purged,
6
+ };
7
+ }
8
+ //# sourceMappingURL=purge-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge-queue.js","sourceRoot":"","sources":["../../src/tools/purge-queue.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAsB,EACtB,KAAa,EACb,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEvD,OAAO;QACL,KAAK;QACL,eAAe,EAAE,QAAQ,CAAC,eAAe;KAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { SchemaValidator } from "../schemas/validator.js";
2
+ export interface ValidateMessageResult {
3
+ schemaName: string;
4
+ valid: boolean;
5
+ errors: Array<{
6
+ path: string;
7
+ message: string;
8
+ }>;
9
+ }
10
+ export declare function validateMessage(validator: SchemaValidator, schemaName: string, messageJson: string): ValidateMessageResult;
11
+ //# sourceMappingURL=validate-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-message.d.ts","sourceRoot":"","sources":["../../src/tools/validate-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,eAAe,EAC1B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,qBAAqB,CAmBvB"}
@@ -0,0 +1,20 @@
1
+ export function validateMessage(validator, schemaName, messageJson) {
2
+ let parsed;
3
+ try {
4
+ parsed = JSON.parse(messageJson);
5
+ }
6
+ catch {
7
+ return {
8
+ schemaName,
9
+ valid: false,
10
+ errors: [{ path: "", message: "Invalid JSON: failed to parse message" }],
11
+ };
12
+ }
13
+ const result = validator.validate(schemaName, parsed);
14
+ return {
15
+ schemaName,
16
+ valid: result.valid,
17
+ errors: result.errors,
18
+ };
19
+ }
20
+ //# sourceMappingURL=validate-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-message.js","sourceRoot":"","sources":["../../src/tools/validate-message.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,eAAe,CAC7B,SAA0B,EAC1B,UAAkB,EAClB,WAAmB;IAEnB,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,UAAU;YACV,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;SACzE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAqB,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExE,OAAO;QACL,UAAU;QACV,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "queue-pilot",
3
+ "version": "0.2.0",
4
+ "description": "MCP server for message queue development — combines RabbitMQ message inspection with JSON Schema validation",
5
+ "type": "module",
6
+ "bin": {
7
+ "queue-pilot": "./dist/index.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ }
15
+ },
16
+ "types": "./dist/index.d.ts",
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc && shx chmod +x dist/index.js",
22
+ "dev": "tsx src/index.ts",
23
+ "test": "vitest run --exclude src/integration.test.ts",
24
+ "test:watch": "vitest --exclude src/integration.test.ts",
25
+ "test:coverage": "vitest run --coverage --exclude src/integration.test.ts",
26
+ "lint": "tsc --noEmit",
27
+ "test:integration": "vitest run src/integration.test.ts",
28
+ "prepublishOnly": "npm test && npm run build"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://github.com/LarsCowe/queue-pilot.git"
33
+ },
34
+ "homepage": "https://github.com/LarsCowe/queue-pilot#readme",
35
+ "bugs": {
36
+ "url": "https://github.com/LarsCowe/queue-pilot/issues"
37
+ },
38
+ "keywords": [
39
+ "mcp",
40
+ "rabbitmq",
41
+ "message-queue",
42
+ "schema-validation",
43
+ "json-schema"
44
+ ],
45
+ "author": "Lars",
46
+ "license": "MIT",
47
+ "engines": {
48
+ "node": ">=22.0.0"
49
+ },
50
+ "dependencies": {
51
+ "@modelcontextprotocol/sdk": "^1.26.0",
52
+ "ajv": "^8.17.1",
53
+ "ajv-formats": "^3.0.1",
54
+ "zod": "^3.25.76"
55
+ },
56
+ "devDependencies": {
57
+ "@types/node": "^22.19.11",
58
+ "@vitest/coverage-v8": "^3.2.4",
59
+ "shx": "^0.3.4",
60
+ "tsx": "^4.21.0",
61
+ "typescript": "^5.9.3",
62
+ "vitest": "^3.2.4"
63
+ }
64
+ }