audible-api-ts 0.3.0 → 0.4.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/README.md CHANGED
@@ -118,6 +118,7 @@ Available genres: `'science-fiction'`, `'fantasy'`, `'thriller'`, `'romance'`, `
118
118
  | `refresh(credentials)` | Manually refresh an access token (usually not needed — auto-refresh is built-in) |
119
119
  | `library(credentials)` | Fetch all library audiobooks |
120
120
  | `wishlist(credentials)` | Fetch all wishlist audiobooks |
121
+ | `lastPositions(credentials, asins)` | Where the reader last stopped in each title, the reliable progress signal |
121
122
  | `catalog(credentials, options)` | Search catalog by category with sorting |
122
123
  | `verify(credentials)` | Check if credentials are valid |
123
124
 
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { catalog } from './catalog.js';
2
2
  export type { AudibleGenre } from './categories.js';
3
3
  export { GENRE_CATEGORIES, resolveGenreId } from './categories.js';
4
4
  export { login, refresh, register } from './client.js';
5
- export { library, verify, wishlist } from './library.js';
5
+ export { lastPositions, library, verify, wishlist } from './library.js';
6
6
  export { AUDIBLE_LOCALES } from './locales.js';
7
- export type { AudibleCategory, AudibleCookie, AudibleCredentials, AudibleItem, AudibleLocale, AudibleRating, AudibleRelationship, AuthSession, CatalogOptions, CategoryLadder, ListeningStatus, LocaleConfig, RatingDistribution, } from './types.js';
7
+ export type { AudibleCategory, AudibleCookie, AudibleCredentials, AudibleItem, AudibleLocale, AudibleRating, AudibleRelationship, AuthSession, CatalogOptions, CategoryLadder, LastPosition, ListeningStatus, LocaleConfig, RatingDistribution, } from './types.js';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -12,19 +12,31 @@ var __export = (target, all) => {
12
12
  set: __exportSetter.bind(all, name)
13
13
  });
14
14
  };
15
- // node_modules/lodash-es/_arrayMap.js
16
- function arrayMap(array, iteratee) {
17
- var index = -1, length = array == null ? 0 : array.length, result = Array(length);
15
+ // node_modules/lodash-es/_baseSlice.js
16
+ function baseSlice(array, start, end) {
17
+ var index = -1, length = array.length;
18
+ if (start < 0) {
19
+ start = -start > length ? 0 : length + start;
20
+ }
21
+ end = end > length ? length : end;
22
+ if (end < 0) {
23
+ end += length;
24
+ }
25
+ length = start > end ? 0 : end - start >>> 0;
26
+ start >>>= 0;
27
+ var result = Array(length);
18
28
  while (++index < length) {
19
- result[index] = iteratee(array[index], index, array);
29
+ result[index] = array[index + start];
20
30
  }
21
31
  return result;
22
32
  }
23
- var _arrayMap_default = arrayMap;
33
+ var _baseSlice_default = baseSlice;
24
34
 
25
- // node_modules/lodash-es/isArray.js
26
- var isArray = Array.isArray;
27
- var isArray_default = isArray;
35
+ // node_modules/lodash-es/eq.js
36
+ function eq(value, other) {
37
+ return value === other || value !== value && other !== other;
38
+ }
39
+ var eq_default = eq;
28
40
 
29
41
  // node_modules/lodash-es/_freeGlobal.js
30
42
  var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
@@ -82,6 +94,79 @@ function baseGetTag(value) {
82
94
  }
83
95
  var _baseGetTag_default = baseGetTag;
84
96
 
97
+ // node_modules/lodash-es/isObject.js
98
+ function isObject(value) {
99
+ var type = typeof value;
100
+ return value != null && (type == "object" || type == "function");
101
+ }
102
+ var isObject_default = isObject;
103
+
104
+ // node_modules/lodash-es/isFunction.js
105
+ var asyncTag = "[object AsyncFunction]";
106
+ var funcTag = "[object Function]";
107
+ var genTag = "[object GeneratorFunction]";
108
+ var proxyTag = "[object Proxy]";
109
+ function isFunction(value) {
110
+ if (!isObject_default(value)) {
111
+ return false;
112
+ }
113
+ var tag = _baseGetTag_default(value);
114
+ return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
115
+ }
116
+ var isFunction_default = isFunction;
117
+
118
+ // node_modules/lodash-es/isLength.js
119
+ var MAX_SAFE_INTEGER = 9007199254740991;
120
+ function isLength(value) {
121
+ return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
122
+ }
123
+ var isLength_default = isLength;
124
+
125
+ // node_modules/lodash-es/isArrayLike.js
126
+ function isArrayLike(value) {
127
+ return value != null && isLength_default(value.length) && !isFunction_default(value);
128
+ }
129
+ var isArrayLike_default = isArrayLike;
130
+
131
+ // node_modules/lodash-es/_isIndex.js
132
+ var MAX_SAFE_INTEGER2 = 9007199254740991;
133
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
134
+ function isIndex(value, length) {
135
+ var type = typeof value;
136
+ length = length == null ? MAX_SAFE_INTEGER2 : length;
137
+ return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
138
+ }
139
+ var _isIndex_default = isIndex;
140
+
141
+ // node_modules/lodash-es/_isIterateeCall.js
142
+ function isIterateeCall(value, index, object) {
143
+ if (!isObject_default(object)) {
144
+ return false;
145
+ }
146
+ var type = typeof index;
147
+ if (type == "number" ? isArrayLike_default(object) && _isIndex_default(index, object.length) : type == "string" && (index in object)) {
148
+ return eq_default(object[index], value);
149
+ }
150
+ return false;
151
+ }
152
+ var _isIterateeCall_default = isIterateeCall;
153
+
154
+ // node_modules/lodash-es/_trimmedEndIndex.js
155
+ var reWhitespace = /\s/;
156
+ function trimmedEndIndex(string) {
157
+ var index = string.length;
158
+ while (index-- && reWhitespace.test(string.charAt(index))) {}
159
+ return index;
160
+ }
161
+ var _trimmedEndIndex_default = trimmedEndIndex;
162
+
163
+ // node_modules/lodash-es/_baseTrim.js
164
+ var reTrimStart = /^\s+/;
165
+ function baseTrim(string) {
166
+ return string ? string.slice(0, _trimmedEndIndex_default(string) + 1).replace(reTrimStart, "") : string;
167
+ }
168
+ var _baseTrim_default = baseTrim;
169
+
85
170
  // node_modules/lodash-es/isObjectLike.js
86
171
  function isObjectLike(value) {
87
172
  return value != null && typeof value == "object";
@@ -95,6 +180,89 @@ function isSymbol(value) {
95
180
  }
96
181
  var isSymbol_default = isSymbol;
97
182
 
183
+ // node_modules/lodash-es/toNumber.js
184
+ var NAN = 0 / 0;
185
+ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
186
+ var reIsBinary = /^0b[01]+$/i;
187
+ var reIsOctal = /^0o[0-7]+$/i;
188
+ var freeParseInt = parseInt;
189
+ function toNumber(value) {
190
+ if (typeof value == "number") {
191
+ return value;
192
+ }
193
+ if (isSymbol_default(value)) {
194
+ return NAN;
195
+ }
196
+ if (isObject_default(value)) {
197
+ var other = typeof value.valueOf == "function" ? value.valueOf() : value;
198
+ value = isObject_default(other) ? other + "" : other;
199
+ }
200
+ if (typeof value != "string") {
201
+ return value === 0 ? value : +value;
202
+ }
203
+ value = _baseTrim_default(value);
204
+ var isBinary = reIsBinary.test(value);
205
+ return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
206
+ }
207
+ var toNumber_default = toNumber;
208
+
209
+ // node_modules/lodash-es/toFinite.js
210
+ var INFINITY = 1 / 0;
211
+ var MAX_INTEGER = 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;
212
+ function toFinite(value) {
213
+ if (!value) {
214
+ return value === 0 ? value : 0;
215
+ }
216
+ value = toNumber_default(value);
217
+ if (value === INFINITY || value === -INFINITY) {
218
+ var sign = value < 0 ? -1 : 1;
219
+ return sign * MAX_INTEGER;
220
+ }
221
+ return value === value ? value : 0;
222
+ }
223
+ var toFinite_default = toFinite;
224
+
225
+ // node_modules/lodash-es/toInteger.js
226
+ function toInteger(value) {
227
+ var result = toFinite_default(value), remainder = result % 1;
228
+ return result === result ? remainder ? result - remainder : result : 0;
229
+ }
230
+ var toInteger_default = toInteger;
231
+
232
+ // node_modules/lodash-es/chunk.js
233
+ var nativeCeil = Math.ceil;
234
+ var nativeMax = Math.max;
235
+ function chunk(array, size, guard) {
236
+ if (guard ? _isIterateeCall_default(array, size, guard) : size === undefined) {
237
+ size = 1;
238
+ } else {
239
+ size = nativeMax(toInteger_default(size), 0);
240
+ }
241
+ var length = array == null ? 0 : array.length;
242
+ if (!length || size < 1) {
243
+ return [];
244
+ }
245
+ var index = 0, resIndex = 0, result = Array(nativeCeil(length / size));
246
+ while (index < length) {
247
+ result[resIndex++] = _baseSlice_default(array, index, index += size);
248
+ }
249
+ return result;
250
+ }
251
+ var chunk_default = chunk;
252
+ // node_modules/lodash-es/_arrayMap.js
253
+ function arrayMap(array, iteratee) {
254
+ var index = -1, length = array == null ? 0 : array.length, result = Array(length);
255
+ while (++index < length) {
256
+ result[index] = iteratee(array[index], index, array);
257
+ }
258
+ return result;
259
+ }
260
+ var _arrayMap_default = arrayMap;
261
+
262
+ // node_modules/lodash-es/isArray.js
263
+ var isArray = Array.isArray;
264
+ var isArray_default = isArray;
265
+
98
266
  // node_modules/lodash-es/_isKey.js
99
267
  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
100
268
  var reIsPlainProp = /^\w*$/;
@@ -110,27 +278,6 @@ function isKey(value, object) {
110
278
  }
111
279
  var _isKey_default = isKey;
112
280
 
113
- // node_modules/lodash-es/isObject.js
114
- function isObject(value) {
115
- var type = typeof value;
116
- return value != null && (type == "object" || type == "function");
117
- }
118
- var isObject_default = isObject;
119
-
120
- // node_modules/lodash-es/isFunction.js
121
- var asyncTag = "[object AsyncFunction]";
122
- var funcTag = "[object Function]";
123
- var genTag = "[object GeneratorFunction]";
124
- var proxyTag = "[object Proxy]";
125
- function isFunction(value) {
126
- if (!isObject_default(value)) {
127
- return false;
128
- }
129
- var tag = _baseGetTag_default(value);
130
- return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
131
- }
132
- var isFunction_default = isFunction;
133
-
134
281
  // node_modules/lodash-es/_coreJsData.js
135
282
  var coreJsData = _root_default["__core-js_shared__"];
136
283
  var _coreJsData_default = coreJsData;
@@ -266,12 +413,6 @@ function listCacheClear() {
266
413
  }
267
414
  var _listCacheClear_default = listCacheClear;
268
415
 
269
- // node_modules/lodash-es/eq.js
270
- function eq(value, other) {
271
- return value === other || value !== value && other !== other;
272
- }
273
- var eq_default = eq;
274
-
275
416
  // node_modules/lodash-es/_assocIndexOf.js
276
417
  function assocIndexOf(array, key) {
277
418
  var length = array.length;
@@ -470,7 +611,7 @@ var stringToPath = _memoizeCapped_default(function(string) {
470
611
  var _stringToPath_default = stringToPath;
471
612
 
472
613
  // node_modules/lodash-es/_baseToString.js
473
- var INFINITY = 1 / 0;
614
+ var INFINITY2 = 1 / 0;
474
615
  var symbolProto = _Symbol_default ? _Symbol_default.prototype : undefined;
475
616
  var symbolToString = symbolProto ? symbolProto.toString : undefined;
476
617
  function baseToString(value) {
@@ -484,7 +625,7 @@ function baseToString(value) {
484
625
  return symbolToString ? symbolToString.call(value) : "";
485
626
  }
486
627
  var result = value + "";
487
- return result == "0" && 1 / value == -INFINITY ? "-0" : result;
628
+ return result == "0" && 1 / value == -INFINITY2 ? "-0" : result;
488
629
  }
489
630
  var _baseToString_default = baseToString;
490
631
 
@@ -504,13 +645,13 @@ function castPath(value, object) {
504
645
  var _castPath_default = castPath;
505
646
 
506
647
  // node_modules/lodash-es/_toKey.js
507
- var INFINITY2 = 1 / 0;
648
+ var INFINITY3 = 1 / 0;
508
649
  function toKey(value) {
509
650
  if (typeof value == "string" || isSymbol_default(value)) {
510
651
  return value;
511
652
  }
512
653
  var result = value + "";
513
- return result == "0" && 1 / value == -INFINITY2 ? "-0" : result;
654
+ return result == "0" && 1 / value == -INFINITY3 ? "-0" : result;
514
655
  }
515
656
  var _toKey_default = toKey;
516
657
 
@@ -863,23 +1004,6 @@ var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : undefined;
863
1004
  var isBuffer = nativeIsBuffer || stubFalse_default;
864
1005
  var isBuffer_default = isBuffer;
865
1006
 
866
- // node_modules/lodash-es/_isIndex.js
867
- var MAX_SAFE_INTEGER = 9007199254740991;
868
- var reIsUint = /^(?:0|[1-9]\d*)$/;
869
- function isIndex(value, length) {
870
- var type = typeof value;
871
- length = length == null ? MAX_SAFE_INTEGER : length;
872
- return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
873
- }
874
- var _isIndex_default = isIndex;
875
-
876
- // node_modules/lodash-es/isLength.js
877
- var MAX_SAFE_INTEGER2 = 9007199254740991;
878
- function isLength(value) {
879
- return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2;
880
- }
881
- var isLength_default = isLength;
882
-
883
1007
  // node_modules/lodash-es/_baseIsTypedArray.js
884
1008
  var argsTag2 = "[object Arguments]";
885
1009
  var arrayTag = "[object Array]";
@@ -997,12 +1121,6 @@ function baseKeys(object) {
997
1121
  }
998
1122
  var _baseKeys_default = baseKeys;
999
1123
 
1000
- // node_modules/lodash-es/isArrayLike.js
1001
- function isArrayLike(value) {
1002
- return value != null && isLength_default(value.length) && !isFunction_default(value);
1003
- }
1004
- var isArrayLike_default = isArrayLike;
1005
-
1006
1124
  // node_modules/lodash-es/keys.js
1007
1125
  function keys(object) {
1008
1126
  return isArrayLike_default(object) ? _arrayLikeKeys_default(object) : _baseKeys_default(object);
@@ -1543,8 +1661,8 @@ function noop() {}
1543
1661
  var noop_default = noop;
1544
1662
 
1545
1663
  // node_modules/lodash-es/_createSet.js
1546
- var INFINITY3 = 1 / 0;
1547
- var createSet = !(_Set_default && 1 / _setToArray_default(new _Set_default([, -0]))[1] == INFINITY3) ? noop_default : function(values) {
1664
+ var INFINITY4 = 1 / 0;
1665
+ var createSet = !(_Set_default && 1 / _setToArray_default(new _Set_default([, -0]))[1] == INFINITY4) ? noop_default : function(values) {
1548
1666
  return new _Set_default(values);
1549
1667
  };
1550
1668
  var _createSet_default = createSet;
@@ -5696,6 +5814,16 @@ var relationshipSchema = objectType({
5696
5814
  sort: optionalString,
5697
5815
  url: optionalString
5698
5816
  });
5817
+ var lastPositionsSchema = objectType({
5818
+ asin_last_position_heard_annots: arrayType(objectType({
5819
+ asin: stringType(),
5820
+ last_position_heard: objectType({
5821
+ status: stringType(),
5822
+ position_ms: numberType().nullish(),
5823
+ last_updated: stringType().nullish()
5824
+ })
5825
+ })).nullish().transform((v) => v ?? [])
5826
+ });
5699
5827
  var audibleRawItemSchema = objectType({
5700
5828
  asin: stringType().min(1),
5701
5829
  title: stringType().min(1),
@@ -5914,6 +6042,23 @@ var catalog = async (credentials, options) => {
5914
6042
  var RESPONSE_GROUPS = "product_details,contributors,media,product_attrs,listening_status,series,rating,category_ladders,product_desc,product_extended_attrs,relationships";
5915
6043
  var library = async (credentials) => fetchAllPages("/library", credentials, RESPONSE_GROUPS);
5916
6044
  var wishlist = async (credentials) => fetchAllPages("/wishlist", credentials, RESPONSE_GROUPS);
6045
+ var POSITIONS_BATCH_SIZE = 25;
6046
+ var utcDateOf = (value) => new Date(`${value.replace(" ", "T")}Z`);
6047
+ var fetchPositionBatches = async (batches, credentials, accumulated = []) => {
6048
+ const [batch, ...rest] = batches;
6049
+ if (!batch)
6050
+ return { positions: accumulated, credentials };
6051
+ const { data, credentials: fresh } = await audibleFetch("/annotations/lastpositions", credentials, { asins: batch.join(",") });
6052
+ const heard = lastPositionsSchema.parse(data).asin_last_position_heard_annots.flatMap(({ asin, last_position_heard: position }) => position.status === "Exists" && position.last_updated ? [
6053
+ {
6054
+ asin,
6055
+ positionMs: position.position_ms ?? 0,
6056
+ lastUpdatedAt: utcDateOf(position.last_updated)
6057
+ }
6058
+ ] : []);
6059
+ return fetchPositionBatches(rest, fresh, [...accumulated, ...heard]);
6060
+ };
6061
+ var lastPositions = async (credentials, asins) => fetchPositionBatches(chunk_default([...asins], POSITIONS_BATCH_SIZE), credentials);
5917
6062
  var verify = async (credentials) => {
5918
6063
  await audibleFetch("/library", credentials, {
5919
6064
  num_results: "1",
@@ -5925,6 +6070,7 @@ export {
5925
6070
  AUDIBLE_LOCALES,
5926
6071
  GENRE_CATEGORIES,
5927
6072
  catalog,
6073
+ lastPositions,
5928
6074
  library,
5929
6075
  login,
5930
6076
  refresh,
package/dist/library.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AudibleCredentials } from './types.js';
1
+ import type { AudibleCredentials, LastPosition } from './types.js';
2
2
  /**
3
3
  * Fetch the user's entire Audible library with automatic pagination.
4
4
  * Credentials are auto-refreshed if expired.
@@ -19,6 +19,18 @@ export declare const wishlist: (credentials: AudibleCredentials) => Promise<{
19
19
  items: import("./types.js").AudibleItem[];
20
20
  credentials: AudibleCredentials;
21
21
  }>;
22
+ /**
23
+ * Fetch where the reader last stopped in each of the given titles.
24
+ * Asked in batches of 25, the most Audible accepts per call. A title the
25
+ * reader never opened is left out of the answer.
26
+ * Credentials are auto-refreshed if expired.
27
+ *
28
+ * @returns The last positions and the (potentially refreshed) credentials
29
+ */
30
+ export declare const lastPositions: (credentials: AudibleCredentials, asins: readonly string[]) => Promise<{
31
+ positions: LastPosition[];
32
+ credentials: AudibleCredentials;
33
+ }>;
22
34
  /**
23
35
  * Verify that credentials are valid by making a minimal API call.
24
36
  * Credentials are auto-refreshed if expired.
@@ -1 +1 @@
1
- {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAKpD;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAU,aAAa,kBAAkB;;;EACJ,CAAA;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAU,aAAa,kBAAkB;;;EACJ,CAAA;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAU,aAAa,kBAAkB,kBAM3D,CAAA"}
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAKlE;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAU,aAAa,kBAAkB;;;EACJ,CAAA;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAU,aAAa,kBAAkB;;;EACJ,CAAA;AAsC1D;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAU,aAAa,kBAAkB,EAAE,OAAO,SAAS,MAAM,EAAE;eAlCrE,YAAY,EAAE;iBAAe,kBAAkB;EAmCK,CAAA;AAE5E;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAU,aAAa,kBAAkB,kBAM3D,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=library.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.unit.test.d.ts","sourceRoot":"","sources":["../src/library.unit.test.ts"],"names":[],"mappings":""}
package/dist/schemas.d.ts CHANGED
@@ -166,6 +166,72 @@ export declare const audibleRatingSchema: z.ZodOptional<z.ZodNullable<z.ZodObjec
166
166
  } | null | undefined;
167
167
  }>>>;
168
168
  /** Zod schema for parsing raw Audible API item responses */
169
+ /** `GET /1.0/annotations/lastpositions`: where the reader last stopped in each
170
+ * asked title. A title never opened answers `DoesNotExist` and nothing else. */
171
+ export declare const lastPositionsSchema: z.ZodObject<{
172
+ asin_last_position_heard_annots: z.ZodEffects<z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
173
+ asin: z.ZodString;
174
+ last_position_heard: z.ZodObject<{
175
+ status: z.ZodString;
176
+ position_ms: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
177
+ last_updated: z.ZodOptional<z.ZodNullable<z.ZodString>>;
178
+ }, "strip", z.ZodTypeAny, {
179
+ status: string;
180
+ position_ms?: number | null | undefined;
181
+ last_updated?: string | null | undefined;
182
+ }, {
183
+ status: string;
184
+ position_ms?: number | null | undefined;
185
+ last_updated?: string | null | undefined;
186
+ }>;
187
+ }, "strip", z.ZodTypeAny, {
188
+ asin: string;
189
+ last_position_heard: {
190
+ status: string;
191
+ position_ms?: number | null | undefined;
192
+ last_updated?: string | null | undefined;
193
+ };
194
+ }, {
195
+ asin: string;
196
+ last_position_heard: {
197
+ status: string;
198
+ position_ms?: number | null | undefined;
199
+ last_updated?: string | null | undefined;
200
+ };
201
+ }>, "many">>>, {
202
+ asin: string;
203
+ last_position_heard: {
204
+ status: string;
205
+ position_ms?: number | null | undefined;
206
+ last_updated?: string | null | undefined;
207
+ };
208
+ }[], {
209
+ asin: string;
210
+ last_position_heard: {
211
+ status: string;
212
+ position_ms?: number | null | undefined;
213
+ last_updated?: string | null | undefined;
214
+ };
215
+ }[] | null | undefined>;
216
+ }, "strip", z.ZodTypeAny, {
217
+ asin_last_position_heard_annots: {
218
+ asin: string;
219
+ last_position_heard: {
220
+ status: string;
221
+ position_ms?: number | null | undefined;
222
+ last_updated?: string | null | undefined;
223
+ };
224
+ }[];
225
+ }, {
226
+ asin_last_position_heard_annots?: {
227
+ asin: string;
228
+ last_position_heard: {
229
+ status: string;
230
+ position_ms?: number | null | undefined;
231
+ last_updated?: string | null | undefined;
232
+ };
233
+ }[] | null | undefined;
234
+ }>;
169
235
  export declare const audibleRawItemSchema: z.ZodObject<{
170
236
  asin: z.ZodString;
171
237
  title: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAkBvB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOpB,CAAA;AAuBZ,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiG/B,CAAA"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAkBvB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOpB,CAAA;AAuBZ,4DAA4D;AAC5D;iFACiF;AACjF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc9B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiG/B,CAAA"}
package/dist/types.d.ts CHANGED
@@ -61,6 +61,18 @@ export type ListeningStatus = {
61
61
  percentComplete?: number;
62
62
  timeRemainingSeconds?: number;
63
63
  };
64
+ /** Where the reader last stopped in a library item.
65
+ *
66
+ * This is the reliable progress signal: `ListeningStatus.percentComplete` on a
67
+ * library item is often stale (0 on a title two hours in), while the position
68
+ * is what the player itself saves. */
69
+ export type LastPosition = {
70
+ asin: string;
71
+ /** Milliseconds from the start of the recording. */
72
+ positionMs: number;
73
+ /** When the player last saved the position, in UTC. */
74
+ lastUpdatedAt: Date;
75
+ };
64
76
  /** An audiobook item from Audible */
65
77
  export type AudibleItem = {
66
78
  asin: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audible-api-ts",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "A fully typed TypeScript client for the Audible API — authentication, library, wishlist, and catalog search",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",