memrise 0.6.0 → 0.7.1

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/README.md CHANGED
@@ -95,7 +95,14 @@ await client.deleteLevel("level-id");
95
95
  // Remove a thing from a level
96
96
  await client.deleteThingFromLevel("level-id", "thing-id");
97
97
 
98
- // Search pool
98
+ // List every thing in a level, with the thing IDs deleteThingFromLevel needs
99
+ const levelThings = await client.getLevelThings("course-id", "level-id");
100
+
101
+ // Or just the thing IDs, with no extra request for the text
102
+ const thingIds = await client.getLevelThingIds("course-id", "level-id");
103
+
104
+ // Search pool. At least one non-empty column value is required -- Memrise has
105
+ // no "return everything" mode, use getLevelThings to enumerate instead.
99
106
  const results = await client.searchPool("pool-id", {
100
107
  "1": "search term",
101
108
  });
@@ -116,7 +123,8 @@ new MemriseClient(username: string, password: string, clientId?: string)
116
123
 
117
124
  **Course Management:**
118
125
 
119
- - `getMyCourses(limit?, offset?)` - Get your courses
126
+ - `getAllMyCourses(limit?)` - Every course on your dashboard, following pagination
127
+ - `getMyCourses(limit?, offset?)` - One raw page of courses (the API caps `limit` at 9)
120
128
  - `getCourseById(courseId)` - Get course by ID
121
129
  - `getCourseBySlug(slug)` - Get course by slug
122
130
  - `getCourseLevels(courseId)` - Get levels for a course
@@ -125,15 +133,22 @@ new MemriseClient(username: string, password: string, clientId?: string)
125
133
 
126
134
  **Reading Items:**
127
135
 
128
- - `getCourseItems(courseId, limit?)` - Get items from a course (optionally limit results)
129
- - `getLevelItems(courseId, levelIndex, limit?)` - Get items from a specific level (optionally limit results)
136
+ - `getCourseItems(courseId, limit?)` - Every item in a course, each tagged with its thingId and the levelIds it belongs to
137
+ - `getLevelItems(courseId, levelNumber, limit?)` - Get items from a level by its Memrise number (1-based)
138
+ - `getLevelByNumber(courseId, levelNumber)` - Resolve a level by its Memrise number
130
139
  - `getLearnable(learnableId)` - Get a single learnable item
140
+ - `getLearnables(learnableIds)` - Fetch many learnables in one batched request
141
+ - `getLevel(courseId, levelId)` - Look up a single level
142
+ - `getLevelThingIds(courseId, levelId)` - Thing IDs attached to a level, in level order
143
+ - `getLevelThings(courseId, levelId)` - Things in a level, each with its thing ID and the learnable text
144
+ - `getLevelColumnPair(courseId, levelId)` - Which columns a level tests
145
+ - `getLearnableIdInLevel(courseId, levelId, thingId)` - Learnable ID for a thing in a level, or null
131
146
 
132
147
  **Adding Items:**
133
148
 
134
- - `addThingToCourse(courseId, columns, levelIndex?)` - Add item to course (default: first level)
149
+ - `addThingToCourse(courseId, columns, levelNumber?)` - Add item to course (default: level 1)
135
150
  - `addThingToLevel(levelId, columns)` - Add item to specific level
136
- - `bulkAddToCourse(courseId, rows, levelIndex?, delimiter?)` - Bulk add items to a course (default: first level)
151
+ - `bulkAddToCourse(courseId, rows, levelNumber?, delimiter?)` - Bulk add items to a course (default: level 1)
137
152
  - `bulkAddToLevel(levelId, rows, delimiter?)` - Bulk add items to a specific level
138
153
  - `bulkAddToPool(poolId, rows, delimiter?)` - Bulk add items to a pool (not attached to a level)
139
154
  - `addLevelToCourse(courseId, poolId?, kind?)` - Add a new level to a course
@@ -143,8 +158,95 @@ new MemriseClient(username: string, password: string, clientId?: string)
143
158
 
144
159
  **Pool Operations:**
145
160
 
146
- - `searchPool(poolId, columns, excludeThingIds?, originalOnly?)` - Search pool
161
+ - `searchPool(poolId, columns, excludeThingIds?, originalOnly?)` - Search pool. Requires at least one non-empty column value; an empty filter throws (the endpoint answers 500)
147
162
  - `getPool(poolId)` - Get pool information
163
+ - `getPoolIdForLevelId(levelId)` - Pool behind a level, without needing the course ID
164
+ - `resolveColumnKeys(poolId, row)` - Translate column names to numeric keys
165
+
166
+ ## Column names
167
+
168
+ Memrise stores columns under numeric keys, but you can use their labels:
169
+
170
+ ```typescript
171
+ await client.bulkAddToLevel(levelId, [
172
+ { Word: "หมา (maa)", Definition: "dog" },
173
+ { Word: "แมว (maew)", Definition: "cat" },
174
+ ]);
175
+ ```
176
+
177
+ Names are matched case-insensitively and resolved against the pool, which is
178
+ looked up once and cached. Numeric keys still work and skip the lookup
179
+ entirely, so nothing gets slower:
180
+
181
+ ```typescript
182
+ await client.bulkAddToLevel(levelId, [{ "1": "หมา (maa)", "2": "dog" }]);
183
+ ```
184
+
185
+ A name that does not exist fails with the list of ones that do:
186
+
187
+ ```
188
+ Pool 7778482 has no column named "Wrod". Available columns: word, definition, audio.
189
+ ```
190
+
191
+ ## Level numbers
192
+
193
+ Level numbers are the 1-based numbers Memrise shows in the editor, and they are
194
+ matched against each level's own `index`:
195
+
196
+ ```typescript
197
+ await client.getLevelItems(courseId, 3);
198
+ await client.getLevelByNumber(courseId, 3);
199
+ ```
200
+
201
+ This matters because the levels endpoint **omits empty levels** while the
202
+ survivors keep their real numbers. Counting positions in the returned array
203
+ drifts by however many empty levels precede it. Asking for a number that is
204
+ empty or missing is an error naming the numbers that do exist, rather than
205
+ silently returning the wrong level.
206
+
207
+ ## Thing IDs and learnable IDs
208
+
209
+ Memrise exposes two identifiers for what looks like the same item:
210
+
211
+ - **thing** — the row in the pool database. `deleteThingFromLevel`,
212
+ `searchPool` and the `addThing*` responses all speak thing IDs.
213
+ - **learnable** — a thing *plus* the pair of columns being tested. Levels and
214
+ the course-facing APIs report learnable IDs.
215
+
216
+ A learnable ID packs both together: the thing ID sits in the high bits and the
217
+ low 16 bits hold the column pair, so `0x...0102` means "column 1 prompts
218
+ column 2". `thingIdFromLearnableId(learnableId)` recovers the thing ID without
219
+ another request, which is how `getLevelThingIds` works. The reverse direction
220
+ is not derivable, since it needs the column pair.
221
+
222
+ This packing is an undocumented implementation detail, so treat it as a fast
223
+ path rather than a guarantee: it is safe to use for lookups and membership
224
+ checks, where a wrong answer surfaces as "not found", but never derive an ID
225
+ for a destructive call that was not confirmed against the API first.
226
+
227
+ The SDK keeps these apart for you rather than making you remember which is
228
+ which:
229
+
230
+ - **Types that carry both.** `getLevelThings()` returns `{ thingId,
231
+ learnableId, … }`, so you never unpack an ID by hand.
232
+ - **The compiler catches mix-ups.** `ThingId` and `LearnableId` are branded
233
+ types. They erase to plain numbers at runtime, but passing one where the
234
+ other belongs is a compile error. Use `asThingId()` / `asLearnableId()` to
235
+ brand a number from elsewhere.
236
+ - **So does the runtime.** Passing a learnable ID to `deleteThingFromLevel`
237
+ throws immediately with the thing ID you probably meant, rather than failing
238
+ somewhere downstream.
239
+
240
+ Only one direction is derivable without a request:
241
+
242
+ | Direction | Call |
243
+ | --- | --- |
244
+ | learnable → thing | `thingIdFromLearnableId(learnableId)` |
245
+ | learnable → columns tested | `columnPairFromLearnableId(learnableId)` |
246
+ | thing → learnable | `client.getLearnableIdInLevel(courseId, levelId, thingId)` |
247
+
248
+ See [docs/api.md](docs/api.md) for the evidence behind this, the full endpoint
249
+ reference, and the quirks worth knowing before adding new calls.
148
250
 
149
251
  ## License
150
252
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,43 @@
1
- import type { AccessTokenResponse, AddLevelResponse, AddThingResponse, AuthWebResponse, BulkAddResponse, BulkThingRows, BulkWordDelimiter, CourseLevel, DashboardCourse, DeleteLevelResponse, DeleteThingResponse, GetDashboardCoursesResponse, GetPoolResponse, Learnable, PoolColumnConfig, SearchPoolResponse, SetLevelTitleResponse } from "./types";
1
+ export { asLearnableId, asThingId } from "./types.js";
2
+ export type * from "./types.js";
3
+ import type { AccessTokenResponse, ColumnPair, CourseItem, LearnableId, ThingId, AddLevelResponse, AddThingResponse, AuthWebResponse, BulkAddResponse, BulkThingRow, BulkThingRows, BulkWordDelimiter, CourseLevel, DashboardCourse, DeleteLevelResponse, DeleteThingResponse, GetDashboardCoursesResponse, GetPoolResponse, Learnable, LevelThing, PoolColumnConfig, SearchPoolResponse, SetLevelTitleResponse } from "./types.js";
4
+ /**
5
+ * Choose a delimiter that appears in none of the values.
6
+ *
7
+ * Bulk adds are serialised as delimiter-separated text, so a definition
8
+ * containing the delimiter would silently misalign the columns. Commas are
9
+ * common in definitions, tabs and semicolons much less so.
10
+ */
11
+ export declare function pickBulkDelimiter(rows: BulkThingRow[]): BulkWordDelimiter;
2
12
  export declare function formatBulkThingData(rows: BulkThingRows, delimiter?: BulkWordDelimiter): string;
13
+ /**
14
+ * Recover the thing ID a learnable was built from.
15
+ *
16
+ * Pure arithmetic, no request. The reverse needs the column pair, so see
17
+ * {@link learnableIdFromThingId} and {@link MemriseClient.getLearnableIdInLevel}.
18
+ */
19
+ export declare function thingIdFromLearnableId(learnableId: number): ThingId;
20
+ /**
21
+ * Which pair of columns a learnable tests, e.g. column 1 prompting column 2.
22
+ */
23
+ export declare function columnPairFromLearnableId(learnableId: number): ColumnPair;
24
+ /**
25
+ * Build a learnable ID from a thing and the column pair being tested.
26
+ *
27
+ * The column pair belongs to the level, not the thing: one pool can feed
28
+ * levels that test different pairings. Prefer
29
+ * {@link MemriseClient.getLearnableIdInLevel}, which reads the pair from the
30
+ * level and checks the thing is actually in it, over calling this directly.
31
+ */
32
+ export declare function learnableIdFromThingId(thingId: number, pair: ColumnPair): LearnableId;
33
+ /**
34
+ * Guard a value that must be a thing ID.
35
+ *
36
+ * This exists for the error message, not for correctness -- callers that
37
+ * mutate a level still verify membership. It turns the most common mistake
38
+ * into an answer instead of a confusing failure downstream.
39
+ */
40
+ export declare function assertThingId(id: number, context?: string): ThingId;
3
41
  export declare class MemriseClient {
4
42
  private client;
5
43
  private cookie;
@@ -7,6 +45,8 @@ export declare class MemriseClient {
7
45
  private accessToken;
8
46
  private cookieJar;
9
47
  private authReady;
48
+ private poolIdByLevel;
49
+ private columnKeysByPool;
10
50
  constructor(username: string, password: string, clientId?: string);
11
51
  private authenticateWithCredentials;
12
52
  private mergeSetCookieCookies;
@@ -16,25 +56,118 @@ export declare class MemriseClient {
16
56
  getCsrfToken(): Promise<string | null>;
17
57
  getAccessToken(username: string, password: string, clientId?: string): Promise<AccessTokenResponse>;
18
58
  authenticateWeb(token: string): Promise<AuthWebResponse>;
19
- addThingToLevel(levelId: string, columns: Record<string, string>): Promise<AddThingResponse>;
59
+ addThingToLevel(levelId: string | number, columns: Record<string, string>): Promise<AddThingResponse>;
20
60
  addLevelToCourse(courseId: string | number, poolId?: string | number, kind?: string): Promise<AddLevelResponse>;
21
61
  setLevelTitle(levelId: string | number, newTitle: string): Promise<SetLevelTitleResponse>;
22
62
  deleteLevel(levelId: string | number): Promise<DeleteLevelResponse>;
23
63
  deleteThingFromLevel(levelId: string | number, thingId: string | number): Promise<DeleteThingResponse>;
24
- addThingToCourse(courseId: string | number, columns: Record<string, string>, levelIndex?: number): Promise<AddThingResponse>;
64
+ /**
65
+ * Add one item to a course, addressed by the level number Memrise shows.
66
+ */
67
+ addThingToCourse(courseId: string | number, columns: Record<string, string>, levelNumber?: number): Promise<AddThingResponse>;
25
68
  bulkAddToPool(poolId: string | number, rows: BulkThingRows, delimiter?: BulkWordDelimiter): Promise<BulkAddResponse>;
26
69
  bulkAddToLevel(levelId: string | number, rows: BulkThingRows, delimiter?: BulkWordDelimiter): Promise<BulkAddResponse>;
27
- bulkAddToCourse(courseId: string | number, rows: BulkThingRows, levelIndex?: number, delimiter?: BulkWordDelimiter): Promise<BulkAddResponse>;
70
+ /**
71
+ * Bulk add to a course, addressed by the level number Memrise shows.
72
+ */
73
+ bulkAddToCourse(courseId: string | number, rows: BulkThingRows, levelNumber?: number, delimiter?: BulkWordDelimiter): Promise<BulkAddResponse>;
28
74
  searchPool(poolId: string | number, columns: Record<string, string>, excludeThingIds?: string[], originalOnly?: boolean): Promise<SearchPoolResponse>;
29
75
  getPool(poolId: string | number): Promise<GetPoolResponse>;
30
76
  getMyCourses(limit?: number, offset?: number): Promise<GetDashboardCoursesResponse>;
77
+ /**
78
+ * Every course on your dashboard, following pagination.
79
+ *
80
+ * getMyCourses exposes the API's own page size, which silently truncates
81
+ * at nine. This walks the pages so callers see the whole list.
82
+ */
83
+ getAllMyCourses(limit?: number): Promise<DashboardCourse[]>;
31
84
  getCourseById(courseId: string | number): Promise<DashboardCourse | null>;
32
85
  getCourseBySlug(slug: string): Promise<DashboardCourse | null>;
33
86
  getCourseLevels(courseId: string | number, slug?: string): Promise<CourseLevel[]>;
34
87
  getCourseLevelsIncludingEmpty(courseId: string | number, slug?: string): Promise<CourseLevel[]>;
35
88
  getLearnable(learnableId: string | number): Promise<Learnable | null>;
36
- getCourseItems(courseId: string | number, limit?: number): Promise<Learnable[]>;
37
- getLevelItems(courseId: string | number, levelIndex?: number, limit?: number): Promise<Learnable[]>;
89
+ /**
90
+ * Every item in a course, each tagged with the level it sits in.
91
+ *
92
+ * The level mapping is free -- it comes from the same levels response used
93
+ * to collect the IDs -- and without it the result is a dead end, since
94
+ * removing an item needs the level it belongs to.
95
+ */
96
+ getCourseItems(courseId: string | number, limit?: number): Promise<CourseItem[]>;
97
+ /**
98
+ * Look up a level by the number Memrise shows in the editor.
99
+ *
100
+ * Levels carry their own 1-based `index`, and it is authoritative: the
101
+ * levels endpoint omits empty levels but the survivors keep their real
102
+ * numbers, so counting positions in the returned array drifts by however
103
+ * many empty levels precede it. Always match on `index`.
104
+ */
105
+ getLevelByNumber(courseId: string | number, levelNumber: number): Promise<CourseLevel>;
106
+ /**
107
+ * Items in a level, addressed by the level number shown in Memrise.
108
+ */
109
+ getLevelItems(courseId: string | number, levelNumber?: number, limit?: number): Promise<Learnable[]>;
110
+ getLearnables(learnableIds: Array<string | number>): Promise<Learnable[]>;
111
+ /**
112
+ * Look up a single level on a course.
113
+ */
114
+ getLevel(courseId: string | number, levelId: string | number): Promise<CourseLevel>;
115
+ /**
116
+ * List the thing IDs currently attached to a level, in level order.
117
+ *
118
+ * A level only reports learnable IDs, but a learnable ID embeds the thing
119
+ * it was built from, so no extra request is needed. See
120
+ * {@link thingIdFromLearnableId}.
121
+ */
122
+ getLevelThingIds(courseId: string | number, levelId: string | number): Promise<ThingId[]>;
123
+ /**
124
+ * List the things attached to a level, with the thing ID needed for
125
+ * deletion alongside the learnable's text.
126
+ */
127
+ getLevelThings(courseId: string | number, levelId: string | number): Promise<LevelThing[]>;
128
+ /**
129
+ * The pair of columns a level tests, read from its learnables.
130
+ *
131
+ * Uniform within a level, but a pool can host levels with different
132
+ * pairings, so this is a per-level question. Returns null if the level
133
+ * reports no learnables to read the pair from. Note that a wholly empty
134
+ * level is invisible to the levels endpoint and throws instead.
135
+ */
136
+ getLevelColumnPair(courseId: string | number, levelId: string | number): Promise<ColumnPair | null>;
137
+ /**
138
+ * Find the learnable ID for a thing as it appears in a given level.
139
+ *
140
+ * Returns null when the thing is not in the level, rather than handing back
141
+ * an ID that does not resolve.
142
+ */
143
+ getLearnableIdInLevel(courseId: string | number, levelId: string | number, thingId: string | number): Promise<LearnableId | null>;
144
+ /**
145
+ * The pool behind a level, without needing the course ID.
146
+ *
147
+ * The levels endpoint is course-scoped, so this consults a cache that every
148
+ * getCourseLevels call populates, and falls back to sweeping the courses on
149
+ * your dashboard. All JSON -- no page scraping.
150
+ *
151
+ * A level with no items is invisible to that endpoint. Levels created
152
+ * through addLevelToCourse are cached at creation, but for anything else,
153
+ * pass numeric column keys or use a course-scoped call.
154
+ */
155
+ getPoolIdForLevelId(levelId: string | number): Promise<number>;
156
+ private columnKeysFor;
157
+ /**
158
+ * Translate a row keyed by column name into the numeric keys Memrise
159
+ * wants. Numeric keys pass through untouched, so callers that already
160
+ * speak the wire format keep working and pay no extra request.
161
+ *
162
+ * Names are matched case-insensitively against the pool's column labels.
163
+ */
164
+ resolveColumnKeys(poolId: string | number, row: Record<string, string>): Promise<Record<string, string>>;
165
+ /** Resolve named columns in a single row against the pool behind a level. */
166
+ private resolveColumnsForLevel;
167
+ /** Resolve named columns in bulk rows against the pool behind a level. */
168
+ private resolveRowsForLevel;
169
+ /** Resolve named columns in bulk rows against a pool. */
170
+ private resolveRowsForPool;
38
171
  getCourseColumns(courseId: string | number): Promise<Record<string, PoolColumnConfig>>;
39
172
  }
40
173
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import axios from "axios";
2
+ import { asLearnableId, asThingId } from "./types.js";
3
+ export { asLearnableId, asThingId } from "./types.js";
2
4
  const DEFAULT_CLIENT_ID = "1e739f5e77704b57a703";
3
5
  const BULK_DELIMITER_CHARS = {
4
6
  comma: ",",
@@ -23,23 +25,106 @@ function orderedValuesFromRecord(row) {
23
25
  }
24
26
  return values;
25
27
  }
26
- export function formatBulkThingData(rows, delimiter = "comma") {
28
+ /**
29
+ * Choose a delimiter that appears in none of the values.
30
+ *
31
+ * Bulk adds are serialised as delimiter-separated text, so a definition
32
+ * containing the delimiter would silently misalign the columns. Commas are
33
+ * common in definitions, tabs and semicolons much less so.
34
+ */
35
+ export function pickBulkDelimiter(rows) {
36
+ const values = rows.flatMap((row) => Array.isArray(row) ? row : orderedValuesFromRecord(row));
37
+ for (const candidate of ["comma", "tab", "semicolon"]) {
38
+ const sep = BULK_DELIMITER_CHARS[candidate];
39
+ if (!values.some((value) => value.includes(sep)))
40
+ return candidate;
41
+ }
42
+ throw new Error("Every supported delimiter (comma, tab, semicolon) appears in the values being added, so the rows cannot be encoded unambiguously. Split the batch or remove the punctuation.");
43
+ }
44
+ export function formatBulkThingData(rows, delimiter) {
27
45
  if (typeof rows === "string") {
28
46
  return rows;
29
47
  }
30
- const sep = BULK_DELIMITER_CHARS[delimiter];
48
+ const chosen = delimiter ?? pickBulkDelimiter(rows);
49
+ const sep = BULK_DELIMITER_CHARS[chosen];
31
50
  return rows
32
51
  .map((row) => {
33
52
  const values = Array.isArray(row) ? row : orderedValuesFromRecord(row);
34
53
  for (const value of values) {
35
54
  if (value.includes(sep) || /[\r\n]/.test(value)) {
36
- throw new Error(`Bulk row value contains the '${delimiter}' delimiter or a newline: ${JSON.stringify(value)}`);
55
+ throw new Error(`Bulk row value contains the '${chosen}' delimiter or a newline: ${JSON.stringify(value)}`);
37
56
  }
38
57
  }
39
58
  return values.join(sep);
40
59
  })
41
60
  .join("\n");
42
61
  }
62
+ /**
63
+ * Learnable IDs are derived from the thing they were built from: the thing ID
64
+ * occupies the high bits and the low 16 bits identify the column pair the
65
+ * learnable tests (0x0102 = column 1 prompts column 2, and so on). So a thing
66
+ * ID can be recovered from a learnable ID without another request, while the
67
+ * reverse needs to know the column pair.
68
+ */
69
+ const LEARNABLE_THING_SHIFT = 65536;
70
+ /**
71
+ * Number of learnable IDs per /v1.25/learnables/ request. 400 ids is still
72
+ * accepted and 793 answers 414, so this leaves plenty of headroom.
73
+ */
74
+ const LEARNABLE_BATCH_SIZE = 200;
75
+ /** /v1.25/dashboard/courses/ rejects a limit above this with a 400. */
76
+ const DASHBOARD_MAX_PAGE_SIZE = 9;
77
+ /**
78
+ * Recover the thing ID a learnable was built from.
79
+ *
80
+ * Pure arithmetic, no request. The reverse needs the column pair, so see
81
+ * {@link learnableIdFromThingId} and {@link MemriseClient.getLearnableIdInLevel}.
82
+ */
83
+ export function thingIdFromLearnableId(learnableId) {
84
+ return asThingId(Math.floor(learnableId / LEARNABLE_THING_SHIFT));
85
+ }
86
+ /**
87
+ * Which pair of columns a learnable tests, e.g. column 1 prompting column 2.
88
+ */
89
+ export function columnPairFromLearnableId(learnableId) {
90
+ const pair = learnableId % LEARNABLE_THING_SHIFT;
91
+ return {
92
+ learningColumn: (pair >> 8) & 0xff,
93
+ definitionColumn: pair & 0xff,
94
+ };
95
+ }
96
+ /**
97
+ * Build a learnable ID from a thing and the column pair being tested.
98
+ *
99
+ * The column pair belongs to the level, not the thing: one pool can feed
100
+ * levels that test different pairings. Prefer
101
+ * {@link MemriseClient.getLearnableIdInLevel}, which reads the pair from the
102
+ * level and checks the thing is actually in it, over calling this directly.
103
+ */
104
+ export function learnableIdFromThingId(thingId, pair) {
105
+ return asLearnableId(thingId * LEARNABLE_THING_SHIFT +
106
+ ((pair.learningColumn & 0xff) << 8) +
107
+ (pair.definitionColumn & 0xff));
108
+ }
109
+ /**
110
+ * Largest plausible thing ID. Thing IDs are pool row numbers (~2^29 today);
111
+ * learnable IDs start around 2^43 because of the 16 bit shift, so anything
112
+ * above this is a learnable ID that reached the wrong parameter.
113
+ */
114
+ const MAX_PLAUSIBLE_THING_ID = 0xffffffff;
115
+ /**
116
+ * Guard a value that must be a thing ID.
117
+ *
118
+ * This exists for the error message, not for correctness -- callers that
119
+ * mutate a level still verify membership. It turns the most common mistake
120
+ * into an answer instead of a confusing failure downstream.
121
+ */
122
+ export function assertThingId(id, context = "This call") {
123
+ if (id > MAX_PLAUSIBLE_THING_ID) {
124
+ throw new Error(`${context} needs a thingId but was given ${id}, which is a learnableId. Did you mean ${thingIdFromLearnableId(id)}? (learnableId = thing plus the column pair being tested; see docs/api.md)`);
125
+ }
126
+ return asThingId(id);
127
+ }
43
128
  export class MemriseClient {
44
129
  client = axios.create({
45
130
  baseURL: "https://community-courses.memrise.com",
@@ -54,6 +139,8 @@ export class MemriseClient {
54
139
  accessToken;
55
140
  cookieJar;
56
141
  authReady;
142
+ poolIdByLevel = new Map();
143
+ columnKeysByPool = new Map();
57
144
  constructor(username, password, clientId = DEFAULT_CLIENT_ID) {
58
145
  this.cookie = "";
59
146
  this.csrfToken = null;
@@ -243,9 +330,10 @@ export class MemriseClient {
243
330
  }
244
331
  async addThingToLevel(levelId, columns) {
245
332
  await this.ensureAuthenticated();
333
+ const resolved = await this.resolveColumnsForLevel(levelId, columns);
246
334
  const data = new URLSearchParams();
247
- data.append("columns", JSON.stringify(columns));
248
- data.append("level_id", levelId);
335
+ data.append("columns", JSON.stringify(resolved));
336
+ data.append("level_id", String(levelId));
249
337
  const response = await this.client.post("/ajax/level/thing/add/", data, {
250
338
  headers: {
251
339
  "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
@@ -273,6 +361,15 @@ export class MemriseClient {
273
361
  "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
274
362
  },
275
363
  });
364
+ // The endpoint reports the new level only as an anchor on the redirect
365
+ // URL, e.g. "/course/1/slug/edit/#l_16402418".
366
+ const levelId = Number(/#l_(\d+)/.exec(response.data?.redirect_url ?? "")?.[1]);
367
+ if (Number.isFinite(levelId)) {
368
+ // A new level is empty, so the levels endpoint will not report it
369
+ // yet. Remember its pool so column names still resolve.
370
+ this.poolIdByLevel.set(String(levelId), Number(resolvedPoolId));
371
+ return { ...response.data, levelId };
372
+ }
276
373
  return response.data;
277
374
  }
278
375
  async setLevelTitle(levelId, newTitle) {
@@ -299,6 +396,7 @@ export class MemriseClient {
299
396
  return response.data;
300
397
  }
301
398
  async deleteThingFromLevel(levelId, thingId) {
399
+ assertThingId(Number(thingId), "deleteThingFromLevel");
302
400
  await this.ensureAuthenticated();
303
401
  const data = new URLSearchParams();
304
402
  data.append("level_id", String(levelId));
@@ -310,30 +408,26 @@ export class MemriseClient {
310
408
  });
311
409
  return response.data;
312
410
  }
313
- async addThingToCourse(courseId, columns, levelIndex = 0) {
314
- await this.ensureAuthenticated();
315
- const levels = await this.getCourseLevels(courseId);
316
- if (levels.length === 0) {
317
- throw new Error(`No levels found for course ${courseId}`);
318
- }
319
- if (levelIndex < 0 || levelIndex >= levels.length) {
320
- throw new Error(`Level index ${levelIndex} out of range. Course has ${levels.length} levels.`);
321
- }
322
- const level = levels[levelIndex];
323
- if (!level) {
324
- throw new Error(`Level at index ${levelIndex} not found`);
325
- }
326
- const levelId = String(level.id);
327
- return this.addThingToLevel(levelId, columns);
411
+ /**
412
+ * Add one item to a course, addressed by the level number Memrise shows.
413
+ */
414
+ async addThingToCourse(courseId, columns, levelNumber = 1) {
415
+ const level = await this.getLevelByNumber(courseId, levelNumber);
416
+ return this.addThingToLevel(level.id, columns);
328
417
  }
329
- async bulkAddToPool(poolId, rows, delimiter = "comma") {
418
+ async bulkAddToPool(poolId, rows, delimiter) {
330
419
  await this.ensureAuthenticated();
331
- const payload = formatBulkThingData(rows, delimiter);
420
+ const resolvedRows = await this.resolveRowsForPool(poolId, rows);
421
+ const chosenDelimiter = delimiter ??
422
+ (typeof resolvedRows === "string"
423
+ ? "comma"
424
+ : pickBulkDelimiter(resolvedRows));
425
+ const payload = formatBulkThingData(resolvedRows, chosenDelimiter);
332
426
  if (payload.trim() === "") {
333
427
  throw new Error("No rows provided for bulk add");
334
428
  }
335
429
  const data = new URLSearchParams();
336
- data.append("word_delimiter", delimiter);
430
+ data.append("word_delimiter", chosenDelimiter);
337
431
  data.append("data", payload);
338
432
  data.append("pool_id", String(poolId));
339
433
  const response = await this.client.post("/ajax/pool/add_things_in_bulk/", data, {
@@ -343,14 +437,19 @@ export class MemriseClient {
343
437
  });
344
438
  return response.data;
345
439
  }
346
- async bulkAddToLevel(levelId, rows, delimiter = "comma") {
440
+ async bulkAddToLevel(levelId, rows, delimiter) {
347
441
  await this.ensureAuthenticated();
348
- const payload = formatBulkThingData(rows, delimiter);
442
+ const resolvedRows = await this.resolveRowsForLevel(levelId, rows);
443
+ const chosenDelimiter = delimiter ??
444
+ (typeof resolvedRows === "string"
445
+ ? "comma"
446
+ : pickBulkDelimiter(resolvedRows));
447
+ const payload = formatBulkThingData(resolvedRows, chosenDelimiter);
349
448
  if (payload.trim() === "") {
350
449
  throw new Error("No rows provided for bulk add");
351
450
  }
352
451
  const data = new URLSearchParams();
353
- data.append("word_delimiter", delimiter);
452
+ data.append("word_delimiter", chosenDelimiter);
354
453
  data.append("data", payload);
355
454
  data.append("level_id", String(levelId));
356
455
  const response = await this.client.post("/ajax/level/add_things_in_bulk/", data, {
@@ -360,27 +459,24 @@ export class MemriseClient {
360
459
  });
361
460
  return response.data;
362
461
  }
363
- async bulkAddToCourse(courseId, rows, levelIndex = 0, delimiter = "comma") {
364
- await this.ensureAuthenticated();
365
- const levels = await this.getCourseLevels(courseId);
366
- if (levels.length === 0) {
367
- throw new Error(`No levels found for course ${courseId}`);
368
- }
369
- if (levelIndex < 0 || levelIndex >= levels.length) {
370
- throw new Error(`Level index ${levelIndex} out of range. Course has ${levels.length} levels.`);
371
- }
372
- const level = levels[levelIndex];
373
- if (!level) {
374
- throw new Error(`Level at index ${levelIndex} not found`);
375
- }
462
+ /**
463
+ * Bulk add to a course, addressed by the level number Memrise shows.
464
+ */
465
+ async bulkAddToCourse(courseId, rows, levelNumber = 1, delimiter) {
466
+ const level = await this.getLevelByNumber(courseId, levelNumber);
376
467
  return this.bulkAddToLevel(level.id, rows, delimiter);
377
468
  }
378
469
  async searchPool(poolId, columns, excludeThingIds = [], originalOnly = false) {
470
+ const resolvedColumns = await this.resolveColumnKeys(poolId, columns);
471
+ const terms = Object.values(resolvedColumns).filter((value) => typeof value === "string" && value.length > 0);
472
+ if (terms.length === 0) {
473
+ throw new Error("searchPool requires at least one non-empty column value. Memrise's /ajax/pool/search/ endpoint has no 'return everything' mode and responds with HTTP 500 for an empty filter. Use getLevelThings(levelId) to enumerate a level's things instead.");
474
+ }
379
475
  await this.ensureAuthenticated();
380
476
  const params = {
381
477
  pool_id: poolId,
382
478
  original_only: originalOnly,
383
- columns: JSON.stringify(columns),
479
+ columns: JSON.stringify(resolvedColumns),
384
480
  exclude_thing_ids: JSON.stringify(excludeThingIds),
385
481
  _: Date.now(),
386
482
  };
@@ -412,35 +508,42 @@ export class MemriseClient {
412
508
  });
413
509
  return response.data;
414
510
  }
415
- async getCourseById(courseId) {
511
+ /**
512
+ * Every course on your dashboard, following pagination.
513
+ *
514
+ * getMyCourses exposes the API's own page size, which silently truncates
515
+ * at nine. This walks the pages so callers see the whole list.
516
+ */
517
+ async getAllMyCourses(limit) {
518
+ const courses = [];
519
+ // The dashboard endpoint answers 400 for a limit above 9.
520
+ const pageSize = DASHBOARD_MAX_PAGE_SIZE;
416
521
  let offset = 0;
417
- const limit = 9;
418
522
  while (true) {
419
- const response = await this.getMyCourses(limit, offset);
420
- const course = response.courses.find((c) => String(c.id) === String(courseId));
421
- if (course)
422
- return course;
423
- if (!response.has_more_pages)
424
- return null;
425
- offset += limit;
523
+ const page = await this.getMyCourses(pageSize, offset);
524
+ courses.push(...page.courses);
525
+ if (limit && courses.length >= limit)
526
+ return courses.slice(0, limit);
527
+ if (!page.has_more_pages || page.courses.length === 0)
528
+ break;
529
+ offset += pageSize;
426
530
  }
531
+ return courses;
532
+ }
533
+ async getCourseById(courseId) {
534
+ const courses = await this.getAllMyCourses();
535
+ return courses.find((c) => String(c.id) === String(courseId)) ?? null;
427
536
  }
428
537
  async getCourseBySlug(slug) {
429
- let offset = 0;
430
- const limit = 9;
431
- while (true) {
432
- const response = await this.getMyCourses(limit, offset);
433
- const course = response.courses.find((c) => c.slug === slug);
434
- if (course)
435
- return course;
436
- if (!response.has_more_pages)
437
- return null;
438
- offset += limit;
439
- }
538
+ const courses = await this.getAllMyCourses();
539
+ return courses.find((c) => c.slug === slug) ?? null;
440
540
  }
441
541
  async getCourseLevels(courseId, slug) {
442
542
  await this.ensureAuthenticated();
443
543
  const response = await this.client.get(`/v1.25/courses/${courseId}/levels/`);
544
+ for (const level of response.data.levels) {
545
+ this.poolIdByLevel.set(String(level.id), level.pool_id);
546
+ }
444
547
  return response.data.levels;
445
548
  }
446
549
  async getCourseLevelsIncludingEmpty(courseId, slug) {
@@ -494,54 +597,239 @@ export class MemriseClient {
494
597
  throw error;
495
598
  }
496
599
  }
600
+ /**
601
+ * Every item in a course, each tagged with the level it sits in.
602
+ *
603
+ * The level mapping is free -- it comes from the same levels response used
604
+ * to collect the IDs -- and without it the result is a dead end, since
605
+ * removing an item needs the level it belongs to.
606
+ */
497
607
  async getCourseItems(courseId, limit) {
498
608
  const levels = await this.getCourseLevels(courseId);
499
- const learnableIds = levels.flatMap((level) => level.learnable_ids || []);
500
- const uniqueIds = [...new Set(learnableIds)];
501
- // Apply limit if specified
609
+ const levelsByLearnable = new Map();
610
+ for (const level of levels) {
611
+ for (const learnableId of level.learnable_ids ?? []) {
612
+ const existing = levelsByLearnable.get(learnableId);
613
+ if (existing)
614
+ existing.push(level.id);
615
+ else
616
+ levelsByLearnable.set(learnableId, [level.id]);
617
+ }
618
+ }
619
+ const uniqueIds = [...levelsByLearnable.keys()];
502
620
  const idsToFetch = limit ? uniqueIds.slice(0, limit) : uniqueIds;
503
- // Fetch in batches (concurrently) to avoid overloading but speed up
504
- // Since we don't have a batch API, we do parallel requests with a limit
505
- const items = [];
506
- const concurrency = 5;
507
- for (let i = 0; i < idsToFetch.length; i += concurrency) {
508
- const batch = idsToFetch.slice(i, i + concurrency);
509
- const promises = batch.map((id) => this.getLearnable(id));
510
- const results = await Promise.all(promises);
511
- results.forEach((item) => {
512
- if (item)
513
- items.push(item);
514
- });
621
+ const learnables = await this.getLearnables(idsToFetch);
622
+ return learnables.map((learnable) => ({
623
+ learnableId: asLearnableId(learnable.id),
624
+ thingId: thingIdFromLearnableId(learnable.id),
625
+ levelIds: levelsByLearnable.get(learnable.id) ?? [],
626
+ learningElement: learnable.learning_element,
627
+ definitionElement: learnable.definition_element,
628
+ itemType: learnable.item_type,
629
+ difficulty: learnable.difficulty,
630
+ }));
631
+ }
632
+ /**
633
+ * Look up a level by the number Memrise shows in the editor.
634
+ *
635
+ * Levels carry their own 1-based `index`, and it is authoritative: the
636
+ * levels endpoint omits empty levels but the survivors keep their real
637
+ * numbers, so counting positions in the returned array drifts by however
638
+ * many empty levels precede it. Always match on `index`.
639
+ */
640
+ async getLevelByNumber(courseId, levelNumber) {
641
+ const levels = await this.getCourseLevels(courseId);
642
+ const level = levels.find((l) => l.index === levelNumber);
643
+ if (level)
644
+ return level;
645
+ const available = levels.map((l) => l.index).join(", ");
646
+ throw new Error(`Course ${courseId} has no level numbered ${levelNumber}. Levels with content are numbered: ${available}. Numbers are 1-based and match the Memrise editor; gaps are empty levels, which the API does not return.`);
647
+ }
648
+ /**
649
+ * Items in a level, addressed by the level number shown in Memrise.
650
+ */
651
+ async getLevelItems(courseId, levelNumber = 1, limit) {
652
+ const level = await this.getLevelByNumber(courseId, levelNumber);
653
+ const learnableIds = level.learnable_ids || [];
654
+ const idsToFetch = limit ? learnableIds.slice(0, limit) : learnableIds;
655
+ return this.getLearnables(idsToFetch);
656
+ }
657
+ async getLearnables(learnableIds) {
658
+ if (learnableIds.length === 0)
659
+ return [];
660
+ await this.ensureAuthenticated();
661
+ const learnables = [];
662
+ for (let i = 0; i < learnableIds.length; i += LEARNABLE_BATCH_SIZE) {
663
+ const chunk = learnableIds.slice(i, i + LEARNABLE_BATCH_SIZE);
664
+ const response = await this.client.get(`/v1.25/learnables/${chunk.join(",")}/`);
665
+ for (const id of chunk) {
666
+ const learnable = response.data.learnables?.[String(id)];
667
+ if (learnable)
668
+ learnables.push(learnable);
669
+ }
515
670
  }
516
- return items;
671
+ return learnables;
517
672
  }
518
- async getLevelItems(courseId, levelIndex = 0, limit) {
673
+ /**
674
+ * Look up a single level on a course.
675
+ */
676
+ async getLevel(courseId, levelId) {
519
677
  const levels = await this.getCourseLevels(courseId);
520
- if (levels.length === 0) {
521
- throw new Error(`No levels found for course ${courseId}`);
678
+ const level = levels.find((l) => String(l.id) === String(levelId));
679
+ if (!level) {
680
+ throw new Error(`Level ${levelId} was not found on course ${courseId}. Note that the levels endpoint omits empty levels, so a level that exists but has no things will also land here — use getCourseLevelsIncludingEmpty to see those.`);
522
681
  }
523
- if (levelIndex < 0 || levelIndex >= levels.length) {
524
- throw new Error(`Level index ${levelIndex} out of range. Course has ${levels.length} levels.`);
682
+ return level;
683
+ }
684
+ /**
685
+ * List the thing IDs currently attached to a level, in level order.
686
+ *
687
+ * A level only reports learnable IDs, but a learnable ID embeds the thing
688
+ * it was built from, so no extra request is needed. See
689
+ * {@link thingIdFromLearnableId}.
690
+ */
691
+ async getLevelThingIds(courseId, levelId) {
692
+ const level = await this.getLevel(courseId, levelId);
693
+ return (level.learnable_ids ?? []).map(thingIdFromLearnableId);
694
+ }
695
+ /**
696
+ * List the things attached to a level, with the thing ID needed for
697
+ * deletion alongside the learnable's text.
698
+ */
699
+ async getLevelThings(courseId, levelId) {
700
+ const level = await this.getLevel(courseId, levelId);
701
+ const learnableIds = level.learnable_ids ?? [];
702
+ const learnables = await this.getLearnables(learnableIds);
703
+ const byId = new Map(learnables.map((l) => [String(l.id), l]));
704
+ return learnableIds.map((learnableId) => {
705
+ const learnable = byId.get(String(learnableId));
706
+ return {
707
+ thingId: thingIdFromLearnableId(learnableId),
708
+ learnableId: asLearnableId(learnableId),
709
+ learningElement: learnable?.learning_element ?? "",
710
+ definitionElement: learnable?.definition_element ?? "",
711
+ itemType: learnable?.item_type ?? "",
712
+ difficulty: learnable?.difficulty ?? "",
713
+ };
714
+ });
715
+ }
716
+ /**
717
+ * The pair of columns a level tests, read from its learnables.
718
+ *
719
+ * Uniform within a level, but a pool can host levels with different
720
+ * pairings, so this is a per-level question. Returns null if the level
721
+ * reports no learnables to read the pair from. Note that a wholly empty
722
+ * level is invisible to the levels endpoint and throws instead.
723
+ */
724
+ async getLevelColumnPair(courseId, levelId) {
725
+ const level = await this.getLevel(courseId, levelId);
726
+ const first = (level.learnable_ids ?? [])[0];
727
+ return first === undefined ? null : columnPairFromLearnableId(first);
728
+ }
729
+ /**
730
+ * Find the learnable ID for a thing as it appears in a given level.
731
+ *
732
+ * Returns null when the thing is not in the level, rather than handing back
733
+ * an ID that does not resolve.
734
+ */
735
+ async getLearnableIdInLevel(courseId, levelId, thingId) {
736
+ const level = await this.getLevel(courseId, levelId);
737
+ const wanted = String(thingId);
738
+ const match = (level.learnable_ids ?? []).find((learnableId) => String(thingIdFromLearnableId(learnableId)) === wanted);
739
+ return match === undefined ? null : asLearnableId(match);
740
+ }
741
+ /**
742
+ * The pool behind a level, without needing the course ID.
743
+ *
744
+ * The levels endpoint is course-scoped, so this consults a cache that every
745
+ * getCourseLevels call populates, and falls back to sweeping the courses on
746
+ * your dashboard. All JSON -- no page scraping.
747
+ *
748
+ * A level with no items is invisible to that endpoint. Levels created
749
+ * through addLevelToCourse are cached at creation, but for anything else,
750
+ * pass numeric column keys or use a course-scoped call.
751
+ */
752
+ async getPoolIdForLevelId(levelId) {
753
+ const key = String(levelId);
754
+ const cached = this.poolIdByLevel.get(key);
755
+ if (cached !== undefined)
756
+ return cached;
757
+ for (const course of (await this.getMyCourses(100, 0)).courses) {
758
+ await this.getCourseLevels(course.id);
759
+ const found = this.poolIdByLevel.get(key);
760
+ if (found !== undefined)
761
+ return found;
525
762
  }
526
- const level = levels[levelIndex];
527
- if (!level) {
528
- throw new Error(`Level at index ${levelIndex} not found`);
763
+ throw new Error(`Could not find level ${levelId} on any course on your dashboard, so its columns cannot be resolved by name. Empty levels are not listed by the API. Pass numeric column keys instead, or add via the course-scoped call.`);
764
+ }
765
+ async columnKeysFor(poolId) {
766
+ const key = String(poolId);
767
+ const cached = this.columnKeysByPool.get(key);
768
+ if (cached)
769
+ return cached;
770
+ const { pool } = await this.getPool(poolId);
771
+ const byLabel = new Map();
772
+ for (const [columnKey, config] of Object.entries(pool.columns)) {
773
+ byLabel.set(config.label.trim().toLowerCase(), columnKey);
529
774
  }
530
- const learnableIds = level.learnable_ids || [];
531
- const idsToFetch = limit ? learnableIds.slice(0, limit) : learnableIds;
532
- // Fetch in batches (concurrently)
533
- const items = [];
534
- const concurrency = 5;
535
- for (let i = 0; i < idsToFetch.length; i += concurrency) {
536
- const batch = idsToFetch.slice(i, i + concurrency);
537
- const promises = batch.map((id) => this.getLearnable(id));
538
- const results = await Promise.all(promises);
539
- results.forEach((item) => {
540
- if (item)
541
- items.push(item);
542
- });
775
+ this.columnKeysByPool.set(key, byLabel);
776
+ return byLabel;
777
+ }
778
+ /**
779
+ * Translate a row keyed by column name into the numeric keys Memrise
780
+ * wants. Numeric keys pass through untouched, so callers that already
781
+ * speak the wire format keep working and pay no extra request.
782
+ *
783
+ * Names are matched case-insensitively against the pool's column labels.
784
+ */
785
+ async resolveColumnKeys(poolId, row) {
786
+ if (!Object.keys(row).some((key) => !/^\d+$/.test(key))) {
787
+ return { ...row };
788
+ }
789
+ const byLabel = await this.columnKeysFor(poolId);
790
+ const resolved = {};
791
+ for (const [key, value] of Object.entries(row)) {
792
+ if (/^\d+$/.test(key)) {
793
+ resolved[key] = value;
794
+ continue;
795
+ }
796
+ const numeric = byLabel.get(key.trim().toLowerCase());
797
+ if (!numeric) {
798
+ throw new Error(`Pool ${poolId} has no column named "${key}". Available columns: ${[...byLabel.keys()].join(", ")}.`);
799
+ }
800
+ resolved[numeric] = value;
801
+ }
802
+ return resolved;
803
+ }
804
+ /** Resolve named columns in a single row against the pool behind a level. */
805
+ async resolveColumnsForLevel(levelId, row) {
806
+ if (!Object.keys(row).some((key) => !/^\d+$/.test(key)))
807
+ return { ...row };
808
+ return this.resolveColumnKeys(await this.getPoolIdForLevelId(levelId), row);
809
+ }
810
+ /** Resolve named columns in bulk rows against the pool behind a level. */
811
+ async resolveRowsForLevel(levelId, rows) {
812
+ if (typeof rows === "string")
813
+ return rows;
814
+ const needsLookup = rows.some((row) => !Array.isArray(row) &&
815
+ Object.keys(row).some((key) => !/^\d+$/.test(key)));
816
+ if (!needsLookup)
817
+ return rows;
818
+ return this.resolveRowsForPool(await this.getPoolIdForLevelId(levelId), rows);
819
+ }
820
+ /** Resolve named columns in bulk rows against a pool. */
821
+ async resolveRowsForPool(poolId, rows) {
822
+ if (typeof rows === "string" || Array.isArray(rows) === false)
823
+ return rows;
824
+ const needsLookup = rows.some((row) => !Array.isArray(row) &&
825
+ Object.keys(row).some((key) => !/^\d+$/.test(key)));
826
+ if (!needsLookup)
827
+ return rows;
828
+ const resolved = [];
829
+ for (const row of rows) {
830
+ resolved.push(Array.isArray(row) ? row : await this.resolveColumnKeys(poolId, row));
543
831
  }
544
- return items;
832
+ return resolved;
545
833
  }
546
834
  async getCourseColumns(courseId) {
547
835
  const levels = await this.getCourseLevels(courseId);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,24 @@
1
+ /**
2
+ * Memrise has two ID namespaces that are easy to confuse. These brands are
3
+ * compile-time only -- they erase to plain numbers at runtime -- but they stop
4
+ * a learnable ID being passed where a thing ID belongs.
5
+ *
6
+ * IDs handed back by this SDK are already branded. To brand a number from
7
+ * elsewhere, use `asThingId` / `asLearnableId`, which is deliberately an
8
+ * explicit act.
9
+ */
10
+ declare const THING_ID: unique symbol;
11
+ declare const LEARNABLE_ID: unique symbol;
12
+ /** A row in a pool. What the mutation endpoints operate on. */
13
+ export type ThingId = number & {
14
+ readonly [THING_ID]: true;
15
+ };
16
+ /** A thing plus the column pair being tested. What levels report. */
17
+ export type LearnableId = number & {
18
+ readonly [LEARNABLE_ID]: true;
19
+ };
20
+ export declare function asThingId(id: number): ThingId;
21
+ export declare function asLearnableId(id: number): LearnableId;
1
22
  export interface MemriseColumn {
2
23
  val: string;
3
24
  kind: string;
@@ -33,6 +54,9 @@ export interface BulkAddResponse {
33
54
  }
34
55
  export interface AddLevelResponse {
35
56
  success: boolean;
57
+ /** ID of the level just created, recovered from the redirect URL. */
58
+ levelId?: number;
59
+ redirect_url?: string;
36
60
  level?: CourseLevel;
37
61
  rendered_level?: string;
38
62
  [key: string]: unknown;
@@ -59,6 +83,21 @@ export interface SearchPoolResponse {
59
83
  success: boolean;
60
84
  result: SearchPoolResultItem[];
61
85
  }
86
+ /** A pair of pool columns: one prompts, the other answers. */
87
+ export interface ColumnPair {
88
+ learningColumn: number;
89
+ definitionColumn: number;
90
+ }
91
+ export interface LevelThing {
92
+ /** Pool-authoring identity. This is what deleteThingFromLevel needs. */
93
+ thingId: ThingId;
94
+ /** Course-facing identity the thing ID was derived from. */
95
+ learnableId: LearnableId;
96
+ learningElement: string;
97
+ definitionElement: string;
98
+ itemType: string;
99
+ difficulty: string;
100
+ }
62
101
  export interface PoolColumnConfig {
63
102
  kind: string;
64
103
  label: string;
@@ -134,6 +173,20 @@ export interface Learnable {
134
173
  item_type: string;
135
174
  difficulty: string;
136
175
  }
176
+ /**
177
+ * A learnable as this SDK hands it out: the raw fields plus the thing ID it
178
+ * was built from, so callers never have to unpack the ID themselves.
179
+ */
180
+ export interface CourseItem {
181
+ learnableId: LearnableId;
182
+ thingId: ThingId;
183
+ /** Levels this item appears in. Normally one, but the API permits more. */
184
+ levelIds: number[];
185
+ learningElement: string;
186
+ definitionElement: string;
187
+ itemType: string;
188
+ difficulty: string;
189
+ }
137
190
  export interface GetLearnableResponse {
138
191
  learnables: Record<string, Learnable>;
139
192
  }
@@ -161,4 +214,5 @@ export interface AuthWebResponse {
161
214
  success?: boolean;
162
215
  [key: string]: unknown;
163
216
  }
217
+ export {};
164
218
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,2 +1,7 @@
1
- export {};
1
+ export function asThingId(id) {
2
+ return id;
3
+ }
4
+ export function asLearnableId(id) {
5
+ return id;
6
+ }
2
7
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,SAAS,CAAC,EAAU;IACnC,OAAO,EAAa,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAU;IACvC,OAAO,EAAiB,CAAC;AAC1B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "memrise",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "Unofficial Memrise API client for Node.js and Bun",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",