@gyldendalas/gyldendal-divine-api 0.0.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/dist/index.cjs +403 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +149 -0
- package/dist/index.d.ts +149 -0
- package/dist/index.js +364 -0
- package/dist/index.js.map +1 -0
- package/package.json +20 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
|
+
TaggingService: () => TaggingService,
|
|
34
|
+
UserFolders: () => UserFolders,
|
|
35
|
+
UserSettings: () => UserSettings
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(index_exports);
|
|
38
|
+
|
|
39
|
+
// src/services/base_service.ts
|
|
40
|
+
var HTTPError = class extends Error {
|
|
41
|
+
response;
|
|
42
|
+
constructor(message, response) {
|
|
43
|
+
super();
|
|
44
|
+
this.message = message;
|
|
45
|
+
this.response = response;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
var BaseService = class {
|
|
49
|
+
bearerToken;
|
|
50
|
+
apiKey;
|
|
51
|
+
serviceUrl;
|
|
52
|
+
environment;
|
|
53
|
+
myAccountId;
|
|
54
|
+
baseDomain;
|
|
55
|
+
constructor({
|
|
56
|
+
bearerToken = void 0,
|
|
57
|
+
apiKey = void 0,
|
|
58
|
+
serviceUrl = void 0,
|
|
59
|
+
environment = "production",
|
|
60
|
+
myAccountId = "SYSTIMEMYACCOUNT",
|
|
61
|
+
baseDomain = "systime.dk"
|
|
62
|
+
}) {
|
|
63
|
+
this.bearerToken = bearerToken;
|
|
64
|
+
this.apiKey = apiKey;
|
|
65
|
+
this.serviceUrl = serviceUrl;
|
|
66
|
+
this.environment = environment;
|
|
67
|
+
this.myAccountId = myAccountId;
|
|
68
|
+
this.baseDomain = baseDomain;
|
|
69
|
+
}
|
|
70
|
+
discoverUrlPrefix() {
|
|
71
|
+
throw new Error("Method not implemented.");
|
|
72
|
+
}
|
|
73
|
+
getUrlPrefix() {
|
|
74
|
+
if (this.serviceUrl) {
|
|
75
|
+
return this.serviceUrl;
|
|
76
|
+
}
|
|
77
|
+
return this.discoverUrlPrefix();
|
|
78
|
+
}
|
|
79
|
+
async addAuthHeaders(requestHeaders) {
|
|
80
|
+
if (this.bearerToken) {
|
|
81
|
+
requestHeaders.set("Authorization", `Bearer ${this.bearerToken}`);
|
|
82
|
+
} else if (this.apiKey) {
|
|
83
|
+
requestHeaders.set("x-api-key", this.apiKey);
|
|
84
|
+
}
|
|
85
|
+
return requestHeaders;
|
|
86
|
+
}
|
|
87
|
+
async getAsync({
|
|
88
|
+
url,
|
|
89
|
+
headers,
|
|
90
|
+
timeout
|
|
91
|
+
}) {
|
|
92
|
+
const method = "GET";
|
|
93
|
+
const response = await this.callAsync({ url, body: null, method, headers, timeout });
|
|
94
|
+
return response.json();
|
|
95
|
+
}
|
|
96
|
+
async putAsync({
|
|
97
|
+
url,
|
|
98
|
+
headers,
|
|
99
|
+
body,
|
|
100
|
+
timeout
|
|
101
|
+
}) {
|
|
102
|
+
const method = "PUT";
|
|
103
|
+
const response = await this.callAsync({ url, body, method, headers, timeout });
|
|
104
|
+
return response.json();
|
|
105
|
+
}
|
|
106
|
+
async deleteAsync({
|
|
107
|
+
url,
|
|
108
|
+
headers,
|
|
109
|
+
timeout
|
|
110
|
+
}) {
|
|
111
|
+
const method = "DELETE";
|
|
112
|
+
const response = await this.callAsync({ url, body: null, method, headers, timeout });
|
|
113
|
+
return response.json();
|
|
114
|
+
}
|
|
115
|
+
async callAsync({
|
|
116
|
+
url,
|
|
117
|
+
body,
|
|
118
|
+
method,
|
|
119
|
+
headers,
|
|
120
|
+
timeout
|
|
121
|
+
}) {
|
|
122
|
+
if (!headers) {
|
|
123
|
+
headers = new Headers();
|
|
124
|
+
}
|
|
125
|
+
headers = await this.addAuthHeaders(headers);
|
|
126
|
+
const response = await fetch(url, {
|
|
127
|
+
method,
|
|
128
|
+
body,
|
|
129
|
+
headers,
|
|
130
|
+
signal: AbortSignal.timeout(timeout)
|
|
131
|
+
});
|
|
132
|
+
if (!response.ok) {
|
|
133
|
+
throw new HTTPError(`Got ${response.status} while calling ${response.url}`, response);
|
|
134
|
+
}
|
|
135
|
+
return response;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
var base_service_default = BaseService;
|
|
139
|
+
|
|
140
|
+
// src/services/tagging_service.ts
|
|
141
|
+
var TaggingService = class extends base_service_default {
|
|
142
|
+
discoverUrlPrefix() {
|
|
143
|
+
switch (this.environment) {
|
|
144
|
+
case "local":
|
|
145
|
+
return "http://localhost:4000";
|
|
146
|
+
case "production":
|
|
147
|
+
return `https://tagging.services.${this.baseDomain}`;
|
|
148
|
+
case "staging":
|
|
149
|
+
return `https://${this.environment}-tagging.services.${this.baseDomain}`;
|
|
150
|
+
default:
|
|
151
|
+
throw new Error(`Unknown environment: ${this.environment}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async getTagsByValue({
|
|
155
|
+
identity,
|
|
156
|
+
resource_type,
|
|
157
|
+
resource_name,
|
|
158
|
+
tag_value,
|
|
159
|
+
timeout = 3e3
|
|
160
|
+
}) {
|
|
161
|
+
const url = `${this.getUrlPrefix()}/tags/by_value/${tag_value}/${identity}${resource_type ? `/${resource_type}` : ""}${resource_name ? `/${resource_name}` : ""}`;
|
|
162
|
+
const headers = new Headers();
|
|
163
|
+
return await this.getAsync({ url, headers, timeout });
|
|
164
|
+
}
|
|
165
|
+
async getTagsByName({
|
|
166
|
+
identity,
|
|
167
|
+
resource_type,
|
|
168
|
+
resource_name,
|
|
169
|
+
tag_name,
|
|
170
|
+
timeout = 3e3
|
|
171
|
+
}) {
|
|
172
|
+
const url = `${this.getUrlPrefix()}/tags/by_name/${identity}${resource_type ? `/${resource_type}` : ""}${resource_name ? `/${resource_name}` : ""}${tag_name ? `/${tag_name}` : ""}`;
|
|
173
|
+
const headers = new Headers();
|
|
174
|
+
return await this.getAsync({ url, headers, timeout });
|
|
175
|
+
}
|
|
176
|
+
async createTag({
|
|
177
|
+
tag,
|
|
178
|
+
timeout = 3e3
|
|
179
|
+
}) {
|
|
180
|
+
const url = `${this.getUrlPrefix()}/tags`;
|
|
181
|
+
const headers = new Headers();
|
|
182
|
+
headers.append("Content-Type", "application/json");
|
|
183
|
+
return await this.putAsync({ url, headers, body: JSON.stringify(tag), timeout });
|
|
184
|
+
}
|
|
185
|
+
async deleteTag({
|
|
186
|
+
identity,
|
|
187
|
+
resource_type,
|
|
188
|
+
resource_name,
|
|
189
|
+
tag_name,
|
|
190
|
+
timeout = 3e3
|
|
191
|
+
}) {
|
|
192
|
+
const url = `${this.getUrlPrefix()}/tags/by_name/${identity}${resource_type ? `/${resource_type}` : ""}${resource_name ? `/${resource_name}` : ""}${tag_name ? `/${tag_name}` : ""}`;
|
|
193
|
+
const headers = new Headers();
|
|
194
|
+
await this.deleteAsync({ url, headers, timeout });
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
var tagging_service_default = TaggingService;
|
|
198
|
+
|
|
199
|
+
// src/services/user_settings.ts
|
|
200
|
+
var UserSettings = class extends base_service_default {
|
|
201
|
+
discoverUrlPrefix() {
|
|
202
|
+
switch (this.environment) {
|
|
203
|
+
case "local":
|
|
204
|
+
return "http://localhost:4000";
|
|
205
|
+
case "production":
|
|
206
|
+
return `https://user-settings-service.services.${this.baseDomain}`;
|
|
207
|
+
case "staging":
|
|
208
|
+
return `https://${this.environment}-user-settings-service.services.${this.baseDomain}`;
|
|
209
|
+
default:
|
|
210
|
+
throw new Error(`Unknown environment: ${this.environment}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async getSettings({
|
|
214
|
+
isbn,
|
|
215
|
+
timeout = 5e3
|
|
216
|
+
}) {
|
|
217
|
+
const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;
|
|
218
|
+
const headers = new Headers();
|
|
219
|
+
return await this.getAsync({ url, headers, timeout });
|
|
220
|
+
}
|
|
221
|
+
async setSettings({
|
|
222
|
+
isbn,
|
|
223
|
+
settings,
|
|
224
|
+
timeout = 5e3
|
|
225
|
+
}) {
|
|
226
|
+
const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;
|
|
227
|
+
const headers = new Headers();
|
|
228
|
+
headers.set("Content-Type", "application/json");
|
|
229
|
+
return await this.putAsync({ url, headers, body: JSON.stringify(settings), timeout });
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
// src/services/highlevel/tagging/user_folders.ts
|
|
234
|
+
var import_crypto = __toESM(require("crypto"), 1);
|
|
235
|
+
var UserFolders = class extends tagging_service_default {
|
|
236
|
+
identity = void 0;
|
|
237
|
+
async getIdentity() {
|
|
238
|
+
if (this.identity) {
|
|
239
|
+
return this.identity;
|
|
240
|
+
}
|
|
241
|
+
if (this.bearerToken) {
|
|
242
|
+
const tokenParts = this.bearerToken.split(".");
|
|
243
|
+
const payload = Buffer.from(tokenParts[1], "base64").toString();
|
|
244
|
+
const payloadObject = JSON.parse(payload);
|
|
245
|
+
return `user_${payloadObject.authns}_${payloadObject.user}`;
|
|
246
|
+
}
|
|
247
|
+
throw new Error("The UserFolders service must be invoked with a valid bearer token");
|
|
248
|
+
}
|
|
249
|
+
async createFolder({
|
|
250
|
+
folder_name,
|
|
251
|
+
parent_folder_uuid,
|
|
252
|
+
timeout = 3e3
|
|
253
|
+
}) {
|
|
254
|
+
const tag = await this.createTag(
|
|
255
|
+
{
|
|
256
|
+
tag: {
|
|
257
|
+
identity: await this.getIdentity(),
|
|
258
|
+
resource_type: "myaccount_user_folder",
|
|
259
|
+
resource_name: import_crypto.default.randomUUID(),
|
|
260
|
+
tag_name: Buffer.from(folder_name).toString("base64"),
|
|
261
|
+
tag_value: parent_folder_uuid ?? "-"
|
|
262
|
+
},
|
|
263
|
+
timeout
|
|
264
|
+
}
|
|
265
|
+
);
|
|
266
|
+
return { name: folder_name, uuid: tag["resource_name"], parent: parent_folder_uuid };
|
|
267
|
+
}
|
|
268
|
+
async listFolders({
|
|
269
|
+
parent_folder_uuid,
|
|
270
|
+
timeout = 3e3
|
|
271
|
+
}) {
|
|
272
|
+
let tags;
|
|
273
|
+
if (parent_folder_uuid) {
|
|
274
|
+
tags = await this.getTagsByValue(
|
|
275
|
+
{
|
|
276
|
+
identity: await this.getIdentity(),
|
|
277
|
+
resource_type: "myaccount_user_folder",
|
|
278
|
+
tag_value: parent_folder_uuid,
|
|
279
|
+
timeout
|
|
280
|
+
}
|
|
281
|
+
);
|
|
282
|
+
} else {
|
|
283
|
+
tags = await this.getTagsByName(
|
|
284
|
+
{
|
|
285
|
+
identity: await this.getIdentity(),
|
|
286
|
+
resource_type: "myaccount_user_folder",
|
|
287
|
+
timeout
|
|
288
|
+
}
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
let folders = [];
|
|
292
|
+
for (const tag of tags) {
|
|
293
|
+
folders.push(
|
|
294
|
+
{
|
|
295
|
+
name: Buffer.from(tag["tag_name"], "base64").toString(),
|
|
296
|
+
uuid: tag["resource_name"],
|
|
297
|
+
parent: tag["tag_value"] === "-" ? void 0 : tag["tag_value"]
|
|
298
|
+
}
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
return folders;
|
|
302
|
+
}
|
|
303
|
+
async getFolderContent({
|
|
304
|
+
folder_uuid,
|
|
305
|
+
timeout = 3e3
|
|
306
|
+
}) {
|
|
307
|
+
let tags = await this.getTagsByValue(
|
|
308
|
+
{
|
|
309
|
+
identity: await this.getIdentity(),
|
|
310
|
+
tag_value: folder_uuid,
|
|
311
|
+
timeout
|
|
312
|
+
}
|
|
313
|
+
);
|
|
314
|
+
let content = [];
|
|
315
|
+
for (const tag of tags) {
|
|
316
|
+
if (tag["resource_type"] === "myaccount_user_folder") {
|
|
317
|
+
content.push(
|
|
318
|
+
{
|
|
319
|
+
type: tag["resource_type"],
|
|
320
|
+
identifier: tag["resource_name"],
|
|
321
|
+
folder_uuid: tag["tag_value"]
|
|
322
|
+
}
|
|
323
|
+
);
|
|
324
|
+
} else {
|
|
325
|
+
let folder = {
|
|
326
|
+
name: Buffer.from(tag["tag_name"], "base64").toString(),
|
|
327
|
+
uuid: tag["resource_name"],
|
|
328
|
+
parent: tag["tag_value"]
|
|
329
|
+
};
|
|
330
|
+
content.push(folder);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return content;
|
|
334
|
+
}
|
|
335
|
+
async addInternetbookToFolder({
|
|
336
|
+
folder_uuid,
|
|
337
|
+
isbn,
|
|
338
|
+
timeout = 3e3
|
|
339
|
+
}) {
|
|
340
|
+
return await this.addContentToFolder(
|
|
341
|
+
{
|
|
342
|
+
folder_uuid,
|
|
343
|
+
resource_name: isbn,
|
|
344
|
+
resource_type: "internetbook",
|
|
345
|
+
timeout
|
|
346
|
+
}
|
|
347
|
+
);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* This is a generic function for creating folder content elements.
|
|
351
|
+
**/
|
|
352
|
+
async addContentToFolder({
|
|
353
|
+
folder_uuid,
|
|
354
|
+
resource_name,
|
|
355
|
+
resource_type,
|
|
356
|
+
timeout = 3e3
|
|
357
|
+
}) {
|
|
358
|
+
await this.createTag(
|
|
359
|
+
{
|
|
360
|
+
tag: {
|
|
361
|
+
identity: await this.getIdentity(),
|
|
362
|
+
resource_type,
|
|
363
|
+
resource_name,
|
|
364
|
+
tag_name: "MYACCOUNT_USER_FOLDER",
|
|
365
|
+
tag_value: folder_uuid
|
|
366
|
+
},
|
|
367
|
+
timeout
|
|
368
|
+
}
|
|
369
|
+
);
|
|
370
|
+
return { type: resource_type, identifier: resource_name, folder_uuid };
|
|
371
|
+
}
|
|
372
|
+
async deleteFolder({
|
|
373
|
+
folder_uuid,
|
|
374
|
+
timeout = 3e3
|
|
375
|
+
}) {
|
|
376
|
+
await this.deleteTag(
|
|
377
|
+
{
|
|
378
|
+
identity: await this.getIdentity(),
|
|
379
|
+
resource_type: "myaccount_user_folder",
|
|
380
|
+
resource_name: folder_uuid,
|
|
381
|
+
timeout
|
|
382
|
+
}
|
|
383
|
+
);
|
|
384
|
+
}
|
|
385
|
+
async deleteAllFolders({
|
|
386
|
+
timeout = 3e3
|
|
387
|
+
}) {
|
|
388
|
+
await this.deleteTag(
|
|
389
|
+
{
|
|
390
|
+
identity: await this.getIdentity(),
|
|
391
|
+
resource_type: "myaccount_user_folder",
|
|
392
|
+
timeout
|
|
393
|
+
}
|
|
394
|
+
);
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
398
|
+
0 && (module.exports = {
|
|
399
|
+
TaggingService,
|
|
400
|
+
UserFolders,
|
|
401
|
+
UserSettings
|
|
402
|
+
});
|
|
403
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/services/base_service.ts","../src/services/tagging_service.ts","../src/services/user_settings.ts","../src/services/highlevel/tagging/user_folders.ts"],"sourcesContent":["export * from 'services/tagging_service.js';\nexport * from 'services/user_settings.js';\nexport * from 'services/highlevel/tagging/user_folders.js';\n","class HTTPError extends Error {\n public response: Response;\n \n constructor(message: string, response: Response) {\n super();\n this.message = message;\n this.response = response;\n }\n}\n\nexport class BaseService {\n public bearerToken: string | undefined;\n public apiKey: string | undefined;\n public serviceUrl: string | undefined;\n public environment: string;\n public myAccountId: string;\n public baseDomain: string;\n\n constructor({\n bearerToken = undefined,\n apiKey = undefined,\n serviceUrl = undefined,\n environment = 'production',\n myAccountId = 'SYSTIMEMYACCOUNT',\n baseDomain = 'systime.dk',\n } : {\n bearerToken?: string,\n apiKey?: string,\n serviceUrl?: string,\n environment: string,\n myAccountId: string,\n baseDomain?: string\n }) {\n this.bearerToken = bearerToken;\n this.apiKey = apiKey;\n this.serviceUrl = serviceUrl;\n this.environment = environment;\n this.myAccountId = myAccountId;\n this.baseDomain = baseDomain;\n }\n\n protected discoverUrlPrefix(): string {\n throw new Error('Method not implemented.');\n }\n\n public getUrlPrefix(): string {\n // If the URL has been explicitly set, return it.\n if (this.serviceUrl) {\n return this.serviceUrl;\n }\n return this.discoverUrlPrefix()\n }\n\n public async addAuthHeaders(requestHeaders: Headers): Promise<Headers> {\n if (this.bearerToken) {\n requestHeaders.set('Authorization', `Bearer ${this.bearerToken}`);\n } else if (this.apiKey) {\n requestHeaders.set('x-api-key', this.apiKey);\n }\n return requestHeaders;\n }\n\n async getAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'GET';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n return response.json();\n }\n\n async putAsync(\n {\n url,\n headers,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<object> {\n const method = 'PUT';\n const response = await this.callAsync({ url, body, method, headers, timeout });\n return response.json();\n }\n\n async deleteAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'DELETE';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n return response.json();\n }\n\n async callAsync(\n {\n url,\n body,\n method,\n headers,\n timeout\n }:\n {\n url: URL | string,\n body: string | null | undefined,\n method: string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<Response> {\n if (!headers) {\n headers = new Headers();\n }\n\n headers = await this.addAuthHeaders(headers);\n const response = await fetch(url, {\n\t method: method,\n body: body,\n headers: headers,\n signal: AbortSignal.timeout(timeout)\n });\n\n if (!response.ok) {\n\t\t\t\t\tthrow new HTTPError(`Got ${response.status} while calling ${response.url}`, response);\n }\n return response;\n }\n}\nexport default BaseService;\n","import BaseService from './base_service.js';\n\ninterface Tag {\n identity: string;\n resource_type: string;\n resource_name: string;\n tag_name: string;\n tag_value: string;\n}\n\nexport class TaggingService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'local':\n return 'http://localhost:4000';\n case 'production':\n return `https://tagging.services.${this.baseDomain}`;\n case 'staging':\n return `https://${this.environment}-tagging.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async getTagsByValue(\n {\n identity,\n resource_type,\n resource_name,\n tag_value,\n timeout = 3000\n }:\n {\n tag_value: string,\n identity: string,\n resource_type?: string,\n resource_name?: string,\n timeout?: number\n }\n ): Promise<Tag[]> {\n const url = `${this.getUrlPrefix()}/tags/by_value/${tag_value}/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as Tag[];\n }\n\n async getTagsByName(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n resource_type?: string,\n resource_name?: string,\n tag_name?: string,\n timeout?: number\n }\n ): Promise<Tag[]> {\n const url = `${this.getUrlPrefix()}/tags/by_name/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as Tag[];\n }\n\n async createTag(\n {\n tag,\n timeout = 3000\n }:\n {\n tag: Tag,\n timeout?: number\n }\n ): Promise<Tag> {\n const url = `${this.getUrlPrefix()}/tags`;\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n return await this.putAsync({url, headers, body: JSON.stringify(tag), timeout}) as Tag;\n }\n\n async deleteTag(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n resource_type?: string,\n resource_name?: string,\n tag_name?: string,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/tags/by_name/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n await this.deleteAsync({url, headers, timeout});\n }\n}\n\nexport default TaggingService;\n","import BaseService from './base_service.js';\n\nexport class UserSettings extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'local':\n return 'http://localhost:4000';\n case 'production':\n return `https://user-settings-service.services.${this.baseDomain}`;\n case 'staging':\n return `https://${this.environment}-user-settings-service.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async getSettings(\n {\n isbn,\n timeout = 5000\n }:\n {\n isbn: string,\n timeout?: number\n }\n ): Promise<object> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n return await this.getAsync({url, headers, timeout});\n }\n\n async setSettings(\n {\n isbn,\n settings,\n timeout = 5000\n }: \n {\n isbn: string,\n settings: object,\n timeout?: number\n }\n ): Promise<object> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n return await this.putAsync({url, headers, body: JSON.stringify(settings), timeout});\n }\n}\n\nexport default UserSettings;\n","import crypto from 'crypto';\nimport TaggingService from '../../tagging_service.js';\n\ninterface FolderObject {}\n\ninterface Folder extends FolderObject {\n name: string;\n uuid: string;\n parent?: string;\n}\n\ninterface FolderContent extends FolderObject {\n type: string;\n identifier: string;\n folder_uuid: string;\n}\n\n/**\n * UserFolders is a service that allows users to create folders in their account. It's built on top of the Tagging service.\n * Folders are created with a name and an optional parent folder. If no parent folder is provided, the folder is created at the root level.\n * Folders are created with a unique UUID that can be used to reference the folder in future requests. The folder name is stored as a base64 encoded string.\n**/\nexport class UserFolders extends TaggingService {\n private identity?: string = undefined;\n \n async getIdentity() : Promise<string> {\n if (this.identity) {\n return this.identity;\n }\n\n if (this.bearerToken) {\n const tokenParts = this.bearerToken.split('.');\n const payload = Buffer.from(tokenParts[1], 'base64').toString();\n const payloadObject = JSON.parse(payload);\n // The identity is the keyword user, the user's authns and the ekeysuserid (user) concatenated with an underscore\n // This value is enforced by the Tagging service and this is the only identity\n // that the Service will accept when invoked with a user specific bearer token.\n return `user_${payloadObject.authns}_${payloadObject.user}`;\n }\n\n throw new Error('The UserFolders service must be invoked with a valid bearer token');\n }\n\n async createFolder(\n {\n folder_name,\n parent_folder_uuid,\n timeout = 3000\n }:\n {\n folder_name: string,\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder> {\n const tag = await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: crypto.randomUUID(),\n tag_name: Buffer.from(folder_name).toString('base64'),\n tag_value: parent_folder_uuid ?? '-',\n },\n timeout\n }\n );\n return {name: folder_name, uuid: tag['resource_name'], parent: parent_folder_uuid} as Folder;\n }\n\n async listFolders(\n {\n parent_folder_uuid,\n timeout = 3000\n }:\n {\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder[]> {\n let tags;\n if (parent_folder_uuid) {\n tags = await this.getTagsByValue(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n tag_value: parent_folder_uuid,\n timeout\n }\n );\n } else {\n tags = await this.getTagsByName(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n }\n\n let folders = [];\n\n for (const tag of tags) {\n folders.push(\n {\n name: Buffer.from(tag['tag_name'], 'base64').toString(),\n uuid: tag['resource_name'],\n parent: tag['tag_value'] === '-' ? undefined : tag['tag_value']\n } as Folder\n );\n }\n\n return folders;\n }\n\n async getFolderContent(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<FolderObject[]> {\n let tags = await this.getTagsByValue(\n {\n identity: await this.getIdentity(),\n tag_value: folder_uuid,\n timeout\n }\n );\n\n let content = [];\n\n for (const tag of tags) {\n if (tag['resource_type'] === 'myaccount_user_folder') {\n content.push(\n {\n type: tag['resource_type'],\n identifier: tag['resource_name'],\n folder_uuid: tag['tag_value']\n } as FolderContent\n );\n } else {\n let folder = {\n name: Buffer.from(tag['tag_name'], 'base64').toString(),\n uuid: tag['resource_name'],\n parent: tag['tag_value']\n } as Folder\n content.push(folder);\n }\n }\n\n return content;\n }\n\n async addInternetbookToFolder(\n {\n folder_uuid,\n isbn,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n isbn: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n return await this.addContentToFolder(\n {\n folder_uuid,\n resource_name: isbn,\n resource_type: 'internetbook',\n timeout\n },\n );\n }\n\n /**\n * This is a generic function for creating folder content elements.\n **/\n async addContentToFolder(\n {\n folder_uuid,\n resource_name,\n resource_type,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n resource_name: string,\n resource_type: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: resource_type,\n resource_name: resource_name,\n tag_name: 'MYACCOUNT_USER_FOLDER',\n tag_value: folder_uuid,\n },\n timeout\n }\n );\n return {type: resource_type, identifier: resource_name, folder_uuid} as FolderContent;\n }\n\n async deleteFolder(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n timeout\n }\n );\n }\n\n async deleteAllFolders(\n {\n timeout = 3000\n }:\n {\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n }\n}\n\nexport default UserFolders;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAM,YAAN,cAAwB,MAAM;AAAA,EACrB;AAAA,EAEP,YAAY,SAAiB,UAAoB;AAC/C,UAAM;AACN,SAAK,UAAU;AACf,SAAK,WAAW;AAAA,EAClB;AACF;AAEO,IAAM,cAAN,MAAkB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEP,YAAY;AAAA,IACV,cAAc;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,aAAa;AAAA,EACf,GAOK;AACH,SAAK,cAAc;AACnB,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,cAAc;AACnB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEU,oBAA4B;AACpC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,eAAuB;AAE5B,QAAI,KAAK,YAAY;AACnB,aAAO,KAAK;AAAA,IACd;AACA,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAAA,EAEA,MAAa,eAAe,gBAA2C;AACrE,QAAI,KAAK,aAAa;AACpB,qBAAe,IAAI,iBAAiB,UAAU,KAAK,WAAW,EAAE;AAAA,IAClE,WAAW,KAAK,QAAQ;AACtB,qBAAe,IAAI,aAAa,KAAK,MAAM;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMiB;AACjB,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,MAAM,QAAQ,SAAS,QAAQ,CAAC;AACnF,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,SACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOiB;AACjB,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,QAAQ,SAAS,QAAQ,CAAC;AAC7E,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMiB;AACjB,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,MAAM,QAAQ,SAAS,QAAQ,CAAC;AACnF,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQmB;AACnB,QAAI,CAAC,SAAS;AACZ,gBAAU,IAAI,QAAQ;AAAA,IACxB;AAEA,cAAU,MAAM,KAAK,eAAe,OAAO;AAC3C,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MACjC;AAAA,MACC;AAAA,MACA;AAAA,MACA,QAAQ,YAAY,QAAQ,OAAO;AAAA,IACrC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AACjB,YAAM,IAAI,UAAU,OAAO,SAAS,MAAM,kBAAkB,SAAS,GAAG,IAAI,QAAQ;AAAA,IACrF;AACA,WAAO;AAAA,EACT;AACF;AACA,IAAO,uBAAQ;;;AC3IR,IAAM,iBAAN,cAA6B,qBAAY;AAAA,EAC9C,oBAA4B;AAC1B,YAAQ,KAAK,aAAa;AAAA,MACxB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO,4BAA4B,KAAK,UAAU;AAAA,MACpD,KAAK;AACH,eAAO,WAAW,KAAK,WAAW,qBAAqB,KAAK,UAAU;AAAA,MACxE;AACE,cAAM,IAAI,MAAM,wBAAwB,KAAK,WAAW,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,eACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAQgB;AAChB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,kBAAkB,SAAS,IAAI,QAAQ,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE;AAE/J,UAAM,UAAuB,IAAI,QAAQ;AACzC,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,cACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAQgB;AAChB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,iBAAiB,QAAQ,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,WAAW,IAAI,QAAQ,KAAK,EAAE;AAElL,UAAM,UAAuB,IAAI,QAAQ;AACzC,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKc;AACd,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC;AAClC,UAAM,UAAuB,IAAI,QAAQ;AAEzC,YAAQ,OAAO,gBAAgB,kBAAkB;AACjD,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,MAAM,KAAK,UAAU,GAAG,GAAG,QAAO,CAAC;AAAA,EAC/E;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAQe;AACf,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,iBAAiB,QAAQ,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,WAAW,IAAI,QAAQ,KAAK,EAAE;AAElL,UAAM,UAAuB,IAAI,QAAQ;AACzC,UAAM,KAAK,YAAY,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EAChD;AACF;AAEA,IAAO,0BAAQ;;;AC1GR,IAAM,eAAN,cAA2B,qBAAY;AAAA,EAC5C,oBAA4B;AAC1B,YAAQ,KAAK,aAAa;AAAA,MACxB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO,0CAA0C,KAAK,UAAU;AAAA,MAClE,KAAK;AACH,eAAO,WAAW,KAAK,WAAW,mCAAmC,KAAK,UAAU;AAAA,MACtF;AACE,cAAM,IAAI,MAAM,wBAAwB,KAAK,WAAW,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKiB;AACjB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,wBAAwB,IAAI;AAC9D,UAAM,UAAuB,IAAI,QAAQ;AAEzC,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAMiB;AACjB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,wBAAwB,IAAI;AAC9D,UAAM,UAAuB,IAAI,QAAQ;AAEzC,YAAQ,IAAI,gBAAgB,kBAAkB;AAC9C,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG,QAAO,CAAC;AAAA,EACpF;AACF;;;AClDA,oBAAmB;AAsBZ,IAAM,cAAN,cAA0B,wBAAe;AAAA,EACtC,WAAoB;AAAA,EAE5B,MAAM,cAAgC;AACpC,QAAI,KAAK,UAAU;AACjB,aAAO,KAAK;AAAA,IACd;AAEA,QAAI,KAAK,aAAa;AACpB,YAAM,aAAa,KAAK,YAAY,MAAM,GAAG;AAC7C,YAAM,UAAU,OAAO,KAAK,WAAW,CAAC,GAAG,QAAQ,EAAE,SAAS;AAC9D,YAAM,gBAAgB,KAAK,MAAM,OAAO;AAIxC,aAAO,QAAQ,cAAc,MAAM,IAAI,cAAc,IAAI;AAAA,IAC3D;AAEA,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AAAA,EAEA,MAAM,aACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAMiB;AACjB,UAAM,MAAM,MAAM,KAAK;AAAA,MACrB;AAAA,QACE,KAAK;AAAA,UACH,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC,eAAe;AAAA,UACf,eAAe,cAAAA,QAAO,WAAW;AAAA,UACjC,UAAU,OAAO,KAAK,WAAW,EAAE,SAAS,QAAQ;AAAA,UACpD,WAAW,sBAAsB;AAAA,QACnC;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,EAAC,MAAM,aAAa,MAAM,IAAI,eAAe,GAAG,QAAQ,mBAAkB;AAAA,EACnF;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKmB;AACnB,QAAI;AACJ,QAAI,oBAAoB;AACtB,aAAO,MAAM,KAAK;AAAA,QAChB;AAAA,UACE,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC,eAAe;AAAA,UACf,WAAW;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO,MAAM,KAAK;AAAA,QAChB;AAAA,UACE,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC,eAAe;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,CAAC;AAEf,eAAW,OAAO,MAAM;AACtB,cAAQ;AAAA,QACN;AAAA,UACE,MAAM,OAAO,KAAK,IAAI,UAAU,GAAG,QAAQ,EAAE,SAAS;AAAA,UACtD,MAAM,IAAI,eAAe;AAAA,UACzB,QAAQ,IAAI,WAAW,MAAM,MAAM,SAAY,IAAI,WAAW;AAAA,QAChE;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,iBACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKyB;AACzB,QAAI,OAAO,MAAM,KAAK;AAAA,MACpB;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,CAAC;AAEf,eAAW,OAAO,MAAM;AACtB,UAAI,IAAI,eAAe,MAAM,yBAAyB;AACpD,gBAAQ;AAAA,UACN;AAAA,YACE,MAAM,IAAI,eAAe;AAAA,YACzB,YAAY,IAAI,eAAe;AAAA,YAC/B,aAAa,IAAI,WAAW;AAAA,UAC9B;AAAA,QACF;AAAA,MACF,OAAO;AACL,YAAI,SAAS;AAAA,UACT,MAAM,OAAO,KAAK,IAAI,UAAU,GAAG,QAAQ,EAAE,SAAS;AAAA,UACtD,MAAM,IAAI,eAAe;AAAA,UACzB,QAAQ,IAAI,WAAW;AAAA,QACzB;AACF,gBAAQ,KAAK,MAAM;AAAA,MACrB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,wBACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAMwB;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,QACE;AAAA,QACA,eAAe;AAAA,QACf,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAOwB;AACxB,UAAM,KAAK;AAAA,MACT;AAAA,QACE,KAAK;AAAA,UACH,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,EAAC,MAAM,eAAe,YAAY,eAAe,YAAW;AAAA,EACrE;AAAA,EAEA,MAAM,aACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,eAAe;AAAA,QACf,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBACJ;AAAA,IACE,UAAU;AAAA,EACZ,GAIe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":["crypto"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
declare class BaseService {
|
|
2
|
+
bearerToken: string | undefined;
|
|
3
|
+
apiKey: string | undefined;
|
|
4
|
+
serviceUrl: string | undefined;
|
|
5
|
+
environment: string;
|
|
6
|
+
myAccountId: string;
|
|
7
|
+
baseDomain: string;
|
|
8
|
+
constructor({ bearerToken, apiKey, serviceUrl, environment, myAccountId, baseDomain, }: {
|
|
9
|
+
bearerToken?: string;
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
serviceUrl?: string;
|
|
12
|
+
environment: string;
|
|
13
|
+
myAccountId: string;
|
|
14
|
+
baseDomain?: string;
|
|
15
|
+
});
|
|
16
|
+
protected discoverUrlPrefix(): string;
|
|
17
|
+
getUrlPrefix(): string;
|
|
18
|
+
addAuthHeaders(requestHeaders: Headers): Promise<Headers>;
|
|
19
|
+
getAsync({ url, headers, timeout }: {
|
|
20
|
+
url: URL | string;
|
|
21
|
+
headers: Headers | undefined | null;
|
|
22
|
+
timeout: number;
|
|
23
|
+
}): Promise<object>;
|
|
24
|
+
putAsync({ url, headers, body, timeout }: {
|
|
25
|
+
url: URL | string;
|
|
26
|
+
headers: Headers | undefined | null;
|
|
27
|
+
body: string | null | undefined;
|
|
28
|
+
timeout: number;
|
|
29
|
+
}): Promise<object>;
|
|
30
|
+
deleteAsync({ url, headers, timeout }: {
|
|
31
|
+
url: URL | string;
|
|
32
|
+
headers: Headers | undefined | null;
|
|
33
|
+
timeout: number;
|
|
34
|
+
}): Promise<object>;
|
|
35
|
+
callAsync({ url, body, method, headers, timeout }: {
|
|
36
|
+
url: URL | string;
|
|
37
|
+
body: string | null | undefined;
|
|
38
|
+
method: string;
|
|
39
|
+
headers: Headers | undefined | null;
|
|
40
|
+
timeout: number;
|
|
41
|
+
}): Promise<Response>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
interface Tag {
|
|
45
|
+
identity: string;
|
|
46
|
+
resource_type: string;
|
|
47
|
+
resource_name: string;
|
|
48
|
+
tag_name: string;
|
|
49
|
+
tag_value: string;
|
|
50
|
+
}
|
|
51
|
+
declare class TaggingService extends BaseService {
|
|
52
|
+
discoverUrlPrefix(): string;
|
|
53
|
+
getTagsByValue({ identity, resource_type, resource_name, tag_value, timeout }: {
|
|
54
|
+
tag_value: string;
|
|
55
|
+
identity: string;
|
|
56
|
+
resource_type?: string;
|
|
57
|
+
resource_name?: string;
|
|
58
|
+
timeout?: number;
|
|
59
|
+
}): Promise<Tag[]>;
|
|
60
|
+
getTagsByName({ identity, resource_type, resource_name, tag_name, timeout }: {
|
|
61
|
+
identity: string;
|
|
62
|
+
resource_type?: string;
|
|
63
|
+
resource_name?: string;
|
|
64
|
+
tag_name?: string;
|
|
65
|
+
timeout?: number;
|
|
66
|
+
}): Promise<Tag[]>;
|
|
67
|
+
createTag({ tag, timeout }: {
|
|
68
|
+
tag: Tag;
|
|
69
|
+
timeout?: number;
|
|
70
|
+
}): Promise<Tag>;
|
|
71
|
+
deleteTag({ identity, resource_type, resource_name, tag_name, timeout }: {
|
|
72
|
+
identity: string;
|
|
73
|
+
resource_type?: string;
|
|
74
|
+
resource_name?: string;
|
|
75
|
+
tag_name?: string;
|
|
76
|
+
timeout?: number;
|
|
77
|
+
}): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
declare class UserSettings extends BaseService {
|
|
81
|
+
discoverUrlPrefix(): string;
|
|
82
|
+
getSettings({ isbn, timeout }: {
|
|
83
|
+
isbn: string;
|
|
84
|
+
timeout?: number;
|
|
85
|
+
}): Promise<object>;
|
|
86
|
+
setSettings({ isbn, settings, timeout }: {
|
|
87
|
+
isbn: string;
|
|
88
|
+
settings: object;
|
|
89
|
+
timeout?: number;
|
|
90
|
+
}): Promise<object>;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
interface FolderObject {
|
|
94
|
+
}
|
|
95
|
+
interface Folder extends FolderObject {
|
|
96
|
+
name: string;
|
|
97
|
+
uuid: string;
|
|
98
|
+
parent?: string;
|
|
99
|
+
}
|
|
100
|
+
interface FolderContent extends FolderObject {
|
|
101
|
+
type: string;
|
|
102
|
+
identifier: string;
|
|
103
|
+
folder_uuid: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* UserFolders is a service that allows users to create folders in their account. It's built on top of the Tagging service.
|
|
107
|
+
* Folders are created with a name and an optional parent folder. If no parent folder is provided, the folder is created at the root level.
|
|
108
|
+
* Folders are created with a unique UUID that can be used to reference the folder in future requests. The folder name is stored as a base64 encoded string.
|
|
109
|
+
**/
|
|
110
|
+
declare class UserFolders extends TaggingService {
|
|
111
|
+
private identity?;
|
|
112
|
+
getIdentity(): Promise<string>;
|
|
113
|
+
createFolder({ folder_name, parent_folder_uuid, timeout }: {
|
|
114
|
+
folder_name: string;
|
|
115
|
+
parent_folder_uuid?: string;
|
|
116
|
+
timeout?: number;
|
|
117
|
+
}): Promise<Folder>;
|
|
118
|
+
listFolders({ parent_folder_uuid, timeout }: {
|
|
119
|
+
parent_folder_uuid?: string;
|
|
120
|
+
timeout?: number;
|
|
121
|
+
}): Promise<Folder[]>;
|
|
122
|
+
getFolderContent({ folder_uuid, timeout }: {
|
|
123
|
+
folder_uuid: string;
|
|
124
|
+
timeout?: number;
|
|
125
|
+
}): Promise<FolderObject[]>;
|
|
126
|
+
addInternetbookToFolder({ folder_uuid, isbn, timeout }: {
|
|
127
|
+
folder_uuid: string;
|
|
128
|
+
isbn: string;
|
|
129
|
+
timeout?: number;
|
|
130
|
+
}): Promise<FolderContent>;
|
|
131
|
+
/**
|
|
132
|
+
* This is a generic function for creating folder content elements.
|
|
133
|
+
**/
|
|
134
|
+
addContentToFolder({ folder_uuid, resource_name, resource_type, timeout }: {
|
|
135
|
+
folder_uuid: string;
|
|
136
|
+
resource_name: string;
|
|
137
|
+
resource_type: string;
|
|
138
|
+
timeout?: number;
|
|
139
|
+
}): Promise<FolderContent>;
|
|
140
|
+
deleteFolder({ folder_uuid, timeout }: {
|
|
141
|
+
folder_uuid: string;
|
|
142
|
+
timeout?: number;
|
|
143
|
+
}): Promise<void>;
|
|
144
|
+
deleteAllFolders({ timeout }: {
|
|
145
|
+
timeout?: number;
|
|
146
|
+
}): Promise<void>;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export { TaggingService, UserFolders, UserSettings };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
declare class BaseService {
|
|
2
|
+
bearerToken: string | undefined;
|
|
3
|
+
apiKey: string | undefined;
|
|
4
|
+
serviceUrl: string | undefined;
|
|
5
|
+
environment: string;
|
|
6
|
+
myAccountId: string;
|
|
7
|
+
baseDomain: string;
|
|
8
|
+
constructor({ bearerToken, apiKey, serviceUrl, environment, myAccountId, baseDomain, }: {
|
|
9
|
+
bearerToken?: string;
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
serviceUrl?: string;
|
|
12
|
+
environment: string;
|
|
13
|
+
myAccountId: string;
|
|
14
|
+
baseDomain?: string;
|
|
15
|
+
});
|
|
16
|
+
protected discoverUrlPrefix(): string;
|
|
17
|
+
getUrlPrefix(): string;
|
|
18
|
+
addAuthHeaders(requestHeaders: Headers): Promise<Headers>;
|
|
19
|
+
getAsync({ url, headers, timeout }: {
|
|
20
|
+
url: URL | string;
|
|
21
|
+
headers: Headers | undefined | null;
|
|
22
|
+
timeout: number;
|
|
23
|
+
}): Promise<object>;
|
|
24
|
+
putAsync({ url, headers, body, timeout }: {
|
|
25
|
+
url: URL | string;
|
|
26
|
+
headers: Headers | undefined | null;
|
|
27
|
+
body: string | null | undefined;
|
|
28
|
+
timeout: number;
|
|
29
|
+
}): Promise<object>;
|
|
30
|
+
deleteAsync({ url, headers, timeout }: {
|
|
31
|
+
url: URL | string;
|
|
32
|
+
headers: Headers | undefined | null;
|
|
33
|
+
timeout: number;
|
|
34
|
+
}): Promise<object>;
|
|
35
|
+
callAsync({ url, body, method, headers, timeout }: {
|
|
36
|
+
url: URL | string;
|
|
37
|
+
body: string | null | undefined;
|
|
38
|
+
method: string;
|
|
39
|
+
headers: Headers | undefined | null;
|
|
40
|
+
timeout: number;
|
|
41
|
+
}): Promise<Response>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
interface Tag {
|
|
45
|
+
identity: string;
|
|
46
|
+
resource_type: string;
|
|
47
|
+
resource_name: string;
|
|
48
|
+
tag_name: string;
|
|
49
|
+
tag_value: string;
|
|
50
|
+
}
|
|
51
|
+
declare class TaggingService extends BaseService {
|
|
52
|
+
discoverUrlPrefix(): string;
|
|
53
|
+
getTagsByValue({ identity, resource_type, resource_name, tag_value, timeout }: {
|
|
54
|
+
tag_value: string;
|
|
55
|
+
identity: string;
|
|
56
|
+
resource_type?: string;
|
|
57
|
+
resource_name?: string;
|
|
58
|
+
timeout?: number;
|
|
59
|
+
}): Promise<Tag[]>;
|
|
60
|
+
getTagsByName({ identity, resource_type, resource_name, tag_name, timeout }: {
|
|
61
|
+
identity: string;
|
|
62
|
+
resource_type?: string;
|
|
63
|
+
resource_name?: string;
|
|
64
|
+
tag_name?: string;
|
|
65
|
+
timeout?: number;
|
|
66
|
+
}): Promise<Tag[]>;
|
|
67
|
+
createTag({ tag, timeout }: {
|
|
68
|
+
tag: Tag;
|
|
69
|
+
timeout?: number;
|
|
70
|
+
}): Promise<Tag>;
|
|
71
|
+
deleteTag({ identity, resource_type, resource_name, tag_name, timeout }: {
|
|
72
|
+
identity: string;
|
|
73
|
+
resource_type?: string;
|
|
74
|
+
resource_name?: string;
|
|
75
|
+
tag_name?: string;
|
|
76
|
+
timeout?: number;
|
|
77
|
+
}): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
declare class UserSettings extends BaseService {
|
|
81
|
+
discoverUrlPrefix(): string;
|
|
82
|
+
getSettings({ isbn, timeout }: {
|
|
83
|
+
isbn: string;
|
|
84
|
+
timeout?: number;
|
|
85
|
+
}): Promise<object>;
|
|
86
|
+
setSettings({ isbn, settings, timeout }: {
|
|
87
|
+
isbn: string;
|
|
88
|
+
settings: object;
|
|
89
|
+
timeout?: number;
|
|
90
|
+
}): Promise<object>;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
interface FolderObject {
|
|
94
|
+
}
|
|
95
|
+
interface Folder extends FolderObject {
|
|
96
|
+
name: string;
|
|
97
|
+
uuid: string;
|
|
98
|
+
parent?: string;
|
|
99
|
+
}
|
|
100
|
+
interface FolderContent extends FolderObject {
|
|
101
|
+
type: string;
|
|
102
|
+
identifier: string;
|
|
103
|
+
folder_uuid: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* UserFolders is a service that allows users to create folders in their account. It's built on top of the Tagging service.
|
|
107
|
+
* Folders are created with a name and an optional parent folder. If no parent folder is provided, the folder is created at the root level.
|
|
108
|
+
* Folders are created with a unique UUID that can be used to reference the folder in future requests. The folder name is stored as a base64 encoded string.
|
|
109
|
+
**/
|
|
110
|
+
declare class UserFolders extends TaggingService {
|
|
111
|
+
private identity?;
|
|
112
|
+
getIdentity(): Promise<string>;
|
|
113
|
+
createFolder({ folder_name, parent_folder_uuid, timeout }: {
|
|
114
|
+
folder_name: string;
|
|
115
|
+
parent_folder_uuid?: string;
|
|
116
|
+
timeout?: number;
|
|
117
|
+
}): Promise<Folder>;
|
|
118
|
+
listFolders({ parent_folder_uuid, timeout }: {
|
|
119
|
+
parent_folder_uuid?: string;
|
|
120
|
+
timeout?: number;
|
|
121
|
+
}): Promise<Folder[]>;
|
|
122
|
+
getFolderContent({ folder_uuid, timeout }: {
|
|
123
|
+
folder_uuid: string;
|
|
124
|
+
timeout?: number;
|
|
125
|
+
}): Promise<FolderObject[]>;
|
|
126
|
+
addInternetbookToFolder({ folder_uuid, isbn, timeout }: {
|
|
127
|
+
folder_uuid: string;
|
|
128
|
+
isbn: string;
|
|
129
|
+
timeout?: number;
|
|
130
|
+
}): Promise<FolderContent>;
|
|
131
|
+
/**
|
|
132
|
+
* This is a generic function for creating folder content elements.
|
|
133
|
+
**/
|
|
134
|
+
addContentToFolder({ folder_uuid, resource_name, resource_type, timeout }: {
|
|
135
|
+
folder_uuid: string;
|
|
136
|
+
resource_name: string;
|
|
137
|
+
resource_type: string;
|
|
138
|
+
timeout?: number;
|
|
139
|
+
}): Promise<FolderContent>;
|
|
140
|
+
deleteFolder({ folder_uuid, timeout }: {
|
|
141
|
+
folder_uuid: string;
|
|
142
|
+
timeout?: number;
|
|
143
|
+
}): Promise<void>;
|
|
144
|
+
deleteAllFolders({ timeout }: {
|
|
145
|
+
timeout?: number;
|
|
146
|
+
}): Promise<void>;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export { TaggingService, UserFolders, UserSettings };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
// src/services/base_service.ts
|
|
2
|
+
var HTTPError = class extends Error {
|
|
3
|
+
response;
|
|
4
|
+
constructor(message, response) {
|
|
5
|
+
super();
|
|
6
|
+
this.message = message;
|
|
7
|
+
this.response = response;
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var BaseService = class {
|
|
11
|
+
bearerToken;
|
|
12
|
+
apiKey;
|
|
13
|
+
serviceUrl;
|
|
14
|
+
environment;
|
|
15
|
+
myAccountId;
|
|
16
|
+
baseDomain;
|
|
17
|
+
constructor({
|
|
18
|
+
bearerToken = void 0,
|
|
19
|
+
apiKey = void 0,
|
|
20
|
+
serviceUrl = void 0,
|
|
21
|
+
environment = "production",
|
|
22
|
+
myAccountId = "SYSTIMEMYACCOUNT",
|
|
23
|
+
baseDomain = "systime.dk"
|
|
24
|
+
}) {
|
|
25
|
+
this.bearerToken = bearerToken;
|
|
26
|
+
this.apiKey = apiKey;
|
|
27
|
+
this.serviceUrl = serviceUrl;
|
|
28
|
+
this.environment = environment;
|
|
29
|
+
this.myAccountId = myAccountId;
|
|
30
|
+
this.baseDomain = baseDomain;
|
|
31
|
+
}
|
|
32
|
+
discoverUrlPrefix() {
|
|
33
|
+
throw new Error("Method not implemented.");
|
|
34
|
+
}
|
|
35
|
+
getUrlPrefix() {
|
|
36
|
+
if (this.serviceUrl) {
|
|
37
|
+
return this.serviceUrl;
|
|
38
|
+
}
|
|
39
|
+
return this.discoverUrlPrefix();
|
|
40
|
+
}
|
|
41
|
+
async addAuthHeaders(requestHeaders) {
|
|
42
|
+
if (this.bearerToken) {
|
|
43
|
+
requestHeaders.set("Authorization", `Bearer ${this.bearerToken}`);
|
|
44
|
+
} else if (this.apiKey) {
|
|
45
|
+
requestHeaders.set("x-api-key", this.apiKey);
|
|
46
|
+
}
|
|
47
|
+
return requestHeaders;
|
|
48
|
+
}
|
|
49
|
+
async getAsync({
|
|
50
|
+
url,
|
|
51
|
+
headers,
|
|
52
|
+
timeout
|
|
53
|
+
}) {
|
|
54
|
+
const method = "GET";
|
|
55
|
+
const response = await this.callAsync({ url, body: null, method, headers, timeout });
|
|
56
|
+
return response.json();
|
|
57
|
+
}
|
|
58
|
+
async putAsync({
|
|
59
|
+
url,
|
|
60
|
+
headers,
|
|
61
|
+
body,
|
|
62
|
+
timeout
|
|
63
|
+
}) {
|
|
64
|
+
const method = "PUT";
|
|
65
|
+
const response = await this.callAsync({ url, body, method, headers, timeout });
|
|
66
|
+
return response.json();
|
|
67
|
+
}
|
|
68
|
+
async deleteAsync({
|
|
69
|
+
url,
|
|
70
|
+
headers,
|
|
71
|
+
timeout
|
|
72
|
+
}) {
|
|
73
|
+
const method = "DELETE";
|
|
74
|
+
const response = await this.callAsync({ url, body: null, method, headers, timeout });
|
|
75
|
+
return response.json();
|
|
76
|
+
}
|
|
77
|
+
async callAsync({
|
|
78
|
+
url,
|
|
79
|
+
body,
|
|
80
|
+
method,
|
|
81
|
+
headers,
|
|
82
|
+
timeout
|
|
83
|
+
}) {
|
|
84
|
+
if (!headers) {
|
|
85
|
+
headers = new Headers();
|
|
86
|
+
}
|
|
87
|
+
headers = await this.addAuthHeaders(headers);
|
|
88
|
+
const response = await fetch(url, {
|
|
89
|
+
method,
|
|
90
|
+
body,
|
|
91
|
+
headers,
|
|
92
|
+
signal: AbortSignal.timeout(timeout)
|
|
93
|
+
});
|
|
94
|
+
if (!response.ok) {
|
|
95
|
+
throw new HTTPError(`Got ${response.status} while calling ${response.url}`, response);
|
|
96
|
+
}
|
|
97
|
+
return response;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
var base_service_default = BaseService;
|
|
101
|
+
|
|
102
|
+
// src/services/tagging_service.ts
|
|
103
|
+
var TaggingService = class extends base_service_default {
|
|
104
|
+
discoverUrlPrefix() {
|
|
105
|
+
switch (this.environment) {
|
|
106
|
+
case "local":
|
|
107
|
+
return "http://localhost:4000";
|
|
108
|
+
case "production":
|
|
109
|
+
return `https://tagging.services.${this.baseDomain}`;
|
|
110
|
+
case "staging":
|
|
111
|
+
return `https://${this.environment}-tagging.services.${this.baseDomain}`;
|
|
112
|
+
default:
|
|
113
|
+
throw new Error(`Unknown environment: ${this.environment}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async getTagsByValue({
|
|
117
|
+
identity,
|
|
118
|
+
resource_type,
|
|
119
|
+
resource_name,
|
|
120
|
+
tag_value,
|
|
121
|
+
timeout = 3e3
|
|
122
|
+
}) {
|
|
123
|
+
const url = `${this.getUrlPrefix()}/tags/by_value/${tag_value}/${identity}${resource_type ? `/${resource_type}` : ""}${resource_name ? `/${resource_name}` : ""}`;
|
|
124
|
+
const headers = new Headers();
|
|
125
|
+
return await this.getAsync({ url, headers, timeout });
|
|
126
|
+
}
|
|
127
|
+
async getTagsByName({
|
|
128
|
+
identity,
|
|
129
|
+
resource_type,
|
|
130
|
+
resource_name,
|
|
131
|
+
tag_name,
|
|
132
|
+
timeout = 3e3
|
|
133
|
+
}) {
|
|
134
|
+
const url = `${this.getUrlPrefix()}/tags/by_name/${identity}${resource_type ? `/${resource_type}` : ""}${resource_name ? `/${resource_name}` : ""}${tag_name ? `/${tag_name}` : ""}`;
|
|
135
|
+
const headers = new Headers();
|
|
136
|
+
return await this.getAsync({ url, headers, timeout });
|
|
137
|
+
}
|
|
138
|
+
async createTag({
|
|
139
|
+
tag,
|
|
140
|
+
timeout = 3e3
|
|
141
|
+
}) {
|
|
142
|
+
const url = `${this.getUrlPrefix()}/tags`;
|
|
143
|
+
const headers = new Headers();
|
|
144
|
+
headers.append("Content-Type", "application/json");
|
|
145
|
+
return await this.putAsync({ url, headers, body: JSON.stringify(tag), timeout });
|
|
146
|
+
}
|
|
147
|
+
async deleteTag({
|
|
148
|
+
identity,
|
|
149
|
+
resource_type,
|
|
150
|
+
resource_name,
|
|
151
|
+
tag_name,
|
|
152
|
+
timeout = 3e3
|
|
153
|
+
}) {
|
|
154
|
+
const url = `${this.getUrlPrefix()}/tags/by_name/${identity}${resource_type ? `/${resource_type}` : ""}${resource_name ? `/${resource_name}` : ""}${tag_name ? `/${tag_name}` : ""}`;
|
|
155
|
+
const headers = new Headers();
|
|
156
|
+
await this.deleteAsync({ url, headers, timeout });
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
var tagging_service_default = TaggingService;
|
|
160
|
+
|
|
161
|
+
// src/services/user_settings.ts
|
|
162
|
+
var UserSettings = class extends base_service_default {
|
|
163
|
+
discoverUrlPrefix() {
|
|
164
|
+
switch (this.environment) {
|
|
165
|
+
case "local":
|
|
166
|
+
return "http://localhost:4000";
|
|
167
|
+
case "production":
|
|
168
|
+
return `https://user-settings-service.services.${this.baseDomain}`;
|
|
169
|
+
case "staging":
|
|
170
|
+
return `https://${this.environment}-user-settings-service.services.${this.baseDomain}`;
|
|
171
|
+
default:
|
|
172
|
+
throw new Error(`Unknown environment: ${this.environment}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async getSettings({
|
|
176
|
+
isbn,
|
|
177
|
+
timeout = 5e3
|
|
178
|
+
}) {
|
|
179
|
+
const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;
|
|
180
|
+
const headers = new Headers();
|
|
181
|
+
return await this.getAsync({ url, headers, timeout });
|
|
182
|
+
}
|
|
183
|
+
async setSettings({
|
|
184
|
+
isbn,
|
|
185
|
+
settings,
|
|
186
|
+
timeout = 5e3
|
|
187
|
+
}) {
|
|
188
|
+
const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;
|
|
189
|
+
const headers = new Headers();
|
|
190
|
+
headers.set("Content-Type", "application/json");
|
|
191
|
+
return await this.putAsync({ url, headers, body: JSON.stringify(settings), timeout });
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
// src/services/highlevel/tagging/user_folders.ts
|
|
196
|
+
import crypto from "crypto";
|
|
197
|
+
var UserFolders = class extends tagging_service_default {
|
|
198
|
+
identity = void 0;
|
|
199
|
+
async getIdentity() {
|
|
200
|
+
if (this.identity) {
|
|
201
|
+
return this.identity;
|
|
202
|
+
}
|
|
203
|
+
if (this.bearerToken) {
|
|
204
|
+
const tokenParts = this.bearerToken.split(".");
|
|
205
|
+
const payload = Buffer.from(tokenParts[1], "base64").toString();
|
|
206
|
+
const payloadObject = JSON.parse(payload);
|
|
207
|
+
return `user_${payloadObject.authns}_${payloadObject.user}`;
|
|
208
|
+
}
|
|
209
|
+
throw new Error("The UserFolders service must be invoked with a valid bearer token");
|
|
210
|
+
}
|
|
211
|
+
async createFolder({
|
|
212
|
+
folder_name,
|
|
213
|
+
parent_folder_uuid,
|
|
214
|
+
timeout = 3e3
|
|
215
|
+
}) {
|
|
216
|
+
const tag = await this.createTag(
|
|
217
|
+
{
|
|
218
|
+
tag: {
|
|
219
|
+
identity: await this.getIdentity(),
|
|
220
|
+
resource_type: "myaccount_user_folder",
|
|
221
|
+
resource_name: crypto.randomUUID(),
|
|
222
|
+
tag_name: Buffer.from(folder_name).toString("base64"),
|
|
223
|
+
tag_value: parent_folder_uuid ?? "-"
|
|
224
|
+
},
|
|
225
|
+
timeout
|
|
226
|
+
}
|
|
227
|
+
);
|
|
228
|
+
return { name: folder_name, uuid: tag["resource_name"], parent: parent_folder_uuid };
|
|
229
|
+
}
|
|
230
|
+
async listFolders({
|
|
231
|
+
parent_folder_uuid,
|
|
232
|
+
timeout = 3e3
|
|
233
|
+
}) {
|
|
234
|
+
let tags;
|
|
235
|
+
if (parent_folder_uuid) {
|
|
236
|
+
tags = await this.getTagsByValue(
|
|
237
|
+
{
|
|
238
|
+
identity: await this.getIdentity(),
|
|
239
|
+
resource_type: "myaccount_user_folder",
|
|
240
|
+
tag_value: parent_folder_uuid,
|
|
241
|
+
timeout
|
|
242
|
+
}
|
|
243
|
+
);
|
|
244
|
+
} else {
|
|
245
|
+
tags = await this.getTagsByName(
|
|
246
|
+
{
|
|
247
|
+
identity: await this.getIdentity(),
|
|
248
|
+
resource_type: "myaccount_user_folder",
|
|
249
|
+
timeout
|
|
250
|
+
}
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
let folders = [];
|
|
254
|
+
for (const tag of tags) {
|
|
255
|
+
folders.push(
|
|
256
|
+
{
|
|
257
|
+
name: Buffer.from(tag["tag_name"], "base64").toString(),
|
|
258
|
+
uuid: tag["resource_name"],
|
|
259
|
+
parent: tag["tag_value"] === "-" ? void 0 : tag["tag_value"]
|
|
260
|
+
}
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
return folders;
|
|
264
|
+
}
|
|
265
|
+
async getFolderContent({
|
|
266
|
+
folder_uuid,
|
|
267
|
+
timeout = 3e3
|
|
268
|
+
}) {
|
|
269
|
+
let tags = await this.getTagsByValue(
|
|
270
|
+
{
|
|
271
|
+
identity: await this.getIdentity(),
|
|
272
|
+
tag_value: folder_uuid,
|
|
273
|
+
timeout
|
|
274
|
+
}
|
|
275
|
+
);
|
|
276
|
+
let content = [];
|
|
277
|
+
for (const tag of tags) {
|
|
278
|
+
if (tag["resource_type"] === "myaccount_user_folder") {
|
|
279
|
+
content.push(
|
|
280
|
+
{
|
|
281
|
+
type: tag["resource_type"],
|
|
282
|
+
identifier: tag["resource_name"],
|
|
283
|
+
folder_uuid: tag["tag_value"]
|
|
284
|
+
}
|
|
285
|
+
);
|
|
286
|
+
} else {
|
|
287
|
+
let folder = {
|
|
288
|
+
name: Buffer.from(tag["tag_name"], "base64").toString(),
|
|
289
|
+
uuid: tag["resource_name"],
|
|
290
|
+
parent: tag["tag_value"]
|
|
291
|
+
};
|
|
292
|
+
content.push(folder);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return content;
|
|
296
|
+
}
|
|
297
|
+
async addInternetbookToFolder({
|
|
298
|
+
folder_uuid,
|
|
299
|
+
isbn,
|
|
300
|
+
timeout = 3e3
|
|
301
|
+
}) {
|
|
302
|
+
return await this.addContentToFolder(
|
|
303
|
+
{
|
|
304
|
+
folder_uuid,
|
|
305
|
+
resource_name: isbn,
|
|
306
|
+
resource_type: "internetbook",
|
|
307
|
+
timeout
|
|
308
|
+
}
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* This is a generic function for creating folder content elements.
|
|
313
|
+
**/
|
|
314
|
+
async addContentToFolder({
|
|
315
|
+
folder_uuid,
|
|
316
|
+
resource_name,
|
|
317
|
+
resource_type,
|
|
318
|
+
timeout = 3e3
|
|
319
|
+
}) {
|
|
320
|
+
await this.createTag(
|
|
321
|
+
{
|
|
322
|
+
tag: {
|
|
323
|
+
identity: await this.getIdentity(),
|
|
324
|
+
resource_type,
|
|
325
|
+
resource_name,
|
|
326
|
+
tag_name: "MYACCOUNT_USER_FOLDER",
|
|
327
|
+
tag_value: folder_uuid
|
|
328
|
+
},
|
|
329
|
+
timeout
|
|
330
|
+
}
|
|
331
|
+
);
|
|
332
|
+
return { type: resource_type, identifier: resource_name, folder_uuid };
|
|
333
|
+
}
|
|
334
|
+
async deleteFolder({
|
|
335
|
+
folder_uuid,
|
|
336
|
+
timeout = 3e3
|
|
337
|
+
}) {
|
|
338
|
+
await this.deleteTag(
|
|
339
|
+
{
|
|
340
|
+
identity: await this.getIdentity(),
|
|
341
|
+
resource_type: "myaccount_user_folder",
|
|
342
|
+
resource_name: folder_uuid,
|
|
343
|
+
timeout
|
|
344
|
+
}
|
|
345
|
+
);
|
|
346
|
+
}
|
|
347
|
+
async deleteAllFolders({
|
|
348
|
+
timeout = 3e3
|
|
349
|
+
}) {
|
|
350
|
+
await this.deleteTag(
|
|
351
|
+
{
|
|
352
|
+
identity: await this.getIdentity(),
|
|
353
|
+
resource_type: "myaccount_user_folder",
|
|
354
|
+
timeout
|
|
355
|
+
}
|
|
356
|
+
);
|
|
357
|
+
}
|
|
358
|
+
};
|
|
359
|
+
export {
|
|
360
|
+
TaggingService,
|
|
361
|
+
UserFolders,
|
|
362
|
+
UserSettings
|
|
363
|
+
};
|
|
364
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/base_service.ts","../src/services/tagging_service.ts","../src/services/user_settings.ts","../src/services/highlevel/tagging/user_folders.ts"],"sourcesContent":["class HTTPError extends Error {\n public response: Response;\n \n constructor(message: string, response: Response) {\n super();\n this.message = message;\n this.response = response;\n }\n}\n\nexport class BaseService {\n public bearerToken: string | undefined;\n public apiKey: string | undefined;\n public serviceUrl: string | undefined;\n public environment: string;\n public myAccountId: string;\n public baseDomain: string;\n\n constructor({\n bearerToken = undefined,\n apiKey = undefined,\n serviceUrl = undefined,\n environment = 'production',\n myAccountId = 'SYSTIMEMYACCOUNT',\n baseDomain = 'systime.dk',\n } : {\n bearerToken?: string,\n apiKey?: string,\n serviceUrl?: string,\n environment: string,\n myAccountId: string,\n baseDomain?: string\n }) {\n this.bearerToken = bearerToken;\n this.apiKey = apiKey;\n this.serviceUrl = serviceUrl;\n this.environment = environment;\n this.myAccountId = myAccountId;\n this.baseDomain = baseDomain;\n }\n\n protected discoverUrlPrefix(): string {\n throw new Error('Method not implemented.');\n }\n\n public getUrlPrefix(): string {\n // If the URL has been explicitly set, return it.\n if (this.serviceUrl) {\n return this.serviceUrl;\n }\n return this.discoverUrlPrefix()\n }\n\n public async addAuthHeaders(requestHeaders: Headers): Promise<Headers> {\n if (this.bearerToken) {\n requestHeaders.set('Authorization', `Bearer ${this.bearerToken}`);\n } else if (this.apiKey) {\n requestHeaders.set('x-api-key', this.apiKey);\n }\n return requestHeaders;\n }\n\n async getAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'GET';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n return response.json();\n }\n\n async putAsync(\n {\n url,\n headers,\n body,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n body: string | null | undefined,\n timeout: number\n }\n ): Promise<object> {\n const method = 'PUT';\n const response = await this.callAsync({ url, body, method, headers, timeout });\n return response.json();\n }\n\n async deleteAsync(\n {\n url,\n headers,\n timeout\n }:\n {\n url: URL | string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<object> {\n const method = 'DELETE';\n const response = await this.callAsync({ url, body: null, method, headers, timeout });\n return response.json();\n }\n\n async callAsync(\n {\n url,\n body,\n method,\n headers,\n timeout\n }:\n {\n url: URL | string,\n body: string | null | undefined,\n method: string,\n headers: Headers | undefined | null,\n timeout: number\n }\n ): Promise<Response> {\n if (!headers) {\n headers = new Headers();\n }\n\n headers = await this.addAuthHeaders(headers);\n const response = await fetch(url, {\n\t method: method,\n body: body,\n headers: headers,\n signal: AbortSignal.timeout(timeout)\n });\n\n if (!response.ok) {\n\t\t\t\t\tthrow new HTTPError(`Got ${response.status} while calling ${response.url}`, response);\n }\n return response;\n }\n}\nexport default BaseService;\n","import BaseService from './base_service.js';\n\ninterface Tag {\n identity: string;\n resource_type: string;\n resource_name: string;\n tag_name: string;\n tag_value: string;\n}\n\nexport class TaggingService extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'local':\n return 'http://localhost:4000';\n case 'production':\n return `https://tagging.services.${this.baseDomain}`;\n case 'staging':\n return `https://${this.environment}-tagging.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n };\n\n async getTagsByValue(\n {\n identity,\n resource_type,\n resource_name,\n tag_value,\n timeout = 3000\n }:\n {\n tag_value: string,\n identity: string,\n resource_type?: string,\n resource_name?: string,\n timeout?: number\n }\n ): Promise<Tag[]> {\n const url = `${this.getUrlPrefix()}/tags/by_value/${tag_value}/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as Tag[];\n }\n\n async getTagsByName(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n resource_type?: string,\n resource_name?: string,\n tag_name?: string,\n timeout?: number\n }\n ): Promise<Tag[]> {\n const url = `${this.getUrlPrefix()}/tags/by_name/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n return await this.getAsync({url, headers, timeout}) as Tag[];\n }\n\n async createTag(\n {\n tag,\n timeout = 3000\n }:\n {\n tag: Tag,\n timeout?: number\n }\n ): Promise<Tag> {\n const url = `${this.getUrlPrefix()}/tags`;\n const headers: HeadersInit = new Headers();\n\n headers.append('Content-Type', \"application/json\");\n return await this.putAsync({url, headers, body: JSON.stringify(tag), timeout}) as Tag;\n }\n\n async deleteTag(\n {\n identity,\n resource_type,\n resource_name,\n tag_name,\n timeout = 3000\n }:\n {\n identity: string,\n resource_type?: string,\n resource_name?: string,\n tag_name?: string,\n timeout?: number\n }\n ): Promise<void> {\n const url = `${this.getUrlPrefix()}/tags/by_name/${identity}${resource_type ? `/${resource_type}` : ''}${resource_name ? `/${resource_name}` : ''}${tag_name ? `/${tag_name}` : ''}`;\n\n const headers: HeadersInit = new Headers();\n await this.deleteAsync({url, headers, timeout});\n }\n}\n\nexport default TaggingService;\n","import BaseService from './base_service.js';\n\nexport class UserSettings extends BaseService {\n discoverUrlPrefix(): string {\n switch (this.environment) {\n case 'local':\n return 'http://localhost:4000';\n case 'production':\n return `https://user-settings-service.services.${this.baseDomain}`;\n case 'staging':\n return `https://${this.environment}-user-settings-service.services.${this.baseDomain}`;\n default:\n throw new Error(`Unknown environment: ${this.environment}`);\n }\n }\n\n async getSettings(\n {\n isbn,\n timeout = 5000\n }:\n {\n isbn: string,\n timeout?: number\n }\n ): Promise<object> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n return await this.getAsync({url, headers, timeout});\n }\n\n async setSettings(\n {\n isbn,\n settings,\n timeout = 5000\n }: \n {\n isbn: string,\n settings: object,\n timeout?: number\n }\n ): Promise<object> {\n const url = `${this.getUrlPrefix()}/clientsettings/isbn/${isbn}`;\n const headers: HeadersInit = new Headers();\n\n headers.set('Content-Type', 'application/json');\n return await this.putAsync({url, headers, body: JSON.stringify(settings), timeout});\n }\n}\n\nexport default UserSettings;\n","import crypto from 'crypto';\nimport TaggingService from '../../tagging_service.js';\n\ninterface FolderObject {}\n\ninterface Folder extends FolderObject {\n name: string;\n uuid: string;\n parent?: string;\n}\n\ninterface FolderContent extends FolderObject {\n type: string;\n identifier: string;\n folder_uuid: string;\n}\n\n/**\n * UserFolders is a service that allows users to create folders in their account. It's built on top of the Tagging service.\n * Folders are created with a name and an optional parent folder. If no parent folder is provided, the folder is created at the root level.\n * Folders are created with a unique UUID that can be used to reference the folder in future requests. The folder name is stored as a base64 encoded string.\n**/\nexport class UserFolders extends TaggingService {\n private identity?: string = undefined;\n \n async getIdentity() : Promise<string> {\n if (this.identity) {\n return this.identity;\n }\n\n if (this.bearerToken) {\n const tokenParts = this.bearerToken.split('.');\n const payload = Buffer.from(tokenParts[1], 'base64').toString();\n const payloadObject = JSON.parse(payload);\n // The identity is the keyword user, the user's authns and the ekeysuserid (user) concatenated with an underscore\n // This value is enforced by the Tagging service and this is the only identity\n // that the Service will accept when invoked with a user specific bearer token.\n return `user_${payloadObject.authns}_${payloadObject.user}`;\n }\n\n throw new Error('The UserFolders service must be invoked with a valid bearer token');\n }\n\n async createFolder(\n {\n folder_name,\n parent_folder_uuid,\n timeout = 3000\n }:\n {\n folder_name: string,\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder> {\n const tag = await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: crypto.randomUUID(),\n tag_name: Buffer.from(folder_name).toString('base64'),\n tag_value: parent_folder_uuid ?? '-',\n },\n timeout\n }\n );\n return {name: folder_name, uuid: tag['resource_name'], parent: parent_folder_uuid} as Folder;\n }\n\n async listFolders(\n {\n parent_folder_uuid,\n timeout = 3000\n }:\n {\n parent_folder_uuid?: string,\n timeout?: number\n }\n ): Promise<Folder[]> {\n let tags;\n if (parent_folder_uuid) {\n tags = await this.getTagsByValue(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n tag_value: parent_folder_uuid,\n timeout\n }\n );\n } else {\n tags = await this.getTagsByName(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n }\n\n let folders = [];\n\n for (const tag of tags) {\n folders.push(\n {\n name: Buffer.from(tag['tag_name'], 'base64').toString(),\n uuid: tag['resource_name'],\n parent: tag['tag_value'] === '-' ? undefined : tag['tag_value']\n } as Folder\n );\n }\n\n return folders;\n }\n\n async getFolderContent(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<FolderObject[]> {\n let tags = await this.getTagsByValue(\n {\n identity: await this.getIdentity(),\n tag_value: folder_uuid,\n timeout\n }\n );\n\n let content = [];\n\n for (const tag of tags) {\n if (tag['resource_type'] === 'myaccount_user_folder') {\n content.push(\n {\n type: tag['resource_type'],\n identifier: tag['resource_name'],\n folder_uuid: tag['tag_value']\n } as FolderContent\n );\n } else {\n let folder = {\n name: Buffer.from(tag['tag_name'], 'base64').toString(),\n uuid: tag['resource_name'],\n parent: tag['tag_value']\n } as Folder\n content.push(folder);\n }\n }\n\n return content;\n }\n\n async addInternetbookToFolder(\n {\n folder_uuid,\n isbn,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n isbn: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n return await this.addContentToFolder(\n {\n folder_uuid,\n resource_name: isbn,\n resource_type: 'internetbook',\n timeout\n },\n );\n }\n\n /**\n * This is a generic function for creating folder content elements.\n **/\n async addContentToFolder(\n {\n folder_uuid,\n resource_name,\n resource_type,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n resource_name: string,\n resource_type: string,\n timeout?: number\n }\n ): Promise<FolderContent> {\n await this.createTag(\n {\n tag: {\n identity: await this.getIdentity(),\n resource_type: resource_type,\n resource_name: resource_name,\n tag_name: 'MYACCOUNT_USER_FOLDER',\n tag_value: folder_uuid,\n },\n timeout\n }\n );\n return {type: resource_type, identifier: resource_name, folder_uuid} as FolderContent;\n }\n\n async deleteFolder(\n {\n folder_uuid,\n timeout = 3000\n }:\n {\n folder_uuid: string,\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n resource_name: folder_uuid,\n timeout\n }\n );\n }\n\n async deleteAllFolders(\n {\n timeout = 3000\n }:\n {\n timeout?: number\n }\n ): Promise<void> {\n await this.deleteTag(\n {\n identity: await this.getIdentity(),\n resource_type: 'myaccount_user_folder',\n timeout\n }\n );\n }\n}\n\nexport default UserFolders;\n"],"mappings":";AAAA,IAAM,YAAN,cAAwB,MAAM;AAAA,EACrB;AAAA,EAEP,YAAY,SAAiB,UAAoB;AAC/C,UAAM;AACN,SAAK,UAAU;AACf,SAAK,WAAW;AAAA,EAClB;AACF;AAEO,IAAM,cAAN,MAAkB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEP,YAAY;AAAA,IACV,cAAc;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,aAAa;AAAA,EACf,GAOK;AACH,SAAK,cAAc;AACnB,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,cAAc;AACnB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEU,oBAA4B;AACpC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,eAAuB;AAE5B,QAAI,KAAK,YAAY;AACnB,aAAO,KAAK;AAAA,IACd;AACA,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAAA,EAEA,MAAa,eAAe,gBAA2C;AACrE,QAAI,KAAK,aAAa;AACpB,qBAAe,IAAI,iBAAiB,UAAU,KAAK,WAAW,EAAE;AAAA,IAClE,WAAW,KAAK,QAAQ;AACtB,qBAAe,IAAI,aAAa,KAAK,MAAM;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMiB;AACjB,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,MAAM,QAAQ,SAAS,QAAQ,CAAC;AACnF,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,SACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOiB;AACjB,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,QAAQ,SAAS,QAAQ,CAAC;AAC7E,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMiB;AACjB,UAAM,SAAS;AACf,UAAM,WAAW,MAAM,KAAK,UAAU,EAAE,KAAK,MAAM,MAAM,QAAQ,SAAS,QAAQ,CAAC;AACnF,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQmB;AACnB,QAAI,CAAC,SAAS;AACZ,gBAAU,IAAI,QAAQ;AAAA,IACxB;AAEA,cAAU,MAAM,KAAK,eAAe,OAAO;AAC3C,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MACjC;AAAA,MACC;AAAA,MACA;AAAA,MACA,QAAQ,YAAY,QAAQ,OAAO;AAAA,IACrC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AACjB,YAAM,IAAI,UAAU,OAAO,SAAS,MAAM,kBAAkB,SAAS,GAAG,IAAI,QAAQ;AAAA,IACrF;AACA,WAAO;AAAA,EACT;AACF;AACA,IAAO,uBAAQ;;;AC3IR,IAAM,iBAAN,cAA6B,qBAAY;AAAA,EAC9C,oBAA4B;AAC1B,YAAQ,KAAK,aAAa;AAAA,MACxB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO,4BAA4B,KAAK,UAAU;AAAA,MACpD,KAAK;AACH,eAAO,WAAW,KAAK,WAAW,qBAAqB,KAAK,UAAU;AAAA,MACxE;AACE,cAAM,IAAI,MAAM,wBAAwB,KAAK,WAAW,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,eACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAQgB;AAChB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,kBAAkB,SAAS,IAAI,QAAQ,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE;AAE/J,UAAM,UAAuB,IAAI,QAAQ;AACzC,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,cACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAQgB;AAChB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,iBAAiB,QAAQ,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,WAAW,IAAI,QAAQ,KAAK,EAAE;AAElL,UAAM,UAAuB,IAAI,QAAQ;AACzC,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKc;AACd,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC;AAClC,UAAM,UAAuB,IAAI,QAAQ;AAEzC,YAAQ,OAAO,gBAAgB,kBAAkB;AACjD,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,MAAM,KAAK,UAAU,GAAG,GAAG,QAAO,CAAC;AAAA,EAC/E;AAAA,EAEA,MAAM,UACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAQe;AACf,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,iBAAiB,QAAQ,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,gBAAgB,IAAI,aAAa,KAAK,EAAE,GAAG,WAAW,IAAI,QAAQ,KAAK,EAAE;AAElL,UAAM,UAAuB,IAAI,QAAQ;AACzC,UAAM,KAAK,YAAY,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EAChD;AACF;AAEA,IAAO,0BAAQ;;;AC1GR,IAAM,eAAN,cAA2B,qBAAY;AAAA,EAC5C,oBAA4B;AAC1B,YAAQ,KAAK,aAAa;AAAA,MACxB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO,0CAA0C,KAAK,UAAU;AAAA,MAClE,KAAK;AACH,eAAO,WAAW,KAAK,WAAW,mCAAmC,KAAK,UAAU;AAAA,MACtF;AACE,cAAM,IAAI,MAAM,wBAAwB,KAAK,WAAW,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKiB;AACjB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,wBAAwB,IAAI;AAC9D,UAAM,UAAuB,IAAI,QAAQ;AAEzC,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,QAAO,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAMiB;AACjB,UAAM,MAAM,GAAG,KAAK,aAAa,CAAC,wBAAwB,IAAI;AAC9D,UAAM,UAAuB,IAAI,QAAQ;AAEzC,YAAQ,IAAI,gBAAgB,kBAAkB;AAC9C,WAAO,MAAM,KAAK,SAAS,EAAC,KAAK,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG,QAAO,CAAC;AAAA,EACpF;AACF;;;AClDA,OAAO,YAAY;AAsBZ,IAAM,cAAN,cAA0B,wBAAe;AAAA,EACtC,WAAoB;AAAA,EAE5B,MAAM,cAAgC;AACpC,QAAI,KAAK,UAAU;AACjB,aAAO,KAAK;AAAA,IACd;AAEA,QAAI,KAAK,aAAa;AACpB,YAAM,aAAa,KAAK,YAAY,MAAM,GAAG;AAC7C,YAAM,UAAU,OAAO,KAAK,WAAW,CAAC,GAAG,QAAQ,EAAE,SAAS;AAC9D,YAAM,gBAAgB,KAAK,MAAM,OAAO;AAIxC,aAAO,QAAQ,cAAc,MAAM,IAAI,cAAc,IAAI;AAAA,IAC3D;AAEA,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AAAA,EAEA,MAAM,aACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAMiB;AACjB,UAAM,MAAM,MAAM,KAAK;AAAA,MACrB;AAAA,QACE,KAAK;AAAA,UACH,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC,eAAe;AAAA,UACf,eAAe,OAAO,WAAW;AAAA,UACjC,UAAU,OAAO,KAAK,WAAW,EAAE,SAAS,QAAQ;AAAA,UACpD,WAAW,sBAAsB;AAAA,QACnC;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,EAAC,MAAM,aAAa,MAAM,IAAI,eAAe,GAAG,QAAQ,mBAAkB;AAAA,EACnF;AAAA,EAEA,MAAM,YACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKmB;AACnB,QAAI;AACJ,QAAI,oBAAoB;AACtB,aAAO,MAAM,KAAK;AAAA,QAChB;AAAA,UACE,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC,eAAe;AAAA,UACf,WAAW;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO,MAAM,KAAK;AAAA,QAChB;AAAA,UACE,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC,eAAe;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,CAAC;AAEf,eAAW,OAAO,MAAM;AACtB,cAAQ;AAAA,QACN;AAAA,UACE,MAAM,OAAO,KAAK,IAAI,UAAU,GAAG,QAAQ,EAAE,SAAS;AAAA,UACtD,MAAM,IAAI,eAAe;AAAA,UACzB,QAAQ,IAAI,WAAW,MAAM,MAAM,SAAY,IAAI,WAAW;AAAA,QAChE;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,iBACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKyB;AACzB,QAAI,OAAO,MAAM,KAAK;AAAA,MACpB;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,CAAC;AAEf,eAAW,OAAO,MAAM;AACtB,UAAI,IAAI,eAAe,MAAM,yBAAyB;AACpD,gBAAQ;AAAA,UACN;AAAA,YACE,MAAM,IAAI,eAAe;AAAA,YACzB,YAAY,IAAI,eAAe;AAAA,YAC/B,aAAa,IAAI,WAAW;AAAA,UAC9B;AAAA,QACF;AAAA,MACF,OAAO;AACL,YAAI,SAAS;AAAA,UACT,MAAM,OAAO,KAAK,IAAI,UAAU,GAAG,QAAQ,EAAE,SAAS;AAAA,UACtD,MAAM,IAAI,eAAe;AAAA,UACzB,QAAQ,IAAI,WAAW;AAAA,QACzB;AACF,gBAAQ,KAAK,MAAM;AAAA,MACrB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,wBACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAMwB;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,QACE;AAAA,QACA,eAAe;AAAA,QACf,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACZ,GAOwB;AACxB,UAAM,KAAK;AAAA,MACT;AAAA,QACE,KAAK;AAAA,UACH,UAAU,MAAM,KAAK,YAAY;AAAA,UACjC;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,EAAC,MAAM,eAAe,YAAY,eAAe,YAAW;AAAA,EACrE;AAAA,EAEA,MAAM,aACJ;AAAA,IACE;AAAA,IACA,UAAU;AAAA,EACZ,GAKe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,eAAe;AAAA,QACf,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBACJ;AAAA,IACE,UAAU;AAAA,EACZ,GAIe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,QACE,UAAU,MAAM,KAAK,YAAY;AAAA,QACjC,eAAe;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gyldendalas/gyldendal-divine-api",
|
|
3
|
+
"type": "module",
|
|
4
|
+
"scripts": {
|
|
5
|
+
"package": "tsup"
|
|
6
|
+
},
|
|
7
|
+
"devDependencies": {
|
|
8
|
+
"tsup": "^8.3.6",
|
|
9
|
+
"typescript": "^5.7.3",
|
|
10
|
+
"@types/node": "^22.10.10"
|
|
11
|
+
},
|
|
12
|
+
"version": "0.0.1",
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"package.json"
|
|
16
|
+
],
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"main": "./dist/index.js",
|
|
19
|
+
"module": "./dist/index.mjs"
|
|
20
|
+
}
|