@more-ink/irt-edge 1.3.0 → 2.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @more-ink/irt-edge
2
2
 
3
+ ## 2.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Fix Redis diagnostics endpoint to accept both verbs and ship runtime deps in FC layer.
8
+
9
+ ## 2.0.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 8d8c76b: Add multi-skill recording support: the core engine now ingests multiple skill scores from a single item interaction, and irt-edge exposes a matching `/api/irt/answer-multi` endpoint plus SDK helpers.
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [8d8c76b]
18
+ - @more-ink/irt-core@1.1.0
19
+
20
+ ## Unreleased
21
+
22
+ ### Minor Changes
23
+
24
+ - Add `POST /api/irt/answer-multi` route plus SDK support (`recordMultiSkillAnswers`) to record several skill scores for the same item in one call, including docs and examples.
25
+
3
26
  ## 1.3.0
4
27
 
5
28
  ### Minor Changes
@@ -51,7 +74,6 @@
51
74
  - `ItemStateResponse<TSkillId>`
52
75
  - And all other related types
53
76
 
54
-
55
77
  ## 1.1.0
56
78
 
57
79
  ### Minor Changes
package/README.md CHANGED
@@ -29,8 +29,6 @@
29
29
  ```bash
30
30
  npm install @more-ink/irt-edge @more-ink/irt-core
31
31
  # or
32
- pnpm add @more-ink/irt-edge @more-ink/irt-core
33
- # or
34
32
  yarn add @more-ink/irt-edge @more-ink/irt-core
35
33
  ```
36
34
 
@@ -115,6 +113,51 @@ if (result.nextItem) {
115
113
  }
116
114
  ```
117
115
 
116
+ #### recordMultiSkillAnswers()
117
+
118
+ Record multiple skill scores that came from a single multi-skill item. This is useful when one interaction yields separate sub-skill scores (e.g., integrated tasks that grade both reading and writing).
119
+
120
+ ```typescript
121
+ async recordMultiSkillAnswers(
122
+ params: RecordMultiSkillAnswersRequest,
123
+ ): Promise<RecordMultiSkillAnswersResponse>
124
+ ```
125
+
126
+ **Parameters:**
127
+
128
+ ```typescript
129
+ interface RecordMultiSkillAnswersRequest {
130
+ userId: string
131
+ itemId: string
132
+ timestamp?: number
133
+ updateOptions?: Partial<UpdateOptions>
134
+ skillScores: Array<{
135
+ skillId: string
136
+ score: number // [0,1]
137
+ updateOptions?: Partial<UpdateOptions>
138
+ }>
139
+ }
140
+ ```
141
+
142
+ **Returns:** Array of per-skill updates with theta, SE, updated user/item snapshots.
143
+
144
+ **Example:**
145
+
146
+ ```typescript
147
+ const multi = await client.recordMultiSkillAnswers({
148
+ userId: 'alice',
149
+ itemId: 'essay-22',
150
+ skillScores: [
151
+ { skillId: 'reading', score: 0.9 },
152
+ { skillId: 'writing', score: 0.6 },
153
+ ],
154
+ })
155
+
156
+ multi.results.forEach((entry) => {
157
+ console.log(entry.skillId, entry.theta, entry.se)
158
+ })
159
+ ```
160
+
118
161
  #### recordAnswerOnly()
119
162
 
120
163
  Record a user's response without requesting the next recommended item (useful when you already control sequencing).
@@ -159,6 +202,15 @@ async getItemState(itemId: string, skillId: string): Promise<ItemStateResponse>
159
202
  async getItemStates(itemId: string): Promise<ItemStatesResponse>
160
203
  ```
161
204
 
205
+ #### deleteUser() / deleteItem()
206
+
207
+ Delete a user (and their skill states) or an item (and all per-skill calibrations). These are mainly for integration tests and fixture cleanup.
208
+
209
+ ```typescript
210
+ async deleteUser(userId: string): Promise<DeleteUserResponse>
211
+ async deleteItem(itemId: string): Promise<DeleteItemResponse>
212
+ ```
213
+
162
214
  #### health()
163
215
 
164
216
  Check API server health status.
@@ -211,7 +263,7 @@ The backend server is **not published** to npm. It runs as a service on Aliyun F
211
263
 
212
264
  ### Features
213
265
 
214
- - RESTful IRT API with Redis storage (Upstash)
266
+ - RESTful IRT API backed by **PostgreSQL via Prisma** (Redis route kept only for diagnostics)
215
267
  - Aliyun FC lifecycle hooks (`/initialize`, `/pre-stop`)
216
268
  - Graceful shutdown and health checks
217
269
 
@@ -219,17 +271,17 @@ The backend server is **not published** to npm. It runs as a service on Aliyun F
219
271
 
220
272
  ```bash
221
273
  # From repo root
222
- pnpm install
274
+ npm install
223
275
 
224
276
  # Create .env file with:
225
277
  # UPSTASH_REDIS_REST_URL=https://...
226
278
  # UPSTASH_REDIS_REST_TOKEN=...
227
279
 
228
280
  # Run dev server
229
- pnpm --filter @more-ink/irt-edge dev
281
+ npm run --workspace @more-ink/irt-edge dev
230
282
 
231
283
  # Seed data
232
- pnpm --filter @more-ink/irt-edge seed
284
+ npm run --workspace @more-ink/irt-edge seed
233
285
  ```
234
286
 
235
287
  ### Backend Environment Variables
@@ -239,16 +291,17 @@ pnpm --filter @more-ink/irt-edge seed
239
291
  ALIYUN_ACCESS_KEY="YOUR_ALIYUN_ACCESS_KEY"
240
292
  ALIYUN_SECRET_ACCESS_KEY="YOUR_ALIYUN_SECRET_KEY"
241
293
 
242
- # Upstash Redis
243
- UPSTASH_REDIS_URL_DK="https://upstash-redis-dk.duoink.co"
244
- UPSTASH_REDIS_TOKEN_DK="YOUR_UPSTASH_TOKEN"
294
+ # Database (PostgreSQL via Prisma)
295
+ DATABASE_URL="postgres://user:pass@host:port/db?schema=public"
296
+ # If using PgBouncer / pooled connections, also set DIRECT_URL for Prisma CLI commands
297
+ # DIRECT_URL="postgres://user:pass@host:port/db?schema=public"
245
298
 
246
299
  # Feishu (Lark) Integration
247
300
  FEISHU_APP_ID="YOUR_FEISHU_APP_ID"
248
301
  FEISHU_APP_SECRET="YOUR_FEISHU_APP_SECRET"
249
302
  FEISHU_CHAT_ID="YOUR_FEISHU_CHAT_ID"
250
303
 
251
- # Optional Redis fallback
304
+ # Optional legacy Redis diagnostics route
252
305
  REDIS_URL=""
253
306
  REDIS_DB=2
254
307
 
@@ -265,12 +318,15 @@ See `src/index.ts` for default IRT engine parameters (learning rates, selection
265
318
 
266
319
  **IRT Operations:**
267
320
  - `POST /api/irt/answer` - Record response and get next item
321
+ - `POST /api/irt/answer-multi` - Record multiple skill responses for one item
268
322
  - `POST /api/irt/next-item` - Get next item without recording response
323
+ - `DELETE /api/irt/users/:userId` - Delete a user and all skill states
324
+ - `DELETE /api/irt/items/:itemId` - Delete an item and its per-skill calibrations
269
325
  - `GET /api/irt/health` - Health check
270
326
 
271
327
  **Aliyun FC Lifecycle:**
272
- - `POST /initialize` - Instance startup (verifies Redis)
273
- - `GET /pre-stop` - Instance shutdown (closes Redis)
328
+ - `POST /initialize` - Instance startup (verifies Prisma DB and Redis diag route if configured)
329
+ - `GET /pre-stop` - Instance shutdown (closes Prisma DB and Redis if used)
274
330
 
275
331
  **System:**
276
332
  - `GET /` - Service info
@@ -282,19 +338,20 @@ See `src/index.ts` for default IRT engine parameters (learning rates, selection
282
338
  Deploy the backend server to Aliyun FC:
283
339
 
284
340
  ```bash
285
- pnpm --filter @more-ink/irt-edge run deploy
286
- # or from root
287
- pnpm dp
341
+ # From root (recommended)
342
+ npm run dp
343
+
344
+ # Or from package dir
345
+ npm run --workspace @more-ink/irt-edge deploy
288
346
  ```
289
347
 
290
348
  ### How Deployment Works
291
349
 
292
- The deploy process handles pnpm's symlinked `node_modules`:
293
- 1. Build TypeScript to `dist/`
294
- 2. Run `pnpm deploy --prod` to create `deploy-output/` with flat `node_modules`
295
- 3. Upload from `deploy-output/` as an FC layer
350
+ Deployment now runs directly from the package root with npm-installed `node_modules` (no flattening step needed):
351
+ 1. Run `npm run --workspace @more-ink/irt-edge deploy` (runs `prisma generate`, then `build`, then `fc-deploy` from the package root)
352
+ 2. Upload from the package root; `node_modules` already contains real files.
296
353
 
297
- This ensures all dependencies are included, not just symlinks to pnpm's store.
354
+ Ensure `DATABASE_URL` (and `DIRECT_URL` if pooling) is set in the function env.
298
355
 
299
356
  ---
300
357
 
@@ -304,11 +361,11 @@ Publish the SDK to npm (backend code stays private):
304
361
 
305
362
  ```bash
306
363
  # From repo root (recommended)
307
- pnpm pub
364
+ npm run pub
308
365
 
309
366
  # Or from package directory
310
367
  cd packages/irt-edge
311
- pnpm publish:sdk
368
+ npm run publish:sdk
312
369
 
313
370
  # Or using npm directly
314
371
  npm publish --access public
@@ -326,7 +383,7 @@ npm publish --access public
326
383
  - ❌ Backend server code (`src/index.ts`, `routes.ts`, `storage/`)
327
384
  - ❌ Scripts and tests (`scripts/`, `tests/`)
328
385
  - ❌ Config files (`.env`, `tsconfig.json`, etc.)
329
- - ❌ Backend build output (`dist/`, `deploy-output/`)
386
+ - ❌ Backend build output (`dist/`)
330
387
 
331
388
  The `.npmignore` file ensures only SDK files are published.
332
389
 
@@ -339,8 +396,8 @@ Before publishing:
339
396
  - Update `CHANGELOG.md` with changes
340
397
 
341
398
  2. **Code Quality**
342
- - Build SDK: `pnpm build:sdk`
343
- - Run tests: `pnpm test`
399
+ - Build SDK: `npm run --workspace @more-ink/irt-edge build:sdk`
400
+ - Run tests: `npm run --workspace @more-ink/irt-edge test`
344
401
  - Check TypeScript: `tsc -p tsconfig.sdk.json --noEmit`
345
402
 
346
403
  3. **Verify Package**
@@ -349,7 +406,7 @@ Before publishing:
349
406
  - Verify only SDK files included
350
407
 
351
408
  4. **Publish**
352
- - `pnpm pub` (auto-builds before publishing)
409
+ - `npm run pub` (auto-builds before publishing)
353
410
 
354
411
  5. **Post-Publishing**
355
412
  - Verify on npm: https://www.npmjs.com/package/@more-ink/irt-edge
@@ -370,20 +427,20 @@ node -e "const { IrtClient } = require('@more-ink/irt-edge'); console.log('OK')"
370
427
  ## Package Scripts
371
428
 
372
429
  ### Development & Backend
373
- - `pnpm dev` - Run dev server with hot reload
374
- - `pnpm build` - Build backend server to `dist/`
375
- - `pnpm start` - Start production backend server
376
- - `pnpm seed` - Seed Redis with test data
377
- - `pnpm deploy` - Deploy backend to Aliyun FC
430
+ - `npm run --workspace @more-ink/irt-edge dev` - Run dev server with hot reload
431
+ - `npm run --workspace @more-ink/irt-edge build` - Build backend server to `dist/`
432
+ - `npm run --workspace @more-ink/irt-edge start` - Start production backend server
433
+ - `npm run --workspace @more-ink/irt-edge seed` - Seed Redis with test data
434
+ - `npm run --workspace @more-ink/irt-edge deploy` - Deploy backend to Aliyun FC
378
435
 
379
436
  ### SDK Publishing
380
- - `pnpm build:sdk` - Build SDK to `sdk/`
381
- - `pnpm publish:sdk` - Build and publish SDK to npm
382
- - `pnpm pub` - Shortcut for `pnpm publish:sdk` (from root)
437
+ - `npm run --workspace @more-ink/irt-edge build:sdk` - Build SDK to `sdk/`
438
+ - `npm run --workspace @more-ink/irt-edge publish:sdk` - Build and publish SDK to npm
439
+ - `npm run pub` - Shortcut for `npm run --workspace @more-ink/irt-edge publish:sdk` (from root)
383
440
 
384
441
  ### Testing
385
- - `pnpm test` - Run test suite
386
- - `pnpm test:watch` - Run tests in watch mode
442
+ - `npm run --workspace @more-ink/irt-edge test` - Run test suite
443
+ - `npm run --workspace @more-ink/irt-edge test:watch` - Run tests in watch mode
387
444
 
388
445
  ---
389
446
 
@@ -409,4 +466,3 @@ irt-edge/
409
466
  ## License
410
467
 
411
468
  Proprietary - All Rights Reserved
412
-
@@ -53,7 +53,26 @@ async function main() {
53
53
  console.log('Next Item:', answerResult.nextItem)
54
54
  console.log()
55
55
 
56
- // 3. Get current user state
56
+ // 3. Record multiple skill scores for a single multi-skill item
57
+ console.log('=== Record Multi-Skill Answer ===')
58
+ const multiResult = await client.recordMultiSkillAnswers({
59
+ userId: 'demo-user-001',
60
+ itemId: 'passage-77',
61
+ timestamp: Date.now(),
62
+ skillScores: [
63
+ { skillId: 'math-algebra', score: 0.7 },
64
+ { skillId: 'math-geometry', score: 0.45 },
65
+ ],
66
+ })
67
+
68
+ multiResult.results.forEach((entry) => {
69
+ console.log(
70
+ `Skill ${entry.skillId}: theta=${entry.theta.toFixed(3)} (SE=${entry.se.toFixed(3)})`
71
+ )
72
+ })
73
+ console.log()
74
+
75
+ // 4. Get current user state
57
76
  console.log('=== Get User State ===')
58
77
  const userState = await client.getUserState('demo-user-001', 'math-algebra')
59
78
  console.log('Current Theta:', userState.user.theta.toFixed(3))
@@ -61,7 +80,7 @@ async function main() {
61
80
  console.log('Standard Error:', userState.se.toFixed(3))
62
81
  console.log()
63
82
 
64
- // 4. Get all skill states for a user
83
+ // 5. Get all skill states for a user
65
84
  console.log('=== Get All User Skills ===')
66
85
  const allUserStates = await client.getUserStates('demo-user-001')
67
86
  console.log(`User has ${allUserStates.count} skill(s):`)
@@ -70,7 +89,7 @@ async function main() {
70
89
  })
71
90
  console.log()
72
91
 
73
- // 5. Select next item without recording a response
92
+ // 6. Select next item without recording a response
74
93
  console.log('=== Select Next Item (without answer) ===')
75
94
  const nextItem = await client.selectNextItem({
76
95
  userId: 'demo-user-001',
@@ -85,7 +104,7 @@ async function main() {
85
104
  console.log('Recommended Item:', nextItem.nextItem)
86
105
  console.log()
87
106
 
88
- // 6. Get item state
107
+ // 7. Get item state
89
108
  if (nextItem.nextItem) {
90
109
  console.log('=== Get Item State ===')
91
110
  const itemState = await client.getItemState(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@more-ink/irt-edge",
3
- "version": "1.3.0",
3
+ "version": "2.1.0",
4
4
  "description": "IRT Edge API client SDK for JavaScript/TypeScript frontends.",
5
5
  "main": "sdk/index.js",
6
6
  "types": "sdk/index.d.ts",
@@ -17,32 +17,40 @@
17
17
  "CHANGELOG.md",
18
18
  "examples"
19
19
  ],
20
- "peerDependencies": {
21
- "@more-ink/irt-core": "^1.0.0"
22
- },
23
- "dependencies": {},
24
- "devDependencies": {
25
- "@hono/node-server": "^1.19.6",
26
- "@larksuiteoapi/node-sdk": "^1.55.0",
27
- "@upstash/redis": "^1.35.7",
28
- "dotenv": "^16.6.1",
29
- "fc-deploy": "^1.2.3",
30
- "hono": "^4.10.7",
31
- "ioredis": "^5.8.2",
32
- "tslib": "^2.8.1",
33
- "@more-ink/irt-core": "1.0.0"
34
- },
35
20
  "scripts": {
36
- "build": "tsc -p tsconfig.json",
21
+ "build": "bash scripts/build.sh",
37
22
  "build:sdk": "tsc -p tsconfig.sdk.json",
38
23
  "start": "node dist/index.js",
39
24
  "test": "vitest run",
40
25
  "test:watch": "vitest watch",
41
26
  "lint": "echo \"Add ESLint config\" && exit 0",
42
27
  "format": "echo \"Add Prettier config\" && exit 0",
43
- "dev": "tsx watch src/index.ts",
28
+ "dev": "tsx watch --require dotenv/config src/index.ts",
44
29
  "seed": "tsx src/seed.ts",
45
- "predeploy": "pnpm run build && rm -rf deploy-output && pnpm deploy --prod --legacy --filter=@more-ink/irt-edge deploy-output && tsx scripts/flattenNodeModules.ts",
46
- "deploy": "tsx scripts/deploy.ts"
30
+ "deploy": "npm run build && npm run layer:deps && tsx scripts/deploy.ts",
31
+ "cost": "npx cost-of-modules --less --no-install",
32
+ "layer:clean": "rm -rf .layer",
33
+ "layer:deps": "bash scripts/layer-deps.sh"
34
+ },
35
+ "peerDependencies": {
36
+ "@more-ink/irt-core": "^1.2.0"
37
+ },
38
+ "dependencies": {
39
+ "@hono/node-server": "^1.19.6",
40
+ "@more-ink/irt-core": "^1.2.0",
41
+ "@prisma/adapter-pg": "^7.1.0",
42
+ "@prisma/client": "^7.1.0",
43
+ "dayjs": "^1.11.19",
44
+ "dotenv": "^16.6.1",
45
+ "hono": "^4.10.7",
46
+ "ioredis": "^5.8.2",
47
+ "tslib": "^2.8.1",
48
+ "undici": "^7.0.1"
49
+ },
50
+ "devDependencies": {
51
+ "prisma": "^7.1.0",
52
+ "@larksuiteoapi/node-sdk": "^1.55.0",
53
+ "@upstash/redis": "^1.35.7",
54
+ "fc-deploy": "^1.2.9"
47
55
  }
48
56
  }
package/sdk/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { IrtClientConfig, RecordAnswerRequest, RecordAnswerResponse, RecordAnswerOnlyResponse, SelectNextItemRequest, SelectNextItemResponse, UserStateResponse, UserStatesResponse, ItemStateResponse, ItemStatesResponse, HealthResponse } from './types';
1
+ import type { IrtClientConfig, RecordAnswerRequest, RecordAnswerResponse, RecordAnswerOnlyResponse, RecordMultiSkillAnswersRequest, RecordMultiSkillAnswersResponse, SelectNextItemRequest, SelectNextItemResponse, UserStateResponse, UserStatesResponse, ItemStateResponse, ItemStatesResponse, HealthResponse, DeleteUserResponse, DeleteItemResponse } from './types';
2
2
  /**
3
3
  * IRT Edge API Client
4
4
  *
@@ -48,6 +48,13 @@ export declare class IrtClient<TSkillId = string> {
48
48
  * @returns Updated user state, standard error, and next item
49
49
  */
50
50
  recordAnswer(params: RecordAnswerRequest<TSkillId>): Promise<RecordAnswerResponse<TSkillId>>;
51
+ /**
52
+ * Record multiple skill responses tied to a single item interaction
53
+ *
54
+ * @param params - Multi-skill answer payload
55
+ * @returns Array of per-skill update results
56
+ */
57
+ recordMultiSkillAnswers(params: RecordMultiSkillAnswersRequest<TSkillId>): Promise<RecordMultiSkillAnswersResponse<TSkillId>>;
51
58
  /**
52
59
  * Record a user response without requesting the next item recommendation
53
60
  *
@@ -92,6 +99,20 @@ export declare class IrtClient<TSkillId = string> {
92
99
  * @returns All item instances across skills
93
100
  */
94
101
  getItemStates(itemId: string): Promise<ItemStatesResponse<TSkillId>>;
102
+ /**
103
+ * Delete a user and all associated skill states.
104
+ *
105
+ * @param userId - User identifier
106
+ * @returns Deletion result
107
+ */
108
+ deleteUser(userId: string): Promise<DeleteUserResponse>;
109
+ /**
110
+ * Delete an item and all associated skill calibrations.
111
+ *
112
+ * @param itemId - Item identifier
113
+ * @returns Deletion result
114
+ */
115
+ deleteItem(itemId: string): Promise<DeleteItemResponse>;
95
116
  /**
96
117
  * Check API health status
97
118
  *
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/sdk/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EAEf,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,SAAS,CAAC,QAAQ,GAAG,MAAM;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;gBAEpB,MAAM,EAAE,eAAe;IASnC;;OAEG;YACW,OAAO;IAgDrB;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAOlG;;;;;OAKG;IACG,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAO1G;;;;;OAKG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAOxG;;;;;;OAMG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAI3F;;;;;OAKG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAI1E;;;;;;OAMG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAI3F;;;;;OAKG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAI1E;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;CAGxC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,CAE/F"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/sdk/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,+BAA+B,EAC/B,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EAEd,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,SAAS,CAAC,QAAQ,GAAG,MAAM;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;gBAEpB,MAAM,EAAE,eAAe;IASnC;;OAEG;YACW,OAAO;IAgDrB;;;;;OAKG;IACG,YAAY,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAOlG;;;;;OAKG;IACG,uBAAuB,CAC3B,MAAM,EAAE,8BAA8B,CAAC,QAAQ,CAAC,GAC/C,OAAO,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC;IAOrD;;;;;OAKG;IACG,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAO1G;;;;;OAKG;IACG,cAAc,CAAC,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAOxG;;;;;;OAMG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAI3F;;;;;OAKG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAI1E;;;;;;OAMG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAI3F;;;;;OAKG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAI1E;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAM7D;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAM7D;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;CAGxC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,CAE/F"}
package/sdk/client.js CHANGED
@@ -99,6 +99,18 @@ class IrtClient {
99
99
  body: JSON.stringify(params),
100
100
  });
101
101
  }
102
+ /**
103
+ * Record multiple skill responses tied to a single item interaction
104
+ *
105
+ * @param params - Multi-skill answer payload
106
+ * @returns Array of per-skill update results
107
+ */
108
+ async recordMultiSkillAnswers(params) {
109
+ return this.request('/api/irt/answer-multi', {
110
+ method: 'POST',
111
+ body: JSON.stringify(params),
112
+ });
113
+ }
102
114
  /**
103
115
  * Record a user response without requesting the next item recommendation
104
116
  *
@@ -161,6 +173,28 @@ class IrtClient {
161
173
  async getItemStates(itemId) {
162
174
  return this.request(`/api/irt/items/${encodeURIComponent(itemId)}`);
163
175
  }
176
+ /**
177
+ * Delete a user and all associated skill states.
178
+ *
179
+ * @param userId - User identifier
180
+ * @returns Deletion result
181
+ */
182
+ async deleteUser(userId) {
183
+ return this.request(`/api/irt/users/${encodeURIComponent(userId)}`, {
184
+ method: 'DELETE',
185
+ });
186
+ }
187
+ /**
188
+ * Delete an item and all associated skill calibrations.
189
+ *
190
+ * @param itemId - Item identifier
191
+ * @returns Deletion result
192
+ */
193
+ async deleteItem(itemId) {
194
+ return this.request(`/api/irt/items/${encodeURIComponent(itemId)}`, {
195
+ method: 'DELETE',
196
+ });
197
+ }
164
198
  /**
165
199
  * Check API health status
166
200
  *
package/sdk/client.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/sdk/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/sdk/client.ts"],"names":[],"mappings":"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"}
package/sdk/index.d.ts CHANGED
@@ -41,6 +41,6 @@
41
41
  * ```
42
42
  */
43
43
  export { IrtClient, createIrtClient } from './client';
44
- export type { IrtClientConfig, RecordAnswerRequest, RecordAnswerResponse, RecordAnswerOnlyResponse, SelectNextItemRequest, SelectNextItemResponse, UserStateResponse, UserStatesResponse, ItemStateResponse, ItemStatesResponse, HealthResponse, ApiResponse, GetUserStateRequest, GetUserStatesRequest, GetItemStateRequest, GetItemStatesRequest, } from './types';
44
+ export type { IrtClientConfig, RecordAnswerRequest, RecordAnswerResponse, RecordAnswerOnlyResponse, RecordMultiSkillAnswersRequest, RecordMultiSkillAnswersResponse, SelectNextItemRequest, SelectNextItemResponse, UserStateResponse, UserStatesResponse, ItemStateResponse, ItemStatesResponse, HealthResponse, ApiResponse, GetUserStateRequest, GetUserStatesRequest, GetItemStateRequest, GetItemStatesRequest, DeleteUserResponse, DeleteItemResponse, } from './types';
45
45
  export type { UserSkillState, ItemWithMetadata, UpdateOptions, NextItemOptions, } from '@more-ink/irt-core';
46
46
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACrD,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,SAAS,CAAA;AAGhB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACrD,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,+BAA+B,EAC/B,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,SAAS,CAAA;AAGhB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,oBAAoB,CAAA"}
package/sdk/types.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Type definitions for the IRT Edge API SDK
3
3
  */
4
- import type { UserSkillState, ItemWithMetadata, UpdateOptions, NextItemOptions } from '@more-ink/irt-core';
4
+ import type { UserSkillState, ItemWithMetadata, UpdateOptions, NextItemOptions, MultiSkillScore, MultiSkillRecordResult } from '@more-ink/irt-core';
5
5
  /**
6
6
  * Payload for recording a learner's response to an item.
7
7
  * @template TSkillId Identifier type for skills (defaults to string).
@@ -22,6 +22,21 @@ export interface RecordAnswerRequest<TSkillId = string> {
22
22
  /** Optional overrides for the follow-up item selection call. */
23
23
  selectionOptions?: Partial<NextItemOptions>;
24
24
  }
25
+ /**
26
+ * Payload for recording multiple skill responses tied to the same item interaction.
27
+ */
28
+ export interface RecordMultiSkillAnswersRequest<TSkillId = string> {
29
+ /** Unique learner identifier shared across skill updates. */
30
+ userId: string;
31
+ /** Item identifier that produced the multi-skill scores. */
32
+ itemId: string;
33
+ /** Optional event timestamp applied to every skill update. */
34
+ timestamp?: number;
35
+ /** Baseline update overrides applied to each skill unless overridden per entry. */
36
+ updateOptions?: Partial<UpdateOptions>;
37
+ /** Skill-specific scores generated from the same item. */
38
+ skillScores: MultiSkillScore<TSkillId>[];
39
+ }
25
40
  /**
26
41
  * Request payload for fetching the next recommended item for a skill.
27
42
  */
@@ -104,6 +119,13 @@ export interface RecordAnswerOnlyResponse<TSkillId = string> {
104
119
  /** Updated item calibration metadata. */
105
120
  updatedItem: ItemWithMetadata<TSkillId>;
106
121
  }
122
+ /**
123
+ * Response payload returned after recording multiple skill responses for a single item.
124
+ */
125
+ export interface RecordMultiSkillAnswersResponse<TSkillId = string> {
126
+ /** Per-skill update results, preserving input order. */
127
+ results: MultiSkillRecordResult<TSkillId>[];
128
+ }
107
129
  /**
108
130
  * Response payload returned when requesting the next item only.
109
131
  */
@@ -149,6 +171,24 @@ export interface ItemStatesResponse<TSkillId = string> {
149
171
  /** Count of returned calibrations. */
150
172
  count: number;
151
173
  }
174
+ /**
175
+ * Response payload returned when deleting a user.
176
+ */
177
+ export interface DeleteUserResponse {
178
+ /** User identifier that was targeted for deletion. */
179
+ userId: string;
180
+ /** Indicates whether the delete call succeeded. */
181
+ deleted: boolean;
182
+ }
183
+ /**
184
+ * Response payload returned when deleting an item.
185
+ */
186
+ export interface DeleteItemResponse {
187
+ /** Item identifier that was targeted for deletion. */
188
+ itemId: string;
189
+ /** Indicates whether the delete call succeeded. */
190
+ deleted: boolean;
191
+ }
152
192
  /**
153
193
  * Simple health check response from the Edge service.
154
194
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/sdk/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/sdk/types.ts"],"names":[],"mappings":"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"}