@nobulex/sdk 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 (81) hide show
  1. package/dist/adapters/express.d.ts +322 -0
  2. package/dist/adapters/express.d.ts.map +1 -0
  3. package/dist/adapters/express.js +356 -0
  4. package/dist/adapters/express.js.map +1 -0
  5. package/dist/adapters/index.d.ts +15 -0
  6. package/dist/adapters/index.d.ts.map +1 -0
  7. package/dist/adapters/index.js +15 -0
  8. package/dist/adapters/index.js.map +1 -0
  9. package/dist/adapters/langchain.d.ts +183 -0
  10. package/dist/adapters/langchain.d.ts.map +1 -0
  11. package/dist/adapters/langchain.js +203 -0
  12. package/dist/adapters/langchain.js.map +1 -0
  13. package/dist/adapters/vercel-ai.d.ts +122 -0
  14. package/dist/adapters/vercel-ai.d.ts.map +1 -0
  15. package/dist/adapters/vercel-ai.js +128 -0
  16. package/dist/adapters/vercel-ai.js.map +1 -0
  17. package/dist/benchmarks.d.ts +164 -0
  18. package/dist/benchmarks.d.ts.map +1 -0
  19. package/dist/benchmarks.js +327 -0
  20. package/dist/benchmarks.js.map +1 -0
  21. package/dist/benchmarks.test.d.ts +2 -0
  22. package/dist/benchmarks.test.d.ts.map +1 -0
  23. package/dist/benchmarks.test.js +71 -0
  24. package/dist/benchmarks.test.js.map +1 -0
  25. package/dist/conformance.d.ts +160 -0
  26. package/dist/conformance.d.ts.map +1 -0
  27. package/dist/conformance.js +1242 -0
  28. package/dist/conformance.js.map +1 -0
  29. package/dist/events.d.ts +176 -0
  30. package/dist/events.d.ts.map +1 -0
  31. package/dist/events.js +208 -0
  32. package/dist/events.js.map +1 -0
  33. package/dist/index.d.ts +384 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +695 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/index.test.d.ts +2 -0
  38. package/dist/index.test.d.ts.map +1 -0
  39. package/dist/index.test.js +986 -0
  40. package/dist/index.test.js.map +1 -0
  41. package/dist/middleware.d.ts +104 -0
  42. package/dist/middleware.d.ts.map +1 -0
  43. package/dist/middleware.js +222 -0
  44. package/dist/middleware.js.map +1 -0
  45. package/dist/middleware.test.d.ts +5 -0
  46. package/dist/middleware.test.d.ts.map +1 -0
  47. package/dist/middleware.test.js +735 -0
  48. package/dist/middleware.test.js.map +1 -0
  49. package/dist/plugins/auth.d.ts +49 -0
  50. package/dist/plugins/auth.d.ts.map +1 -0
  51. package/dist/plugins/auth.js +82 -0
  52. package/dist/plugins/auth.js.map +1 -0
  53. package/dist/plugins/cache.d.ts +40 -0
  54. package/dist/plugins/cache.d.ts.map +1 -0
  55. package/dist/plugins/cache.js +191 -0
  56. package/dist/plugins/cache.js.map +1 -0
  57. package/dist/plugins/index.d.ts +16 -0
  58. package/dist/plugins/index.d.ts.map +1 -0
  59. package/dist/plugins/index.js +12 -0
  60. package/dist/plugins/index.js.map +1 -0
  61. package/dist/plugins/metrics-plugin.d.ts +32 -0
  62. package/dist/plugins/metrics-plugin.d.ts.map +1 -0
  63. package/dist/plugins/metrics-plugin.js +61 -0
  64. package/dist/plugins/metrics-plugin.js.map +1 -0
  65. package/dist/plugins/plugins.test.d.ts +8 -0
  66. package/dist/plugins/plugins.test.d.ts.map +1 -0
  67. package/dist/plugins/plugins.test.js +640 -0
  68. package/dist/plugins/plugins.test.js.map +1 -0
  69. package/dist/plugins/retry-plugin.d.ts +55 -0
  70. package/dist/plugins/retry-plugin.d.ts.map +1 -0
  71. package/dist/plugins/retry-plugin.js +133 -0
  72. package/dist/plugins/retry-plugin.js.map +1 -0
  73. package/dist/telemetry.d.ts +183 -0
  74. package/dist/telemetry.d.ts.map +1 -0
  75. package/dist/telemetry.js +241 -0
  76. package/dist/telemetry.js.map +1 -0
  77. package/dist/types.d.ts +200 -0
  78. package/dist/types.d.ts.map +1 -0
  79. package/dist/types.js +8 -0
  80. package/dist/types.js.map +1 -0
  81. package/package.json +52 -0
@@ -0,0 +1,71 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { runBenchmarkSuite, benchmark, PERFORMANCE_SLAS, formatBenchmarkResults } from './benchmarks.js';
3
+ describe('Performance SLAs', () => {
4
+ it('all SLA targets are met', async () => {
5
+ const results = await runBenchmarkSuite();
6
+ console.log(formatBenchmarkResults(results));
7
+ expect(results.allPassed).toBe(true);
8
+ }, 60_000); // 60s timeout for benchmarks
9
+ it('PERFORMANCE_SLAS covers all critical operations', () => {
10
+ const required = [
11
+ 'crypto.generateKeyPair',
12
+ 'crypto.sign',
13
+ 'crypto.verify',
14
+ 'ccl.parse',
15
+ 'ccl.evaluate',
16
+ 'covenant.build',
17
+ 'covenant.verify',
18
+ ];
19
+ for (const op of required) {
20
+ expect(PERFORMANCE_SLAS).toHaveProperty(op);
21
+ }
22
+ });
23
+ it('benchmark utility computes correct percentiles', async () => {
24
+ const result = await benchmark('test.noop', () => { }, 100);
25
+ expect(result.iterations).toBe(100);
26
+ expect(result.p50).toBeLessThanOrEqual(result.p95);
27
+ expect(result.p95).toBeLessThanOrEqual(result.p99);
28
+ expect(result.min).toBeLessThanOrEqual(result.p50);
29
+ expect(result.max).toBeGreaterThanOrEqual(result.p99);
30
+ });
31
+ it('benchmark result has correct structure', async () => {
32
+ const result = await benchmark('test.structure', () => { }, 50);
33
+ expect(result).toHaveProperty('name', 'test.structure');
34
+ expect(result).toHaveProperty('iterations', 50);
35
+ expect(typeof result.p50).toBe('number');
36
+ expect(typeof result.p95).toBe('number');
37
+ expect(typeof result.p99).toBe('number');
38
+ expect(typeof result.min).toBe('number');
39
+ expect(typeof result.max).toBe('number');
40
+ expect(typeof result.mean).toBe('number');
41
+ expect(typeof result.slaTarget).toBe('number');
42
+ expect(typeof result.slaPassed).toBe('boolean');
43
+ });
44
+ it('formatBenchmarkResults produces readable output', async () => {
45
+ const result = await benchmark('test.format', () => { }, 50);
46
+ const suiteResult = {
47
+ results: [result],
48
+ allPassed: true,
49
+ totalDuration: 100,
50
+ timestamp: new Date().toISOString(),
51
+ };
52
+ const output = formatBenchmarkResults(suiteResult);
53
+ expect(output).toContain('test.format');
54
+ expect(output).toContain('PASS');
55
+ expect(output).toContain('Stele Performance Benchmark Suite');
56
+ });
57
+ it('PERFORMANCE_SLAS has all 13 targets', () => {
58
+ const keys = Object.keys(PERFORMANCE_SLAS);
59
+ expect(keys.length).toBe(13);
60
+ });
61
+ it('all SLA targets have required fields', () => {
62
+ for (const [name, sla] of Object.entries(PERFORMANCE_SLAS)) {
63
+ expect(typeof sla.p99).toBe('number');
64
+ expect(sla.unit).toBe('ms');
65
+ expect(typeof sla.description).toBe('string');
66
+ expect(sla.description.length).toBeGreaterThan(0);
67
+ expect(sla.p99).toBeGreaterThan(0);
68
+ }
69
+ });
70
+ });
71
+ //# sourceMappingURL=benchmarks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmarks.test.js","sourceRoot":"","sources":["../src/benchmarks.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Stele Protocol Conformance Suite
3
+ *
4
+ * Provides test vectors and validation functions for any implementation
5
+ * of the Stele protocol. Implementations that pass all conformance checks
6
+ * are considered spec-compliant.
7
+ *
8
+ * Like the W3C Acid Tests for browsers or TLS conformance suites --
9
+ * a standardized set of test vectors that any Stele implementation must pass.
10
+ *
11
+ * This module is self-contained at runtime: it uses the provided
12
+ * {@link ConformanceTarget} interface to generate keys and test documents.
13
+ * Type imports from @stele packages are used only for interface definitions.
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ import type { CovenantDocument, CovenantBuilderOptions, VerificationResult } from '@nobulex/core';
18
+ import type { CCLDocument, EvaluationResult as CCLEvaluationResult } from '@nobulex/ccl';
19
+ import type { KeyPair } from '@nobulex/crypto';
20
+ /** Aggregate result from running the full conformance suite. */
21
+ export interface ConformanceResult {
22
+ /** True when every check passed. */
23
+ passed: boolean;
24
+ /** Total number of individual checks that were executed. */
25
+ total: number;
26
+ /** Details for every check that failed. */
27
+ failures: ConformanceFailure[];
28
+ /** Wall-clock duration in milliseconds. */
29
+ duration: number;
30
+ }
31
+ /** A single conformance check that did not pass. */
32
+ export interface ConformanceFailure {
33
+ /** Short identifier for the check (e.g. `"ed25519-roundtrip"`). */
34
+ test: string;
35
+ /** Category the check belongs to (e.g. `"crypto"`, `"ccl"`). */
36
+ category: string;
37
+ /** The value the check expected. */
38
+ expected: unknown;
39
+ /** The value the implementation actually produced. */
40
+ actual: unknown;
41
+ /** Human-readable explanation of the failure. */
42
+ message: string;
43
+ }
44
+ /**
45
+ * Functions that the implementation under test must provide.
46
+ *
47
+ * Any Stele-compatible implementation can be tested by wiring up these
48
+ * functions and passing the resulting object to {@link runConformanceSuite}.
49
+ */
50
+ export interface ConformanceTarget {
51
+ /** Build a signed covenant document from builder options. */
52
+ buildCovenant: (options: CovenantBuilderOptions) => Promise<CovenantDocument>;
53
+ /** Verify a covenant document. Returns `{ valid, checks }`. */
54
+ verifyCovenant: (doc: CovenantDocument) => Promise<VerificationResult>;
55
+ /** Evaluate an action/resource against a covenant's CCL constraints. */
56
+ evaluateAction: (doc: CovenantDocument, action: string, resource: string, context?: Record<string, unknown>) => Promise<CCLEvaluationResult>;
57
+ /** Generate an Ed25519 key pair. Returns `{ privateKey, publicKey, publicKeyHex }`. */
58
+ generateKeyPair: () => Promise<KeyPair>;
59
+ /** Sign a message with an Ed25519 private key. */
60
+ sign: (message: Uint8Array, privateKey: Uint8Array) => Promise<Uint8Array>;
61
+ /** Verify an Ed25519 signature. */
62
+ verify: (message: Uint8Array, signature: Uint8Array, publicKey: Uint8Array) => Promise<boolean>;
63
+ /** SHA-256 hash returning a lowercase hex string. */
64
+ sha256: (data: Uint8Array) => Promise<string> | string;
65
+ /** Parse CCL source text into a CCLDocument. */
66
+ parseCCL: (source: string) => CCLDocument;
67
+ }
68
+ /** Result from a single conformance category. */
69
+ interface CategoryResult {
70
+ failures: ConformanceFailure[];
71
+ total: number;
72
+ }
73
+ /**
74
+ * Verify that the target's cryptographic primitives conform to spec.
75
+ *
76
+ * Checks:
77
+ * - Ed25519 sign/verify round-trip
78
+ * - SHA-256 known-answer tests (NIST vectors)
79
+ * - Signature verification rejects tampered messages
80
+ * - Different keys produce different signatures
81
+ * - Wrong public key rejects valid signature
82
+ */
83
+ export declare function cryptoConformance(target: ConformanceTarget): Promise<CategoryResult>;
84
+ /**
85
+ * Verify that the target's CCL parser and evaluator conform to spec.
86
+ *
87
+ * Checks:
88
+ * - `permit read on '/data'` permits read on /data
89
+ * - `deny write on '/system/**'` denies write on /system/config
90
+ * - Default deny: no matching rule results in denied
91
+ * - Deny-wins: permit + deny on same resource results in denied
92
+ * - Wildcards: `**` matches nested paths
93
+ * - Rate limits parse correctly
94
+ * - Conditions evaluate correctly
95
+ * - Exact resource matching: `/secrets` does NOT match `/secrets/key`
96
+ */
97
+ export declare function cclConformance(target: ConformanceTarget): Promise<CategoryResult>;
98
+ /**
99
+ * Verify that the target's covenant build/verify lifecycle conforms to spec.
100
+ *
101
+ * Checks:
102
+ * - Build -> verify round-trip
103
+ * - Tampered covenant fails verification
104
+ * - Expired covenant detected
105
+ * - ID integrity check (id matches content hash)
106
+ * - Constraints must be valid CCL
107
+ * - Nonce must be present
108
+ * - Signature is a hex string of correct length
109
+ */
110
+ export declare function covenantConformance(target: ConformanceTarget): Promise<CategoryResult>;
111
+ /**
112
+ * Verify cross-implementation interoperability.
113
+ *
114
+ * Checks:
115
+ * - Canonical JSON test vectors (JCS compatibility)
116
+ * - JSON serialize/deserialize round-trip
117
+ * - Document ID matches reference canonical form hash
118
+ * - ID format (64-char lowercase hex)
119
+ * - Protocol version is "1.0"
120
+ * - Nonce format (64-char hex)
121
+ */
122
+ export declare function interopConformance(target: ConformanceTarget): Promise<CategoryResult>;
123
+ /**
124
+ * Run the complete Stele Protocol Conformance Suite.
125
+ *
126
+ * Executes all four categories (crypto, CCL, covenant, interop) and
127
+ * aggregates the results. An implementation that returns
128
+ * `result.passed === true` is considered spec-compliant.
129
+ *
130
+ * @param target - The implementation under test.
131
+ * @returns Aggregate conformance result.
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * import { runConformanceSuite } from '@nobulex/sdk/conformance';
136
+ * import { buildCovenant, verifyCovenant } from '@nobulex/core';
137
+ * import { generateKeyPair, sign, verify, sha256 } from '@nobulex/crypto';
138
+ * import { parse, evaluate } from '@nobulex/ccl';
139
+ *
140
+ * const result = await runConformanceSuite({
141
+ * buildCovenant,
142
+ * verifyCovenant,
143
+ * evaluateAction: async (doc, action, resource, ctx) => {
144
+ * const cclDoc = parse(doc.constraints);
145
+ * return evaluate(cclDoc, action, resource, ctx);
146
+ * },
147
+ * generateKeyPair,
148
+ * sign: async (msg, key) => sign(msg, key),
149
+ * verify: async (msg, sig, key) => verify(msg, sig, key),
150
+ * sha256: (data) => sha256(data),
151
+ * parseCCL: parse,
152
+ * });
153
+ *
154
+ * console.log(result.passed); // true
155
+ * console.log(result.total); // number of checks run
156
+ * ```
157
+ */
158
+ export declare function runConformanceSuite(target: ConformanceTarget): Promise<ConformanceResult>;
159
+ export {};
160
+ //# sourceMappingURL=conformance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"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"}