@eduware/oneroster 1.2.5 → 1.2.6

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.
@@ -0,0 +1,2 @@
1
+ export * from '../models/shared/index.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/enums/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("../models/shared/index.js"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/enums/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C"}
@@ -0,0 +1,2 @@
1
+ export * from './components/index.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./components/index.js"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC"}
@@ -5,4 +5,5 @@ export type { Result } from './fp.js';
5
5
  export type { PageIterator, Paginator } from './operations.js';
6
6
  export { createPageIterator } from './operations.js';
7
7
  export { RFCDate } from './rfcdate.js';
8
+ export * from '../models/operations/index.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,cAAc,+BAA+B,CAAC"}
@@ -1,4 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
17
  exports.RFCDate = exports.createPageIterator = exports.catchUnrecognizedEnum = exports.isBlobLike = exports.blobLikeSchema = void 0;
4
18
  var blobs_js_1 = require("./blobs.js");
@@ -10,4 +24,6 @@ var operations_js_1 = require("./operations.js");
10
24
  Object.defineProperty(exports, "createPageIterator", { enumerable: true, get: function () { return operations_js_1.createPageIterator; } });
11
25
  var rfcdate_js_1 = require("./rfcdate.js");
12
26
  Object.defineProperty(exports, "RFCDate", { enumerable: true, get: function () { return rfcdate_js_1.RFCDate; } });
27
+ // Re-export API operations for a single runtime-compatible import path.
28
+ __exportStar(require("../models/operations/index.js"), exports);
13
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,uCAAwD;AAA/C,0GAAA,cAAc,OAAA;AAAE,sGAAA,UAAU,OAAA;AAEnC,uCAAmD;AAA1C,iHAAA,qBAAqB,OAAA;AAG9B,iDAAqD;AAA5C,mHAAA,kBAAkB,OAAA;AAC3B,2CAAuC;AAA9B,qGAAA,OAAO,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uCAAwD;AAA/C,0GAAA,cAAc,OAAA;AAAE,sGAAA,UAAU,OAAA;AAEnC,uCAAmD;AAA1C,iHAAA,qBAAqB,OAAA;AAG9B,iDAAqD;AAA5C,mHAAA,kBAAkB,OAAA;AAC3B,2CAAuC;AAA9B,qGAAA,OAAO,OAAA;AAEhB,wEAAwE;AACxE,gEAA8C"}
@@ -0,0 +1,2 @@
1
+ export * from '../models/shared/index.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/enums/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from '../models/shared/index.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/enums/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './components/index.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './components/index.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -5,4 +5,5 @@ export type { Result } from './fp.js';
5
5
  export type { PageIterator, Paginator } from './operations.js';
6
6
  export { createPageIterator } from './operations.js';
7
7
  export { RFCDate } from './rfcdate.js';
8
+ export * from '../models/operations/index.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,cAAc,+BAA+B,CAAC"}
@@ -2,4 +2,6 @@ export { blobLikeSchema, isBlobLike } from './blobs.js';
2
2
  export { catchUnrecognizedEnum } from './enums.js';
3
3
  export { createPageIterator } from './operations.js';
4
4
  export { RFCDate } from './rfcdate.js';
5
+ // Re-export API operations for a single runtime-compatible import path.
6
+ export * from '../models/operations/index.js';
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,wEAAwE;AACxE,cAAc,+BAA+B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eduware/oneroster",
3
- "version": "1.2.5",
3
+ "version": "1.2.6",
4
4
  "description": "A TypeScript/JavaScript SDK for the OneRoster API standard - manage students, teachers, classes, enrollments, and academic data for K-12 education systems",
5
5
  "author": "Eduware",
6
6
  "license": "MIT",
@@ -51,13 +51,10 @@
51
51
  "./package.json": "./package.json",
52
52
  "./types": "./src/types/index.ts",
53
53
  "./clients": "./src/clients/index.ts",
54
- "./sdk": "./src/sdk/index.ts",
55
- "./models/errors": "./src/models/errors/index.ts",
56
- "./models/components": "./src/models/components/index.ts",
57
- "./models/operations": "./src/models/operations/index.ts",
58
- "./models/shared": "./src/models/shared/index.ts",
59
- "./*.js": "./src/*.ts",
60
- "./*": "./src/*.ts"
54
+ "./enums": "./src/enums/index.ts",
55
+ "./models": "./src/models/index.ts",
56
+ "./core.js": "./src/core.ts",
57
+ "./funcs/*": "./src/funcs/*.ts"
61
58
  }
62
59
  },
63
60
  "sideEffects": false,
@@ -144,81 +141,48 @@
144
141
  "default": "./dist/commonjs/clients/index.js"
145
142
  }
146
143
  },
147
- "./sdk": {
144
+ "./enums": {
148
145
  "import": {
149
- "@eduware/oneroster/source": "./src/sdk/index.ts",
150
- "types": "./dist/esm/sdk/index.d.ts",
151
- "default": "./dist/esm/sdk/index.js"
146
+ "@eduware/oneroster/source": "./src/enums/index.ts",
147
+ "types": "./dist/esm/enums/index.d.ts",
148
+ "default": "./dist/esm/enums/index.js"
152
149
  },
153
150
  "require": {
154
- "types": "./dist/commonjs/sdk/index.d.ts",
155
- "default": "./dist/commonjs/sdk/index.js"
151
+ "types": "./dist/commonjs/enums/index.d.ts",
152
+ "default": "./dist/commonjs/enums/index.js"
156
153
  }
157
154
  },
158
- "./models/errors": {
155
+ "./models": {
159
156
  "import": {
160
- "@eduware/oneroster/source": "./src/models/errors/index.ts",
161
- "types": "./dist/esm/models/errors/index.d.ts",
162
- "default": "./dist/esm/models/errors/index.js"
157
+ "@eduware/oneroster/source": "./src/models/index.ts",
158
+ "types": "./dist/esm/models/index.d.ts",
159
+ "default": "./dist/esm/models/index.js"
163
160
  },
164
161
  "require": {
165
- "types": "./dist/commonjs/models/errors/index.d.ts",
166
- "default": "./dist/commonjs/models/errors/index.js"
162
+ "types": "./dist/commonjs/models/index.d.ts",
163
+ "default": "./dist/commonjs/models/index.js"
167
164
  }
168
165
  },
169
- "./models/components": {
166
+ "./core.js": {
170
167
  "import": {
171
- "@eduware/oneroster/source": "./src/models/components/index.ts",
172
- "types": "./dist/esm/models/components/index.d.ts",
173
- "default": "./dist/esm/models/components/index.js"
168
+ "@eduware/oneroster/source": "./src/core.ts",
169
+ "types": "./dist/esm/core.d.ts",
170
+ "default": "./dist/esm/core.js"
174
171
  },
175
172
  "require": {
176
- "types": "./dist/commonjs/models/components/index.d.ts",
177
- "default": "./dist/commonjs/models/components/index.js"
173
+ "types": "./dist/commonjs/core.d.ts",
174
+ "default": "./dist/commonjs/core.js"
178
175
  }
179
176
  },
180
- "./models/operations": {
177
+ "./funcs/*": {
181
178
  "import": {
182
- "@eduware/oneroster/source": "./src/models/operations/index.ts",
183
- "types": "./dist/esm/models/operations/index.d.ts",
184
- "default": "./dist/esm/models/operations/index.js"
179
+ "@eduware/oneroster/source": "./src/funcs/*.ts",
180
+ "types": "./dist/esm/funcs/*.d.ts",
181
+ "default": "./dist/esm/funcs/*.js"
185
182
  },
186
183
  "require": {
187
- "types": "./dist/commonjs/models/operations/index.d.ts",
188
- "default": "./dist/commonjs/models/operations/index.js"
189
- }
190
- },
191
- "./models/shared": {
192
- "import": {
193
- "@eduware/oneroster/source": "./src/models/shared/index.ts",
194
- "types": "./dist/esm/models/shared/index.d.ts",
195
- "default": "./dist/esm/models/shared/index.js"
196
- },
197
- "require": {
198
- "types": "./dist/commonjs/models/shared/index.d.ts",
199
- "default": "./dist/commonjs/models/shared/index.js"
200
- }
201
- },
202
- "./*.js": {
203
- "import": {
204
- "@eduware/oneroster/source": "./src/*.ts",
205
- "types": "./dist/esm/*.d.ts",
206
- "default": "./dist/esm/*.js"
207
- },
208
- "require": {
209
- "types": "./dist/commonjs/*.d.ts",
210
- "default": "./dist/commonjs/*.js"
211
- }
212
- },
213
- "./*": {
214
- "import": {
215
- "@eduware/oneroster/source": "./src/*.ts",
216
- "types": "./dist/esm/*.d.ts",
217
- "default": "./dist/esm/*.js"
218
- },
219
- "require": {
220
- "types": "./dist/commonjs/*.d.ts",
221
- "default": "./dist/commonjs/*.js"
184
+ "types": "./dist/commonjs/funcs/*.d.ts",
185
+ "default": "./dist/commonjs/funcs/*.js"
222
186
  }
223
187
  }
224
188
  },
@@ -230,26 +194,20 @@
230
194
  "clients": [
231
195
  "./dist/esm/clients/index.d.ts"
232
196
  ],
233
- "sdk": [
234
- "./dist/esm/sdk/index.d.ts"
235
- ],
236
197
  "types": [
237
198
  "./dist/esm/types/index.d.ts"
238
199
  ],
239
- "models/errors": [
240
- "./dist/esm/models/errors/index.d.ts"
241
- ],
242
- "models/components": [
243
- "./dist/esm/models/components/index.d.ts"
200
+ "enums": [
201
+ "./dist/esm/enums/index.d.ts"
244
202
  ],
245
- "models/operations": [
246
- "./dist/esm/models/operations/index.d.ts"
203
+ "models": [
204
+ "./dist/esm/models/index.d.ts"
247
205
  ],
248
- "models/shared": [
249
- "./dist/esm/models/shared/index.d.ts"
206
+ "core.js": [
207
+ "./dist/esm/core.d.ts"
250
208
  ],
251
- "*": [
252
- "./dist/esm/*.d.ts"
209
+ "funcs/*": [
210
+ "./dist/esm/funcs/*.d.ts"
253
211
  ]
254
212
  }
255
213
  },
@@ -0,0 +1 @@
1
+ export * from '../models/shared/index.js';
@@ -0,0 +1 @@
1
+ export * from './components/index.js';
@@ -5,3 +5,6 @@ export type { Result } from './fp.js';
5
5
  export type { PageIterator, Paginator } from './operations.js';
6
6
  export { createPageIterator } from './operations.js';
7
7
  export { RFCDate } from './rfcdate.js';
8
+
9
+ // Re-export API operations for a single runtime-compatible import path.
10
+ export * from '../models/operations/index.js';
package/vitest.config.ts CHANGED
@@ -19,8 +19,8 @@ export default defineConfig({
19
19
  DOTENV_CONFIG_PATH: './test/.env',
20
20
  },
21
21
 
22
- // Reporter options - use default + custom summary reporter
23
- reporters: ['default', './test/summary-reporter.ts'],
22
+ // Reporter options
23
+ reporters: ['default'],
24
24
 
25
25
  // Globals (describe, it, expect, etc.)
26
26
  globals: true,
@@ -1,114 +0,0 @@
1
- /**
2
- * Custom Vitest Reporter that prints a summary of passed/failed endpoints
3
- */
4
-
5
- import type { Reporter, File, Task } from 'vitest';
6
-
7
- interface TestResult {
8
- endpoint: string;
9
- status: 'passed' | 'failed';
10
- error?: string;
11
- }
12
-
13
- export default class SummaryReporter implements Reporter {
14
- private results: Map<string, TestResult[]> = new Map();
15
-
16
- onFinished(files?: File[]) {
17
- if (!files) return;
18
-
19
- // Process all test results
20
- for (const file of files) {
21
- this.processFile(file);
22
- }
23
-
24
- // Print summary
25
- this.printSummary();
26
- }
27
-
28
- private processFile(file: File) {
29
- for (const task of file.tasks) {
30
- this.processTask(task, null);
31
- }
32
- }
33
-
34
- private processTask(task: Task, authType: string | null) {
35
- // Check if this is an auth type suite (e.g., "OAUTH1 API Operations")
36
- const authMatch = task.name.match(/^(OAUTH1|OAUTH2|BEARER) API Operations$/);
37
- if (authMatch) {
38
- authType = authMatch[1]!;
39
- }
40
-
41
- if (task.type === 'suite' && 'tasks' in task && task.tasks) {
42
- for (const child of task.tasks) {
43
- this.processTask(child, authType);
44
- }
45
- } else if (task.type === 'test' && authType) {
46
- const passed = task.result?.state === 'pass';
47
- const errorMsg = this.getShortError(task.result?.errors?.[0]?.message);
48
- this.recordResult(authType, task.name, passed ? 'passed' : 'failed', errorMsg);
49
- }
50
- }
51
-
52
- private getShortError(error?: string): string | undefined {
53
- if (!error) return undefined;
54
- if (error.includes('404')) return '404 Not Found';
55
- if (error.includes('401')) return '401 Unauthorized';
56
- if (error.includes('403')) return '403 Forbidden';
57
- if (error.includes('ResponseValidationError') || error.includes('Zod'))
58
- return 'Response validation';
59
- if (error.length > 40) return error.substring(0, 37) + '...';
60
- return error;
61
- }
62
-
63
- private recordResult(
64
- authType: string,
65
- endpoint: string,
66
- status: 'passed' | 'failed',
67
- error?: string
68
- ) {
69
- if (!this.results.has(authType)) {
70
- this.results.set(authType, []);
71
- }
72
-
73
- // Avoid duplicates
74
- const existing = this.results.get(authType)!;
75
- if (!existing.some((r) => r.endpoint === endpoint)) {
76
- existing.push({ endpoint, status, error });
77
- }
78
- }
79
-
80
- private printSummary() {
81
- console.log('\n');
82
- console.log('╔══════════════════════════════════════════════════════════════════╗');
83
- console.log('║ TEST RESULTS SUMMARY ║');
84
- console.log('╚══════════════════════════════════════════════════════════════════╝');
85
-
86
- for (const [authType, results] of this.results) {
87
- const passed = results.filter((r) => r.status === 'passed');
88
- const failed = results.filter((r) => r.status === 'failed');
89
-
90
- console.log(`\n┌──────────────────────────────────────────────────────────────────┐`);
91
- console.log(
92
- `│ ${authType.padEnd(10)} - ${String(passed.length).padStart(2)} passed, ${String(failed.length).padStart(2)} failed`
93
- );
94
- console.log(`└──────────────────────────────────────────────────────────────────┘`);
95
-
96
- if (passed.length > 0) {
97
- console.log('\n ✅ PASSED:');
98
- for (const r of passed) {
99
- console.log(` • ${r.endpoint}`);
100
- }
101
- }
102
-
103
- if (failed.length > 0) {
104
- console.log('\n ❌ FAILED:');
105
- for (const r of failed) {
106
- const reason = r.error ? ` (${r.error})` : '';
107
- console.log(` • ${r.endpoint}${reason}`);
108
- }
109
- }
110
- }
111
-
112
- console.log('\n' + '═'.repeat(70) + '\n');
113
- }
114
- }