@grantex/conformance 0.1.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 (98) hide show
  1. package/README.md +115 -0
  2. package/dist/cleanup.d.ts +15 -0
  3. package/dist/cleanup.d.ts.map +1 -0
  4. package/dist/cleanup.js +62 -0
  5. package/dist/cleanup.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +41 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/flow.d.ts +29 -0
  11. package/dist/flow.d.ts.map +1 -0
  12. package/dist/flow.js +77 -0
  13. package/dist/flow.js.map +1 -0
  14. package/dist/helpers.d.ts +15 -0
  15. package/dist/helpers.d.ts.map +1 -0
  16. package/dist/helpers.js +70 -0
  17. package/dist/helpers.js.map +1 -0
  18. package/dist/http-client.d.ts +15 -0
  19. package/dist/http-client.d.ts.map +1 -0
  20. package/dist/http-client.js +71 -0
  21. package/dist/http-client.js.map +1 -0
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +4 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/reporter.d.ts +4 -0
  27. package/dist/reporter.d.ts.map +1 -0
  28. package/dist/reporter.js +72 -0
  29. package/dist/reporter.js.map +1 -0
  30. package/dist/runner.d.ts +3 -0
  31. package/dist/runner.d.ts.map +1 -0
  32. package/dist/runner.js +160 -0
  33. package/dist/runner.js.map +1 -0
  34. package/dist/suites/agents.d.ts +3 -0
  35. package/dist/suites/agents.d.ts.map +1 -0
  36. package/dist/suites/agents.js +53 -0
  37. package/dist/suites/agents.js.map +1 -0
  38. package/dist/suites/anomalies.d.ts +3 -0
  39. package/dist/suites/anomalies.d.ts.map +1 -0
  40. package/dist/suites/anomalies.js +27 -0
  41. package/dist/suites/anomalies.js.map +1 -0
  42. package/dist/suites/audit.d.ts +3 -0
  43. package/dist/suites/audit.d.ts.map +1 -0
  44. package/dist/suites/audit.js +70 -0
  45. package/dist/suites/audit.js.map +1 -0
  46. package/dist/suites/authorize.d.ts +3 -0
  47. package/dist/suites/authorize.d.ts.map +1 -0
  48. package/dist/suites/authorize.js +54 -0
  49. package/dist/suites/authorize.js.map +1 -0
  50. package/dist/suites/compliance.d.ts +3 -0
  51. package/dist/suites/compliance.d.ts.map +1 -0
  52. package/dist/suites/compliance.js +33 -0
  53. package/dist/suites/compliance.js.map +1 -0
  54. package/dist/suites/delegation.d.ts +3 -0
  55. package/dist/suites/delegation.d.ts.map +1 -0
  56. package/dist/suites/delegation.js +120 -0
  57. package/dist/suites/delegation.js.map +1 -0
  58. package/dist/suites/grants.d.ts +3 -0
  59. package/dist/suites/grants.d.ts.map +1 -0
  60. package/dist/suites/grants.js +34 -0
  61. package/dist/suites/grants.js.map +1 -0
  62. package/dist/suites/health.d.ts +3 -0
  63. package/dist/suites/health.d.ts.map +1 -0
  64. package/dist/suites/health.js +30 -0
  65. package/dist/suites/health.js.map +1 -0
  66. package/dist/suites/policies.d.ts +3 -0
  67. package/dist/suites/policies.d.ts.map +1 -0
  68. package/dist/suites/policies.js +51 -0
  69. package/dist/suites/policies.js.map +1 -0
  70. package/dist/suites/scim.d.ts +3 -0
  71. package/dist/suites/scim.d.ts.map +1 -0
  72. package/dist/suites/scim.js +64 -0
  73. package/dist/suites/scim.js.map +1 -0
  74. package/dist/suites/security.d.ts +3 -0
  75. package/dist/suites/security.d.ts.map +1 -0
  76. package/dist/suites/security.js +69 -0
  77. package/dist/suites/security.js.map +1 -0
  78. package/dist/suites/sso.d.ts +3 -0
  79. package/dist/suites/sso.d.ts.map +1 -0
  80. package/dist/suites/sso.js +35 -0
  81. package/dist/suites/sso.js.map +1 -0
  82. package/dist/suites/token.d.ts +3 -0
  83. package/dist/suites/token.d.ts.map +1 -0
  84. package/dist/suites/token.js +61 -0
  85. package/dist/suites/token.js.map +1 -0
  86. package/dist/suites/tokens.d.ts +3 -0
  87. package/dist/suites/tokens.d.ts.map +1 -0
  88. package/dist/suites/tokens.js +43 -0
  89. package/dist/suites/tokens.js.map +1 -0
  90. package/dist/suites/webhooks.d.ts +3 -0
  91. package/dist/suites/webhooks.d.ts.map +1 -0
  92. package/dist/suites/webhooks.js +36 -0
  93. package/dist/suites/webhooks.js.map +1 -0
  94. package/dist/types.d.ts +60 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +2 -0
  97. package/dist/types.js.map +1 -0
  98. package/package.json +49 -0
@@ -0,0 +1,43 @@
1
+ import { test, expectStatus, expectKeys, expectEqual, expectBoolean } from '../helpers.js';
2
+ export const tokensSuite = {
3
+ name: 'tokens',
4
+ description: 'Token verification and revocation',
5
+ optional: false,
6
+ run: async (ctx) => {
7
+ const results = [];
8
+ const { agentId, agentDid } = ctx.sharedAgent;
9
+ // Execute full flow to get tokens (reuse shared agent)
10
+ const flow = await ctx.flow.executeFullFlow({ agentId, agentDid });
11
+ const grantToken = flow.grantToken;
12
+ results.push(await test('POST /v1/tokens/verify returns valid=true for active token', '§7.2', async () => {
13
+ const res = await ctx.http.post('/v1/tokens/verify', { token: grantToken });
14
+ expectStatus(res, 200);
15
+ expectKeys(res.body, ['valid', 'grantId', 'scopes', 'principal', 'agent', 'expiresAt']);
16
+ expectEqual(res.body.valid, true, 'valid');
17
+ }));
18
+ results.push(await test('POST /v1/tokens/revoke returns 204', '§7.3', async () => {
19
+ // Decode the JWT to get jti
20
+ const parts = grantToken.split('.');
21
+ const payload = JSON.parse(atob(parts[1]));
22
+ const res = await ctx.http.post('/v1/tokens/revoke', { jti: payload.jti });
23
+ expectStatus(res, 204);
24
+ }));
25
+ results.push(await test('POST /v1/tokens/verify returns valid=false after revocation', '§7.3', async () => {
26
+ const res = await ctx.http.post('/v1/tokens/verify', {
27
+ token: grantToken,
28
+ });
29
+ expectStatus(res, 200);
30
+ expectEqual(res.body.valid, false, 'valid');
31
+ }));
32
+ results.push(await test('POST /v1/tokens/verify returns valid=false for garbage token', '§7.2', async () => {
33
+ const res = await ctx.http.post('/v1/tokens/verify', {
34
+ token: 'not.a.valid.jwt.token',
35
+ });
36
+ expectStatus(res, 200);
37
+ expectBoolean(res.body.valid, 'valid');
38
+ expectEqual(res.body.valid, false, 'valid');
39
+ }));
40
+ return results;
41
+ },
42
+ };
43
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/suites/tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SuiteDefinition } from '../types.js';
2
+ export declare const webhooksSuite: SuiteDefinition;
3
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/suites/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,aAAa,CAAC;AAG7E,eAAO,MAAM,aAAa,EAAE,eA+C3B,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { test, expectStatus, expectKeys, expectString, expectArray } from '../helpers.js';
2
+ export const webhooksSuite = {
3
+ name: 'webhooks',
4
+ description: 'Webhook registration and management',
5
+ optional: true,
6
+ run: async (ctx) => {
7
+ const results = [];
8
+ let webhookId = '';
9
+ results.push(await test('POST /v1/webhooks creates webhook (201)', '§11', async () => {
10
+ const res = await ctx.http.post('/v1/webhooks', {
11
+ url: 'https://example.com/webhook',
12
+ events: ['grant.created', 'grant.revoked'],
13
+ });
14
+ expectStatus(res, 201);
15
+ expectKeys(res.body, ['id', 'url', 'events', 'secret']);
16
+ expectString(res.body.id, 'id');
17
+ expectString(res.body.secret, 'secret');
18
+ webhookId = res.body.id;
19
+ ctx.cleanup.trackWebhook(webhookId);
20
+ }));
21
+ results.push(await test('GET /v1/webhooks lists webhooks', '§11', async () => {
22
+ const res = await ctx.http.get('/v1/webhooks');
23
+ expectStatus(res, 200);
24
+ expectKeys(res.body, ['webhooks']);
25
+ expectArray(res.body.webhooks, 'webhooks');
26
+ }));
27
+ results.push(await test('DELETE /v1/webhooks/:id returns 204', '§11', async () => {
28
+ if (!webhookId)
29
+ throw new Error('No webhook created');
30
+ const res = await ctx.http.delete(`/v1/webhooks/${webhookId}`);
31
+ expectStatus(res, 204);
32
+ }));
33
+ return results;
34
+ },
35
+ };
36
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/suites/webhooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE1F,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,qCAAqC;IAClD,QAAQ,EAAE,IAAI;IACd,GAAG,EAAE,KAAK,EAAE,GAAiB,EAAyB,EAAE;QACtD,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,IAAI,SAAS,GAAG,EAAE,CAAC;QAEnB,OAAO,CAAC,IAAI,CACV,MAAM,IAAI,CAAC,yCAAyC,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAK5B,cAAc,EAAE;gBACjB,GAAG,EAAE,6BAA6B;gBAClC,MAAM,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC;aAC3C,CAAC,CAAC;YACH,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvB,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxD,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAChC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,CAAC,IAAI,CACV,MAAM,IAAI,CAAC,iCAAiC,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAA0B,cAAc,CAAC,CAAC;YACxE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvB,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YACnC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,CAAC,IAAI,CACV,MAAM,IAAI,CAAC,qCAAqC,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE;YAClE,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;YAC/D,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC"}
@@ -0,0 +1,60 @@
1
+ export interface RunConfig {
2
+ baseUrl: string;
3
+ apiKey: string;
4
+ suite?: string;
5
+ include?: string[];
6
+ format: 'text' | 'json';
7
+ bail: boolean;
8
+ }
9
+ export interface HttpResponse<T = unknown> {
10
+ status: number;
11
+ body: T;
12
+ rawText: string;
13
+ durationMs: number;
14
+ }
15
+ export type TestStatus = 'pass' | 'fail' | 'skip';
16
+ export interface TestResult {
17
+ name: string;
18
+ status: TestStatus;
19
+ durationMs: number;
20
+ specRef: string;
21
+ error?: string;
22
+ }
23
+ export interface SuiteResult {
24
+ name: string;
25
+ description: string;
26
+ optional: boolean;
27
+ tests: TestResult[];
28
+ durationMs: number;
29
+ }
30
+ export interface ConformanceReport {
31
+ suites: SuiteResult[];
32
+ summary: {
33
+ total: number;
34
+ passed: number;
35
+ failed: number;
36
+ skipped: number;
37
+ durationMs: number;
38
+ };
39
+ }
40
+ export interface SharedAgent {
41
+ agentId: string;
42
+ agentDid: string;
43
+ name: string;
44
+ }
45
+ export interface SuiteContext {
46
+ baseUrl: string;
47
+ apiKey: string;
48
+ http: import('./http-client.js').ConformanceHttpClient;
49
+ flow: import('./flow.js').AuthFlowHelper;
50
+ cleanup: import('./cleanup.js').CleanupTracker;
51
+ /** Pre-created agent shared across suites to avoid plan limits */
52
+ sharedAgent: SharedAgent;
53
+ }
54
+ export interface SuiteDefinition {
55
+ name: string;
56
+ description: string;
57
+ optional: boolean;
58
+ run: (ctx: SuiteContext) => Promise<TestResult[]>;
59
+ }
60
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,kBAAkB,EAAE,qBAAqB,CAAC;IACvD,IAAI,EAAE,OAAO,WAAW,EAAE,cAAc,CAAC;IACzC,OAAO,EAAE,OAAO,cAAc,EAAE,cAAc,CAAC;IAC/C,kEAAkE;IAClE,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CACnD"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@grantex/conformance",
3
+ "version": "0.1.0",
4
+ "description": "Conformance test suite for the Grantex protocol",
5
+ "type": "module",
6
+ "bin": {
7
+ "grantex-conformance": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc -p tsconfig.build.json",
15
+ "typecheck": "tsc --noEmit",
16
+ "test": "vitest run",
17
+ "test:watch": "vitest",
18
+ "dev": "node --loader ts-node/esm src/index.ts"
19
+ },
20
+ "dependencies": {
21
+ "chalk": "^5.3.0",
22
+ "commander": "^12.0.0"
23
+ },
24
+ "overrides": {
25
+ "esbuild": ">=0.25.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/node": "^20.11.0",
29
+ "typescript": "^5.3.3",
30
+ "vitest": "^1.3.1"
31
+ },
32
+ "engines": {
33
+ "node": ">=18.0.0"
34
+ },
35
+ "keywords": [
36
+ "grantex",
37
+ "conformance",
38
+ "testing",
39
+ "protocol",
40
+ "ai-agents",
41
+ "authorization",
42
+ "oauth"
43
+ ],
44
+ "license": "Apache-2.0",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/mishrasanjeev/grantex"
48
+ }
49
+ }