@3d-print-shop/client 1.0.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/dist/Caller.d.ts +8 -0
- package/dist/Caller.js +1 -0
- package/dist/HttpShop.d.ts +61 -0
- package/dist/HttpShop.js +170 -0
- package/dist/Job.d.ts +105 -0
- package/dist/Job.js +1 -0
- package/dist/Printer.d.ts +100 -0
- package/dist/Printer.js +1 -0
- package/dist/Shop.d.ts +63 -0
- package/dist/Shop.js +1 -0
- package/dist/browser.d.ts +6 -0
- package/dist/browser.js +2 -0
- package/dist/client/tests/tsconfig.tsbuildinfo +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +4 -0
- package/dist/routes.d.ts +2 -0
- package/dist/routes.js +8 -0
- package/dist/shopUrl.d.ts +5 -0
- package/dist/shopUrl.js +9 -0
- package/dist/token.d.ts +13 -0
- package/dist/token.js +70 -0
- package/package.json +38 -0
package/dist/Caller.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** What a caller may do. Authority, not occupation - a script can be an admin and a person a user. */
|
|
2
|
+
export type Role = 'admin' | 'user';
|
|
3
|
+
/** Who is asking. The id is what outlives them; the name is what a log and a UI say. */
|
|
4
|
+
export interface Caller {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
role: Role;
|
|
8
|
+
}
|
package/dist/Caller.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Caller } from './Caller.js';
|
|
2
|
+
import type { FilamentDemand, Job, JobDetails, JobsHeld, Verdict } from './Job.js';
|
|
3
|
+
import type { PrinterRecord, RegisteredPrinter } from './Printer.js';
|
|
4
|
+
import type { PrinterAdded, Shop } from './Shop.js';
|
|
5
|
+
/** The shop does not know who is asking. A browser answers this by logging in. */
|
|
6
|
+
export declare class NotAuthenticated extends Error {
|
|
7
|
+
}
|
|
8
|
+
/** The shop over its HTTP API, which is the only way in - it runs as its own process. */
|
|
9
|
+
export declare class HttpShop implements Shop {
|
|
10
|
+
private readonly url;
|
|
11
|
+
private readonly token?;
|
|
12
|
+
constructor(url: string, token?: string | undefined, howToReach?: typeof fetch);
|
|
13
|
+
private readonly howToReach;
|
|
14
|
+
whoAmI(): Promise<Caller>;
|
|
15
|
+
/** Log in, and answer with who the shop takes you to be. The session rides on a cookie. */
|
|
16
|
+
logIn(id: string, password: string): Promise<Caller>;
|
|
17
|
+
/** End the session, at the shop as well as in this browser. */
|
|
18
|
+
logOut(): Promise<void>;
|
|
19
|
+
changeMyPassword(current: string, password: string): Promise<void>;
|
|
20
|
+
jobs(): Promise<JobsHeld>;
|
|
21
|
+
job(id: number): Promise<Job>;
|
|
22
|
+
submit(details: JobDetails, gcode: Blob): Promise<Job>;
|
|
23
|
+
verdict(id: number, verdict: Verdict): Promise<Job | undefined>;
|
|
24
|
+
waitingOn(printer?: string): Promise<FilamentDemand[]>;
|
|
25
|
+
printers(): Promise<RegisteredPrinter[]>;
|
|
26
|
+
addPrinter(record: PrinterRecord, key?: string): Promise<PrinterAdded>;
|
|
27
|
+
removePrinter(name: string): Promise<void>;
|
|
28
|
+
pause(name: string, reason: string): Promise<RegisteredPrinter>;
|
|
29
|
+
resume(name: string): Promise<RegisteredPrinter>;
|
|
30
|
+
load(name: string, filaments: string[]): Promise<RegisteredPrinter>;
|
|
31
|
+
shutDown(): Promise<void>;
|
|
32
|
+
private answered;
|
|
33
|
+
private reach;
|
|
34
|
+
private attempt;
|
|
35
|
+
}
|
|
36
|
+
export declare function sending(body: unknown): {
|
|
37
|
+
headers?: Record<string, string>;
|
|
38
|
+
body?: FormData | string;
|
|
39
|
+
};
|
|
40
|
+
export declare function printerPath(name: string): string;
|
|
41
|
+
export declare function refusal(response: Response): Promise<string>;
|
|
42
|
+
type WireJob = Omit<Job, 'submittedAt'> & {
|
|
43
|
+
submittedAt: string;
|
|
44
|
+
};
|
|
45
|
+
type WireTrouble = {
|
|
46
|
+
reason: string;
|
|
47
|
+
since: string;
|
|
48
|
+
};
|
|
49
|
+
type WirePrinter = Omit<RegisteredPrinter, 'paused' | 'unreachable' | 'refused' | 'outOfContact'> & {
|
|
50
|
+
paused?: WireTrouble;
|
|
51
|
+
unreachable?: WireTrouble;
|
|
52
|
+
refused?: WireTrouble;
|
|
53
|
+
outOfContact?: WireTrouble;
|
|
54
|
+
};
|
|
55
|
+
export declare function asJob(job: WireJob): Job;
|
|
56
|
+
export declare function asPrinter(printer: WirePrinter): RegisteredPrinter;
|
|
57
|
+
export declare function since(trouble: WireTrouble | undefined): {
|
|
58
|
+
reason: string;
|
|
59
|
+
since: Date;
|
|
60
|
+
} | undefined;
|
|
61
|
+
export {};
|
package/dist/HttpShop.js
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
const DESCRIPTION_PART = 'job';
|
|
2
|
+
const GCODE_PART = 'gcode';
|
|
3
|
+
// AIDEV-NOTE: apart from every other refusal because a page has something to DO about this one -
|
|
4
|
+
// show somebody a login rather than an error. Everything else the shop says no to is a thing the
|
|
5
|
+
// caller got wrong; this is the shop not knowing who they are yet.
|
|
6
|
+
/** The shop does not know who is asking. A browser answers this by logging in. */
|
|
7
|
+
export class NotAuthenticated extends Error {
|
|
8
|
+
}
|
|
9
|
+
/** The shop over its HTTP API, which is the only way in - it runs as its own process. */
|
|
10
|
+
export class HttpShop {
|
|
11
|
+
// AIDEV-NOTE: the token is taken once, here, so every request carries it without a caller
|
|
12
|
+
// remembering to. Undefined is a caller that has none to present, which every shop refuses - it
|
|
13
|
+
// is not a mode, it is the 401 a caller gets for not having been set up yet.
|
|
14
|
+
//
|
|
15
|
+
// Handed in rather than looked up. Finding a token on THIS machine - an environment variable, a
|
|
16
|
+
// file under a home directory - is a thing only a program on a machine can do, and this class is
|
|
17
|
+
// also what a browser talks to the shop with, where none of that exists and importing `node:fs`
|
|
18
|
+
// to reach the default would sink the whole bundle. `defaultToken()` is still what a command line
|
|
19
|
+
// passes; see index.ts.
|
|
20
|
+
// AIDEV-NOTE: how it reaches the shop, handed in for the same reason the token is - so that what
|
|
21
|
+
// this client SENDS and what it makes of the answer can be asked without a socket between them.
|
|
22
|
+
// The shop's own suite drives a real `createApi` through one of these, which is the only place
|
|
23
|
+
// both halves of the contract are live at once. Nothing else ever passes it: over the wire is what
|
|
24
|
+
// a client of this shop does, and a second way to reach one would be a second way to be wrong.
|
|
25
|
+
constructor(url, token, howToReach) {
|
|
26
|
+
this.url = url;
|
|
27
|
+
this.token = token;
|
|
28
|
+
this.howToReach = howToReach ?? ((asked, sent) => fetch(asked, sent));
|
|
29
|
+
}
|
|
30
|
+
async whoAmI() {
|
|
31
|
+
return (await this.answered('GET', '/me'));
|
|
32
|
+
}
|
|
33
|
+
// AIDEV-NOTE: nothing is answered with but the caller. The session is a cookie the shop set, which
|
|
34
|
+
// this never sees and could not read if it tried - that is the whole reason it is a cookie rather
|
|
35
|
+
// than something a page keeps: a script that can read a credential is a script that can send one
|
|
36
|
+
// somewhere else.
|
|
37
|
+
/** Log in, and answer with who the shop takes you to be. The session rides on a cookie. */
|
|
38
|
+
async logIn(id, password) {
|
|
39
|
+
return (await this.answered('POST', '/sessions', { id, password }));
|
|
40
|
+
}
|
|
41
|
+
/** End the session, at the shop as well as in this browser. */
|
|
42
|
+
async logOut() {
|
|
43
|
+
await this.reach('DELETE', '/sessions');
|
|
44
|
+
}
|
|
45
|
+
// AIDEV-NOTE: `current` travels with it rather than being checked by a login first, so the shop
|
|
46
|
+
// judges one request rather than trusting that a previous one was the same person. A wrong one is
|
|
47
|
+
// refused 403 and not 401 - the session is still good, and a client that treats it as expired
|
|
48
|
+
// would throw somebody out of a page for mistyping.
|
|
49
|
+
async changeMyPassword(current, password) {
|
|
50
|
+
await this.reach('PUT', '/me/password', { current, password });
|
|
51
|
+
}
|
|
52
|
+
async jobs() {
|
|
53
|
+
const held = (await this.answered('GET', '/jobs'));
|
|
54
|
+
return { accessibleJobs: held.accessibleJobs.map(asJob), totalJobs: held.totalJobs };
|
|
55
|
+
}
|
|
56
|
+
async job(id) {
|
|
57
|
+
return asJob((await this.answered('GET', `/jobs/${id}`)));
|
|
58
|
+
}
|
|
59
|
+
// AIDEV-NOTE: the description part is appended FIRST because the shop requires that order - it
|
|
60
|
+
// validates the description before reading a byte of gcode, which is what lets it refuse a job
|
|
61
|
+
// nothing could print without being sent tens of megabytes to say so. FormData keeps the order.
|
|
62
|
+
//
|
|
63
|
+
// A Blob rather than a path or a stream: it is what fetch will stream without reading whole, and
|
|
64
|
+
// `openAsBlob` gives a caller with a file on disk one backed by that file.
|
|
65
|
+
async submit(details, gcode) {
|
|
66
|
+
const body = new FormData();
|
|
67
|
+
body.append(DESCRIPTION_PART, JSON.stringify(details));
|
|
68
|
+
body.append(GCODE_PART, gcode, details.remotePath ?? 'print.gcode');
|
|
69
|
+
return asJob((await this.answered('POST', '/jobs', body)));
|
|
70
|
+
}
|
|
71
|
+
// One route, and a value rather than an endpoint per verdict - so the third one this shop expects
|
|
72
|
+
// ("abandon": do not reprint, but it was not a success) arrives without a new way in.
|
|
73
|
+
async verdict(id, verdict) {
|
|
74
|
+
const answer = (await this.answered('PUT', `/jobs/${id}/verdict`, { verdict }));
|
|
75
|
+
return answer && asJob(answer);
|
|
76
|
+
}
|
|
77
|
+
async waitingOn(printer) {
|
|
78
|
+
const forPrinter = printer === undefined ? '' : `?printer=${encodeURIComponent(printer)}`;
|
|
79
|
+
return (await this.answered('GET', `/filaments${forPrinter}`));
|
|
80
|
+
}
|
|
81
|
+
async printers() {
|
|
82
|
+
return (await this.answered('GET', '/printers')).map(asPrinter);
|
|
83
|
+
}
|
|
84
|
+
// 201 or 200: the shop says whether it made a printer or changed one it already had, and an
|
|
85
|
+
// operator correcting a typo in a name needs to be told which.
|
|
86
|
+
async addPrinter(record, key) {
|
|
87
|
+
const response = await this.reach('POST', '/printers', key === undefined ? record : { ...record, key });
|
|
88
|
+
return { printer: asPrinter((await bodyOf(response))), created: response.status === 201 };
|
|
89
|
+
}
|
|
90
|
+
async removePrinter(name) {
|
|
91
|
+
await this.reach('DELETE', printerPath(name));
|
|
92
|
+
}
|
|
93
|
+
async pause(name, reason) {
|
|
94
|
+
return asPrinter((await this.answered('PUT', `${printerPath(name)}/status`, { stopped: true, reason })));
|
|
95
|
+
}
|
|
96
|
+
async resume(name) {
|
|
97
|
+
return asPrinter((await this.answered('PUT', `${printerPath(name)}/status`, { stopped: false })));
|
|
98
|
+
}
|
|
99
|
+
async load(name, filaments) {
|
|
100
|
+
return asPrinter((await this.answered('PUT', `${printerPath(name)}/filament`, { loaded: filaments })));
|
|
101
|
+
}
|
|
102
|
+
async shutDown() {
|
|
103
|
+
await this.reach('POST', '/shutdown');
|
|
104
|
+
}
|
|
105
|
+
async answered(method, path, body) {
|
|
106
|
+
return bodyOf(await this.reach(method, path, body));
|
|
107
|
+
}
|
|
108
|
+
// AIDEV-NOTE: the shop's own words reach the caller. The far end is what knows WHY - a printer
|
|
109
|
+
// that is not here, a bed nothing has room for, a job nobody has printed yet; this end knows only
|
|
110
|
+
// that something was refused.
|
|
111
|
+
async reach(method, path, body) {
|
|
112
|
+
const response = await this.attempt(method, path, body);
|
|
113
|
+
if (response.status === 401)
|
|
114
|
+
throw new NotAuthenticated(await refusal(response));
|
|
115
|
+
if (!response.ok)
|
|
116
|
+
throw new Error(await refusal(response));
|
|
117
|
+
return response;
|
|
118
|
+
}
|
|
119
|
+
async attempt(method, path, body) {
|
|
120
|
+
const sent = sending(body);
|
|
121
|
+
try {
|
|
122
|
+
return await this.howToReach(`${this.url}${path}`, {
|
|
123
|
+
method,
|
|
124
|
+
...sent,
|
|
125
|
+
// AIDEV-NOTE: so that a browser sends the session cookie the shop set. In node there is no
|
|
126
|
+
// cookie store for this to mean anything, and a token is what names a caller there.
|
|
127
|
+
credentials: 'include',
|
|
128
|
+
headers: { ...sent.headers, ...(this.token === undefined ? {} : { authorization: `Bearer ${this.token}` }) },
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
throw new Error(`Cannot reach the print shop at ${this.url}. Is it running? Start it with: 3d-print-shop serve`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// A multipart body carries its own content type, boundary and all; JSON has to say so itself.
|
|
137
|
+
export function sending(body) {
|
|
138
|
+
if (body === undefined)
|
|
139
|
+
return {};
|
|
140
|
+
if (body instanceof FormData)
|
|
141
|
+
return { body };
|
|
142
|
+
return { headers: { 'content-type': 'application/json' }, body: JSON.stringify(body) };
|
|
143
|
+
}
|
|
144
|
+
// A name is whatever an operator typed, and one carrying a `#` would otherwise make a URL whose
|
|
145
|
+
// path stops there.
|
|
146
|
+
export function printerPath(name) {
|
|
147
|
+
return `/printers/${encodeURIComponent(name)}`;
|
|
148
|
+
}
|
|
149
|
+
async function bodyOf(response) {
|
|
150
|
+
return response.status === 204 ? undefined : response.json();
|
|
151
|
+
}
|
|
152
|
+
export async function refusal(response) {
|
|
153
|
+
const said = (await response.json().catch(() => undefined));
|
|
154
|
+
return typeof said?.error === 'string' ? said.error : `${response.status} ${response.statusText}`;
|
|
155
|
+
}
|
|
156
|
+
export function asJob(job) {
|
|
157
|
+
return { ...job, submittedAt: new Date(job.submittedAt) };
|
|
158
|
+
}
|
|
159
|
+
export function asPrinter(printer) {
|
|
160
|
+
return {
|
|
161
|
+
...printer,
|
|
162
|
+
paused: since(printer.paused),
|
|
163
|
+
unreachable: since(printer.unreachable),
|
|
164
|
+
refused: since(printer.refused),
|
|
165
|
+
outOfContact: since(printer.outOfContact),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
export function since(trouble) {
|
|
169
|
+
return trouble && { ...trouble, since: new Date(trouble.since) };
|
|
170
|
+
}
|
package/dist/Job.d.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/** Millimetres, as the printer measures its bed and its height. */
|
|
2
|
+
export interface BuildVolume {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
z: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* What a client says about a job. NOT the gcode - that is sent beside this, because a kit's gcode
|
|
9
|
+
* runs to tens of megabytes and holding one in memory to describe it is backwards.
|
|
10
|
+
*/
|
|
11
|
+
export interface JobDetails {
|
|
12
|
+
/**
|
|
13
|
+
* What this needs, in the PRINTER's names for materials. A client with its own vocabulary resolves
|
|
14
|
+
* it before submitting.
|
|
15
|
+
*
|
|
16
|
+
* The FIRST is the one that must be loaded before it can start; every printer has one extruder.
|
|
17
|
+
* More may be named, and they are carried but not scheduled on.
|
|
18
|
+
*/
|
|
19
|
+
filaments: string[];
|
|
20
|
+
/** What a human should see. Absent, the shop names it. */
|
|
21
|
+
displayName?: string;
|
|
22
|
+
/** Where to push it on the printer. Absent, the shop chooses. */
|
|
23
|
+
remotePath?: string;
|
|
24
|
+
/** Which printer, by name. Absent, any printer it fits will do. */
|
|
25
|
+
printer?: string;
|
|
26
|
+
/** The room the SLICED result needs, compared axis for axis with no rotation. */
|
|
27
|
+
requiredBuildVolume?: BuildVolume;
|
|
28
|
+
/**
|
|
29
|
+
* How long printing this is expected to take, in seconds, as whatever sliced it estimated. The
|
|
30
|
+
* shop never measures one and never corrects one; it only adds them up.
|
|
31
|
+
*
|
|
32
|
+
* A field of its own rather than something in `metadata`, because the shop RANKS demand by it and
|
|
33
|
+
* metadata is carried without ever being interpreted. Absent is a client that does not know, which
|
|
34
|
+
* costs a total rather than counting as no work - see `FilamentDemand`.
|
|
35
|
+
*/
|
|
36
|
+
estimatedPrintSeconds?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Carried by the shop and never interpreted - how a client keeps its own meaning attached.
|
|
39
|
+
*
|
|
40
|
+
* Names against text, and nothing nested: the shop stores this and hands it back, so what it will
|
|
41
|
+
* take is what it can hand back unchanged. A client with structure of its own encodes it into one
|
|
42
|
+
* of these values and decodes it again on the way out.
|
|
43
|
+
*/
|
|
44
|
+
metadata?: Record<string, string>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* What a caller may see of the work a shop is holding, and how much of it there is altogether.
|
|
48
|
+
*
|
|
49
|
+
* One answer rather than a list and a count asked for separately: a submission landing between two
|
|
50
|
+
* questions would give a caller three jobs and a total of two, and the two have to agree. `totalJobs`
|
|
51
|
+
* is every job the shop holds, whoever owns them - enough to see that the queue is busy, and
|
|
52
|
+
* nothing about whose work it is.
|
|
53
|
+
*/
|
|
54
|
+
export interface JobsHeld {
|
|
55
|
+
accessibleJobs: Job[];
|
|
56
|
+
totalJobs: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* What queued work is waiting for, and how much of it there is - the answer to "what should I load
|
|
60
|
+
* next". Counted by the filament each job STARTS with, because that is the one that has to be on the
|
|
61
|
+
* machine before it can begin.
|
|
62
|
+
*
|
|
63
|
+
* Busiest first, which is by WORK when the shop knows all of it and by count when it does not.
|
|
64
|
+
*/
|
|
65
|
+
export interface FilamentDemand {
|
|
66
|
+
filament: string;
|
|
67
|
+
jobs: number;
|
|
68
|
+
/**
|
|
69
|
+
* How much printing is waiting on this filament, in seconds - present only when EVERY job counted
|
|
70
|
+
* here said how long it takes. A total summed over the ones that did would understate the queue,
|
|
71
|
+
* and a number that is quietly short is worse to choose by than no number at all.
|
|
72
|
+
*/
|
|
73
|
+
estimatedPrintSeconds?: number;
|
|
74
|
+
}
|
|
75
|
+
/** Where a job is. Derived by the shop from what its printers are holding. */
|
|
76
|
+
export type JobState = 'queued' | 'printing' | 'awaiting-approval';
|
|
77
|
+
/** What a printer is holding a job FOR. */
|
|
78
|
+
export type JobPhase = Exclude<JobState, 'queued'>;
|
|
79
|
+
/** How the printer stopped. None of these is a verdict on whether the print is usable. */
|
|
80
|
+
export type PrinterOutcome = 'finished' | 'failed' | 'cancelled';
|
|
81
|
+
/**
|
|
82
|
+
* What a person says about a print that has finished. `abandoned` is the one that is neither: the
|
|
83
|
+
* print was no good and it is not worth another - the job leaves the shop as an approved one does.
|
|
84
|
+
*/
|
|
85
|
+
export type Verdict = 'approved' | 'rejected' | 'abandoned';
|
|
86
|
+
/** A job as the shop reports it. */
|
|
87
|
+
export interface Job extends JobDetails {
|
|
88
|
+
id: number;
|
|
89
|
+
/**
|
|
90
|
+
* The id of the caller who submitted it, written with the record and never rewritten.
|
|
91
|
+
*
|
|
92
|
+
* Absent is a job that belongs to nobody: its submitter was revoked - their entry left the shop's
|
|
93
|
+
* callers and the id it carried is nobody's - or it was submitted before the shop recorded this
|
|
94
|
+
* at all. An admin is then who is left to read and judge it.
|
|
95
|
+
*/
|
|
96
|
+
owner?: string;
|
|
97
|
+
displayName: string;
|
|
98
|
+
submittedAt: Date;
|
|
99
|
+
gcodeBytes: number;
|
|
100
|
+
state: JobState;
|
|
101
|
+
/** The printer holding it, when one is. */
|
|
102
|
+
heldBy?: string;
|
|
103
|
+
/** What the printer said when it stopped, which is not a verdict. */
|
|
104
|
+
lastPrinterOutcome?: PrinterOutcome;
|
|
105
|
+
}
|
package/dist/Job.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { BuildVolume, JobPhase, PrinterOutcome } from './Job.js';
|
|
2
|
+
/** Which protocol a printer speaks, and so which client the shop builds to reach it. */
|
|
3
|
+
export type PrinterApi = 'octoprint';
|
|
4
|
+
/** What the operator says a machine IS. It changes when the shop's machines change. */
|
|
5
|
+
export interface PrinterRecord {
|
|
6
|
+
name: string;
|
|
7
|
+
buildVolume: BuildVolume;
|
|
8
|
+
api: PrinterApi;
|
|
9
|
+
/** Where the machine answers, e.g. `http://octopi.local`. */
|
|
10
|
+
address: string;
|
|
11
|
+
}
|
|
12
|
+
/** What a printer is holding, and what for. */
|
|
13
|
+
export interface Holding {
|
|
14
|
+
job: number;
|
|
15
|
+
phase: JobPhase;
|
|
16
|
+
/**
|
|
17
|
+
* Where the machine said it filed the gcode, which is not always where it was asked to.
|
|
18
|
+
*
|
|
19
|
+
* Recorded once the upload has been answered, so a print started before the shop read that answer
|
|
20
|
+
* back - or interrupted between the upload and the write - has none.
|
|
21
|
+
*/
|
|
22
|
+
remotePath?: string;
|
|
23
|
+
/** What the machine said when it stopped. Present once it has stopped. */
|
|
24
|
+
outcome?: PrinterOutcome;
|
|
25
|
+
}
|
|
26
|
+
/** What a printer is DOING. It changes as the shop runs. */
|
|
27
|
+
export interface PrinterStatus {
|
|
28
|
+
/** What is on the machine now, positionally by extruder. Empty when nothing is. */
|
|
29
|
+
loaded: string[];
|
|
30
|
+
/**
|
|
31
|
+
* An OPERATOR stopped this printer, with the reason they gave and when. Only an operator lifts
|
|
32
|
+
* it: a reason given by a person is a fact about the room, and no machine can contradict it.
|
|
33
|
+
*/
|
|
34
|
+
paused?: {
|
|
35
|
+
reason: string;
|
|
36
|
+
since: Date;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* The shop could not get to the machine, with what it saw and when.
|
|
40
|
+
*
|
|
41
|
+
* Kept apart from `paused` because it is the shop's own reading of a machine rather than
|
|
42
|
+
* anybody's instruction: nobody is asked to clear it, and the shop clears it itself once it can
|
|
43
|
+
* reach the machine again.
|
|
44
|
+
*/
|
|
45
|
+
unreachable?: {
|
|
46
|
+
reason: string;
|
|
47
|
+
since: Date;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* The machine would not take the file, with what it said and when.
|
|
51
|
+
*
|
|
52
|
+
* Its own fact rather than a stop, because nobody stopped anything: the machine answered and gave
|
|
53
|
+
* a considered no. Nothing about that changes by asking again - and asking costs a whole plate -
|
|
54
|
+
* so this is the one thing the shop writes that waits for a person, and `printer start` is how a
|
|
55
|
+
* person says they have dealt with it.
|
|
56
|
+
*/
|
|
57
|
+
refused?: {
|
|
58
|
+
reason: string;
|
|
59
|
+
since: Date;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* The shop is holding a print it can no longer hear about, with what took the watch and when.
|
|
63
|
+
*
|
|
64
|
+
* Not a stop and not a fault of the machine's: as far as anyone knows it is still printing, and
|
|
65
|
+
* nothing is idled by this that the print was not idling already. The shop listens again on a
|
|
66
|
+
* backoff, and the machine's own status settles what happened while nobody was there.
|
|
67
|
+
*/
|
|
68
|
+
outOfContact?: {
|
|
69
|
+
reason: string;
|
|
70
|
+
since: Date;
|
|
71
|
+
};
|
|
72
|
+
/** The job it has, or undefined when the bed is clear and it can take another. */
|
|
73
|
+
holding?: Holding;
|
|
74
|
+
}
|
|
75
|
+
/** A printer as the shop reports it: what it is, what it is doing, and where it can be watched. */
|
|
76
|
+
export interface RegisteredPrinter extends PrinterRecord, PrinterStatus {
|
|
77
|
+
/**
|
|
78
|
+
* Where a person can watch this machine, when the protocol it speaks says where that is.
|
|
79
|
+
*
|
|
80
|
+
* Derived from the record rather than recorded, and never asked of the machine: where a camera
|
|
81
|
+
* lives is a fact about the protocol, not something an operator should have to retype, and this
|
|
82
|
+
* is a URL for a BROWSER to open rather than anything the shop fetches. Absent is a machine whose
|
|
83
|
+
* protocol says nothing about one.
|
|
84
|
+
*/
|
|
85
|
+
camera?: string;
|
|
86
|
+
/**
|
|
87
|
+
* The shop cannot read what this printer is DOING - its status file is there and is not JSON.
|
|
88
|
+
*
|
|
89
|
+
* Derived when the printer is read rather than recorded, the way `camera` is, and for a reason
|
|
90
|
+
* the others do not have: it is a fact about a file the shop was unable to read, so there is
|
|
91
|
+
* nowhere to write it that it could be read back from. Nothing schedules onto a printer carrying
|
|
92
|
+
* one, and what it is holding is not known - so what it says is that a person has to look.
|
|
93
|
+
*
|
|
94
|
+
* No `since`: the other four are written down at the moment they happen, and this one is found
|
|
95
|
+
* when the file is read. The shop knows the file is bad now and not when it went bad.
|
|
96
|
+
*/
|
|
97
|
+
unreadable?: {
|
|
98
|
+
reason: string;
|
|
99
|
+
};
|
|
100
|
+
}
|
package/dist/Printer.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/Shop.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Caller } from './Caller.js';
|
|
2
|
+
import type { FilamentDemand, Job, JobDetails, JobsHeld, Verdict } from './Job.js';
|
|
3
|
+
import type { PrinterRecord, RegisteredPrinter } from './Printer.js';
|
|
4
|
+
/** Whether the shop had this printer already, which is the difference between adding and changing. */
|
|
5
|
+
export interface PrinterAdded {
|
|
6
|
+
printer: RegisteredPrinter;
|
|
7
|
+
created: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface Shop {
|
|
10
|
+
/** Who the shop takes this caller to be, by what they presented. */
|
|
11
|
+
whoAmI(): Promise<Caller>;
|
|
12
|
+
/** Log in with a password, for a caller who is a person rather than a program. */
|
|
13
|
+
logIn(id: string, password: string): Promise<Caller>;
|
|
14
|
+
/** End the session, at the shop rather than only in the browser holding it. */
|
|
15
|
+
logOut(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* What this caller may see, and how many jobs the shop holds altogether. An admin sees a list as
|
|
18
|
+
* long as the total; everybody else sees their own beside a number that says how busy it is.
|
|
19
|
+
*/
|
|
20
|
+
jobs(): Promise<JobsHeld>;
|
|
21
|
+
/** Refused as a job that is not here when it is not this caller's to read - see `jobs`. */
|
|
22
|
+
job(id: number): Promise<Job>;
|
|
23
|
+
/**
|
|
24
|
+
* The description goes first and the gcode second, which is the shop's own rule: it refuses a job
|
|
25
|
+
* no printer could take before reading a byte, so a hopeless submission costs no upload.
|
|
26
|
+
*/
|
|
27
|
+
submit(details: JobDetails, gcode: Blob): Promise<Job>;
|
|
28
|
+
/**
|
|
29
|
+
* What a person made of a finished print. Answers with the job when it is back in the queue, and
|
|
30
|
+
* with nothing when it has left the shop.
|
|
31
|
+
*/
|
|
32
|
+
verdict(id: number, verdict: Verdict): Promise<Job | undefined>;
|
|
33
|
+
/**
|
|
34
|
+
* Change your own password, presenting the one you have now.
|
|
35
|
+
*
|
|
36
|
+
* The one this asks for is asked for even though the shop already knows who is asking: a session
|
|
37
|
+
* is a screen somebody walked away from, and a password nobody has to know to change is a password
|
|
38
|
+
* the next person at that screen owns. Every OTHER session this caller holds ends with it.
|
|
39
|
+
*/
|
|
40
|
+
changeMyPassword(current: string, password: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* What the queued work is waiting for, busiest first - the operator's question rather than the
|
|
43
|
+
* shop's. It counts every job the shop holds, so it is not a caller's own view of the queue.
|
|
44
|
+
*
|
|
45
|
+
* Named a printer, it counts only what that machine could take - which is what an operator
|
|
46
|
+
* standing at one of several wants to know.
|
|
47
|
+
*/
|
|
48
|
+
waitingOn(printer?: string): Promise<FilamentDemand[]>;
|
|
49
|
+
printers(): Promise<RegisteredPrinter[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Add a printer, or change what the shop knows about one it already has.
|
|
52
|
+
*
|
|
53
|
+
* The key is what the shop reaches the machine with. Given, it is in force at once - nothing has
|
|
54
|
+
* to be signalled and nothing restarted. Left out, whatever key the shop already had is kept.
|
|
55
|
+
*/
|
|
56
|
+
addPrinter(record: PrinterRecord, key?: string): Promise<PrinterAdded>;
|
|
57
|
+
removePrinter(name: string): Promise<void>;
|
|
58
|
+
pause(name: string, reason: string): Promise<RegisteredPrinter>;
|
|
59
|
+
resume(name: string): Promise<RegisteredPrinter>;
|
|
60
|
+
load(name: string, filaments: string[]): Promise<RegisteredPrinter>;
|
|
61
|
+
/** Answers once the shop has agreed to stop, which is before it has. */
|
|
62
|
+
shutDown(): Promise<void>;
|
|
63
|
+
}
|
package/dist/Shop.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { HttpShop, NotAuthenticated } from './HttpShop.js';
|
|
2
|
+
export { SHOP_ROUTES } from './routes.js';
|
|
3
|
+
export type { Caller, Role } from './Caller.js';
|
|
4
|
+
export type { BuildVolume, FilamentDemand, Job, JobDetails, JobPhase, JobState, JobsHeld, PrinterOutcome, Verdict } from './Job.js';
|
|
5
|
+
export type { Holding, PrinterApi, PrinterRecord, PrinterStatus, RegisteredPrinter } from './Printer.js';
|
|
6
|
+
export type { PrinterAdded, Shop } from './Shop.js';
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../../../node_modules/typescript/lib/lib.es5.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../../../node_modules/@types/node/globals.typedarray.d.ts","../../../../../node_modules/@types/node/buffer.buffer.d.ts","../../../../../node_modules/@types/node/globals.d.ts","../../../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../../../node_modules/@types/node/web-globals/events.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/utility.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/client-stats.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/round-robin-pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/h2c-client.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-call-history.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/snapshot-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/cache-interceptor.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../../../node_modules/@types/node/web-globals/storage.d.ts","../../../../../node_modules/@types/node/web-globals/streams.d.ts","../../../../../node_modules/@types/node/assert.d.ts","../../../../../node_modules/@types/node/assert/strict.d.ts","../../../../../node_modules/@types/node/async_hooks.d.ts","../../../../../node_modules/@types/node/buffer.d.ts","../../../../../node_modules/@types/node/child_process.d.ts","../../../../../node_modules/@types/node/cluster.d.ts","../../../../../node_modules/@types/node/console.d.ts","../../../../../node_modules/@types/node/constants.d.ts","../../../../../node_modules/@types/node/crypto.d.ts","../../../../../node_modules/@types/node/dgram.d.ts","../../../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../../../node_modules/@types/node/dns.d.ts","../../../../../node_modules/@types/node/dns/promises.d.ts","../../../../../node_modules/@types/node/domain.d.ts","../../../../../node_modules/@types/node/events.d.ts","../../../../../node_modules/@types/node/fs.d.ts","../../../../../node_modules/@types/node/fs/promises.d.ts","../../../../../node_modules/@types/node/http.d.ts","../../../../../node_modules/@types/node/http2.d.ts","../../../../../node_modules/@types/node/https.d.ts","../../../../../node_modules/@types/node/inspector.d.ts","../../../../../node_modules/@types/node/inspector.generated.d.ts","../../../../../node_modules/@types/node/module.d.ts","../../../../../node_modules/@types/node/net.d.ts","../../../../../node_modules/@types/node/os.d.ts","../../../../../node_modules/@types/node/path.d.ts","../../../../../node_modules/@types/node/perf_hooks.d.ts","../../../../../node_modules/@types/node/process.d.ts","../../../../../node_modules/@types/node/punycode.d.ts","../../../../../node_modules/@types/node/querystring.d.ts","../../../../../node_modules/@types/node/readline.d.ts","../../../../../node_modules/@types/node/readline/promises.d.ts","../../../../../node_modules/@types/node/repl.d.ts","../../../../../node_modules/@types/node/sea.d.ts","../../../../../node_modules/@types/node/sqlite.d.ts","../../../../../node_modules/@types/node/stream.d.ts","../../../../../node_modules/@types/node/stream/promises.d.ts","../../../../../node_modules/@types/node/stream/consumers.d.ts","../../../../../node_modules/@types/node/stream/web.d.ts","../../../../../node_modules/@types/node/string_decoder.d.ts","../../../../../node_modules/@types/node/test.d.ts","../../../../../node_modules/@types/node/timers.d.ts","../../../../../node_modules/@types/node/timers/promises.d.ts","../../../../../node_modules/@types/node/tls.d.ts","../../../../../node_modules/@types/node/trace_events.d.ts","../../../../../node_modules/@types/node/tty.d.ts","../../../../../node_modules/@types/node/url.d.ts","../../../../../node_modules/@types/node/util.d.ts","../../../../../node_modules/@types/node/v8.d.ts","../../../../../node_modules/@types/node/vm.d.ts","../../../../../node_modules/@types/node/wasi.d.ts","../../../../../node_modules/@types/node/worker_threads.d.ts","../../../../../node_modules/@types/node/zlib.d.ts","../../../../../node_modules/@types/node/index.d.ts","../../../../../node_modules/@types/yargs-parser/index.d.ts","../../../../../node_modules/@types/yargs/index.d.ts","../../../../../node_modules/@types/yargs/index.d.mts","../../../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../../../node_modules/chalk/index.d.ts","../../../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../../../node_modules/@types/istanbul-reports/index.d.ts","../../../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../../../node_modules/@jest/schemas/build/index.d.ts","../../../../../node_modules/@jest/types/build/index.d.ts","../../../../../node_modules/jest-mock/build/index.d.ts","../../../../../node_modules/@types/stack-utils/index.d.ts","../../../../../node_modules/jest-message-util/build/index.d.ts","../../../../../node_modules/@jest/fake-timers/build/index.d.ts","../../../../../node_modules/@jest/environment/build/index.d.ts","../../../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../../../node_modules/pretty-format/build/index.d.ts","../../../../../node_modules/jest-diff/build/index.d.ts","../../../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../../../node_modules/expect/build/index.d.ts","../../../../../node_modules/jest-snapshot/build/index.d.ts","../../../../../node_modules/@jest/expect/build/index.d.ts","../../../../../node_modules/@jest/globals/build/index.d.ts","../../../src/caller.ts","../../../src/job.ts","../../../src/printer.ts","../../../src/shop.ts","../../../src/httpshop.ts","../../../tests/httpshop.test.ts","../../../src/routes.ts","../../../src/shopurl.ts","../../../src/token.ts","../../../src/index.ts","../../../tests/routes.test.ts","../../../tests/token.test.ts","../../../tests/whattheclientsends.test.ts","../../../tests/assumptions/whatfetchdoes.test.ts","../../../src/browser.ts","../../../../../node_modules/@types/jest/node_modules/@jest/expect-utils/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbols/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/any/any.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/any/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/async-iterator/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/literal/literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/literal/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/enum/enum.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/enum/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/function/function.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/function/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/computed/computed.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/computed/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/never/never.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/never/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/union-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/union.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/recursive/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unsafe/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/ref/ref.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/ref/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/tuple/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/error/error.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/error/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/string/string.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/string/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/boolean/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/number/number.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/number/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/integer/integer.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/integer/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/bigint/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/union.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/iterator/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/promise/promise.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/promise/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/sets/set.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/sets/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/optional/optional.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/optional/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/awaited/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-entries.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/omit.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/pick.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/null/null.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/null/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbol/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/undefined/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/partial/partial.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/partial/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/regexp/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/record/record.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/record/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/required/required.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/required/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/transform/transform.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/transform/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/compute.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/infer.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/module.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/not/not.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/not/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/static/static.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/static/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/object/object.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/object/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/helpers/helpers.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/helpers/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/array/array.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/array/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/date/date.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/date/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/uint8array/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unknown/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/void/void.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/void/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/schema/schema.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/schema/anyschema.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/schema/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/clone/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/clone/value.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/clone/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/create/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/create/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/argument/argument.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/argument/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/kind.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/value.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/patterns/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/registry/format.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/registry/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/registry/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/composite/composite.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/composite/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/const/const.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/const/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-undefined.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/extract.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instance-type/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instantiate/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/parameters/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/rest/rest.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/rest/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/return-type/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/type/json.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/type/javascript.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/type/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@jest/schemas/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/jest-matcher-utils/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/jest-mock/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/expect/build/index.d.ts","../../../../../node_modules/@types/jest/index.d.ts"],"fileIdsList":[[50,105,122,123,151,155,165,166,169],[50,105,122,123],[50,105,122,123,175,176],[50,105,122,123,165,166,168],[50,105,122,123,165,166,170,177],[50,105,122,123,163],[50,105,122,123,155,158,159,160,162,164],[50,105,122,123,159],[50,105,122,123,161],[50,105,122,123,388,392],[50,105,122,123,386],[50,105,122,123,196,198,202,205,207,209,211,213,215,219,223,227,229,231,233,235,237,239,241,243,245,247,255,260,262,264,266,268,271,273,278,282,286,288,290,292,295,297,299,302,304,308,310,312,314,316,318,320,322,324,326,329,332,334,336,340,342,345,347,349,351,355,361,365,367,369,376,378,380,382,385],[50,105,122,123,196,329],[50,105,122,123,197],[50,105,122,123,335],[50,105,122,123,196,312,316,329],[50,105,122,123,317],[50,105,122,123,196,312,329],[50,105,122,123,201],[50,105,122,123,217,223,227,233,264,316,329],[50,105,122,123,272],[50,105,122,123,246],[50,105,122,123,240],[50,105,122,123,330,331],[50,105,122,123,329],[50,105,122,123,219,223,260,266,278,314,316,329],[50,105,122,123,346],[50,105,122,123,195,329],[50,105,122,123,216],[50,105,122,123,198,205,211,215,219,235,247,288,290,292,314,316,320,322,324,329],[50,105,122,123,348],[50,105,122,123,209,219,235,329],[50,105,122,123,350],[50,105,122,123,196,205,207,271,312,316,329],[50,105,122,123,208],[50,105,122,123,333],[50,105,122,123,327],[50,105,122,123,319],[50,105,122,123,196,211,329],[50,105,122,123,212],[50,105,122,123,236],[50,105,122,123,268,314,329,353],[50,105,122,123,255,329,353],[50,105,122,123,219,227,255,268,312,316,329,352,354],[50,105,122,123,352,353,354],[50,105,122,123,237,329],[50,105,122,123,211,268,314,316,329,358],[50,105,122,123,268,314,329,358],[50,105,122,123,227,268,312,316,329,357,359],[50,105,122,123,356,357,358,359,360],[50,105,122,123,268,314,329,363],[50,105,122,123,255,329,363],[50,105,122,123,219,227,255,268,312,316,329,362,364],[50,105,122,123,362,363,364],[50,105,122,123,214],[50,105,122,123,337,338,339],[50,105,122,123,196,198,202,205,209,211,215,217,219,223,227,229,231,233,235,239,241,243,245,247,255,262,264,268,271,288,290,292,297,299,304,308,310,314,318,320,322,324,326,329,336],[50,105,122,123,196,198,202,205,209,211,215,217,219,223,227,229,231,233,235,237,239,241,243,245,247,255,262,264,268,271,288,290,292,297,299,304,308,310,314,318,320,322,324,326,329,336],[50,105,122,123,219,314,329],[50,105,122,123,315],[50,105,122,123,256,257,258,259],[50,105,122,123,258,268,314,316,329],[50,105,122,123,256,260,268,314,329],[50,105,122,123,211,227,243,245,255,329],[50,105,122,123,217,219,223,227,229,233,235,256,257,259,268,314,316,318,329],[50,105,122,123,366],[50,105,122,123,209,219,329],[50,105,122,123,368],[50,105,122,123,202,205,207,209,215,223,227,235,262,264,271,299,314,318,324,329,336],[50,105,122,123,244],[50,105,122,123,220,221,222],[50,105,122,123,205,219,220,271,329],[50,105,122,123,219,220,329],[50,105,122,123,329,371],[50,105,122,123,370,371,372,373,374,375],[50,105,122,123,211,268,314,316,329,371],[50,105,122,123,211,227,255,268,329,370],[50,105,122,123,261],[50,105,122,123,274,275,276,277],[50,105,122,123,268,275,314,316,329],[50,105,122,123,223,227,229,235,266,314,316,318,329],[50,105,122,123,211,217,227,233,243,268,274,276,316,329],[50,105,122,123,210],[50,105,122,123,199,200,267],[50,105,122,123,196,314,329],[50,105,122,123,199,200,202,205,209,211,213,215,223,227,235,260,262,264,266,271,314,316,318,329],[50,105,122,123,202,205,209,213,215,217,219,223,227,233,235,260,262,271,273,278,282,286,295,299,302,304,314,316,318,329],[50,105,122,123,307],[50,105,122,123,202,205,209,213,215,223,227,229,233,235,262,271,299,312,314,316,318,329],[50,105,122,123,196,305,306,312,314,329],[50,105,122,123,218],[50,105,122,123,309],[50,105,122,123,287],[50,105,122,123,242],[50,105,122,123,313],[50,105,122,123,196,205,271,312,316,329],[50,105,122,123,279,280,281],[50,105,122,123,268,280,314,329],[50,105,122,123,268,280,314,316,329],[50,105,122,123,211,217,223,227,229,233,260,268,279,281,314,316,329],[50,105,122,123,269,270],[50,105,122,123,268,269,314],[50,105,122,123,196,268,270,316,329],[50,105,122,123,377],[50,105,122,123,215,219,235,329],[50,105,122,123,293,294],[50,105,122,123,268,293,314,316,329],[50,105,122,123,205,207,211,217,223,227,229,233,239,241,243,245,247,268,271,288,290,292,294,314,316,329],[50,105,122,123,341],[50,105,122,123,283,284,285],[50,105,122,123,268,284,314,329],[50,105,122,123,268,284,314,316,329],[50,105,122,123,211,217,223,227,229,233,260,268,283,285,314,316,329],[50,105,122,123,263],[50,105,122,123,206],[50,105,122,123,205,271,329],[50,105,122,123,203,204],[50,105,122,123,203,268,314],[50,105,122,123,196,204,268,316,329],[50,105,122,123,298],[50,105,122,123,196,198,211,213,219,227,239,241,243,245,255,297,312,314,316,329],[50,105,122,123,228],[50,105,122,123,232],[50,105,122,123,196,231,312,329],[50,105,122,123,296],[50,105,122,123,343,344],[50,105,122,123,300,301],[50,105,122,123,268,300,314,316,329],[50,105,122,123,205,207,211,217,223,227,229,233,239,241,243,245,247,268,271,288,290,292,301,314,316,329],[50,105,122,123,379],[50,105,122,123,223,227,235,329],[50,105,122,123,381],[50,105,122,123,215,219,329],[50,105,122,123,198,202,209,211,213,215,223,227,229,233,235,239,241,243,245,247,255,262,264,288,290,292,297,299,310,314,318,320,322,324,326,327],[50,105,122,123,327,328],[50,105,122,123,196],[50,105,122,123,265],[50,105,122,123,311],[50,105,122,123,202,205,209,213,215,219,223,227,229,231,233,235,262,264,271,299,304,308,310,314,316,318,329],[50,105,122,123,238],[50,105,122,123,289],[50,105,122,123,195],[50,105,122,123,211,227,237,239,241,243,245,247,248,255],[50,105,122,123,211,227,237,241,248,249,255,316],[50,105,122,123,248,249,250,251,252,253,254],[50,105,122,123,237],[50,105,122,123,237,255],[50,105,122,123,211,227,239,241,243,247,255,316],[50,105,122,123,196,211,219,227,239,241,243,245,247,251,312,316,329],[50,105,122,123,211,227,253,312,316],[50,105,122,123,303],[50,105,122,123,234],[50,105,122,123,383,384],[50,105,122,123,202,209,215,247,262,264,273,290,292,297,320,322,326,329,336,351,367,369,378,382,383],[50,105,122,123,198,205,207,211,213,219,223,227,229,231,233,235,239,241,243,245,255,260,268,271,278,282,286,288,295,299,302,304,308,310,314,318,324,329,347,349,355,361,365,376,380],[50,105,122,123,321],[50,105,122,123,291],[50,105,122,123,224,225,226],[50,105,122,123,205,219,224,271,329],[50,105,122,123,219,224,329],[50,105,122,123,323],[50,105,122,123,230],[50,105,122,123,325],[50,105,122,123,194,390,391],[50,105,122,123,388],[50,105,122,123,160,389],[50,105,122,123,194],[50,105,122,123,387],[50,102,103,105,122,123],[50,104,105,122,123],[105,122,123],[50,105,110,122,123,140],[50,105,106,111,116,122,123,125,137,148],[50,105,106,107,116,122,123,125],[50,105,108,122,123,149],[50,105,109,110,117,122,123,126],[50,105,110,122,123,137,145],[50,105,111,113,116,122,123,125],[50,104,105,112,122,123],[50,105,113,114,122,123],[50,105,115,116,122,123],[50,104,105,116,122,123],[50,105,116,117,118,122,123,137,148],[50,105,116,117,118,122,123,132,137,140],[50,97,105,113,116,119,122,123,125,137,148],[50,105,116,117,119,120,122,123,125,137,145,148],[50,105,119,121,122,123,137,145,148],[48,49,50,51,52,53,54,55,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[50,105,116,122,123],[50,105,122,123,124,148],[50,105,113,116,122,123,125,137],[50,62,65,68,69,105,122,123,148],[50,65,105,122,123,137,148],[50,65,69,105,122,123,148],[50,105,122,123,137],[50,59,105,122,123],[50,63,105,122,123],[50,61,62,65,105,122,123,148],[50,105,122,123,125,145],[50,105,122,123,155],[50,59,105,122,123,155],[50,61,65,105,122,123,125,148],[50,56,57,58,60,64,105,116,122,123,137,148],[50,65,74,82,105,122,123],[50,57,63,105,122,123],[50,65,91,92,105,122,123],[50,57,60,65,105,122,123,140,148,155],[50,65,105,122,123],[50,61,65,105,122,123,148],[50,56,105,122,123],[50,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,92,93,94,95,96,105,122,123],[50,65,84,87,105,113,122,123],[50,65,74,75,76,105,122,123],[50,63,65,75,77,105,122,123],[50,64,105,122,123],[50,57,59,65,105,122,123],[50,65,69,75,77,105,122,123],[50,69,105,122,123],[50,63,65,68,105,122,123,148],[50,57,61,65,74,105,122,123],[50,65,84,105,122,123],[50,77,105,122,123],[50,59,65,91,105,122,123,140,153,155],[50,105,122,123,126],[50,105,122,123,127],[50,104,105,122,123,128],[50,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[50,105,122,123,130],[50,105,122,123,131],[50,105,116,122,123,132,133],[50,105,122,123,132,134,149,151],[50,105,117,122,123],[50,105,116,122,123,137,138,140],[50,105,122,123,139,140],[50,105,122,123,137,138],[50,105,122,123,140],[50,105,122,123,141],[50,102,105,122,123,137,142,148],[50,105,116,122,123,143,144],[50,105,122,123,143,144],[50,105,110,122,123,125,137,145],[50,105,122,123,146],[50,105,122,123,125,147],[50,105,119,122,123,131,148],[50,105,110,122,123,149],[50,105,122,123,137,150],[50,105,122,123,124,151],[50,105,122,123,152],[50,105,110,122,123],[50,97,105,122,123],[50,105,122,123,153],[50,97,105,116,118,122,123,128,137,140,148,150,151,153],[50,105,122,123,137,154],[50,105,122,123,157],[50,105,122,123,156],[50,105,122,123,171,174],[50,105,122,123,172],[50,105,122,123,160,173],[50,105,122,123,165,167],[50,105,122,123,165,172,175],[50,105,122,123,164],[50,105,122,123,179,180,181,182,183,185],[50,105,122,123,179,180,181,182],[50,105,122,123,179,180,181,182,183,185,186,187],[50,105,122,123,180],[50,105,122,123,179,180,181],[50,105,117,122,123,126,127],[50,105,122,123,178],[50,105,122,123,178,183],[50,105,122,123,178,188],[50,105,118,122,123,126,127,178,186,187],[50,105,122,123,178,183,188]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"24371e69a38fc33e268d4a8716dbcda430d6c2c414a99ff9669239c4b8f40dea","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"c63b9ada8c72f95aac5db92aea07e5e87ec810353cdf63b2d78f49a58662cf6c","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"1cbdcdef62bf42688e5d825898c3a59458466c48ad8a4ef3f88d8a1cd04310d6","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"67e435fa530778903f5525904e6645b7368eb5ac622055febd19bb399e328ccd","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"5b22bf96be06fca1e134e3a85351ffe7aa2edf0c9a5bd175b7239ee48186dbf5","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"5b48cc670da1dfe926036deaf349085caf822def460a6d50de23f1cc12a5f8cd","impliedFormat":1},{"version":"418f34087d52d001e2688a6282a5de9bf583ff771ed5546af0ae36e4f60a458b","affectsGlobalScope":true,"impliedFormat":1},{"version":"036c9a03b01281f99f8251fdc7088e894566be44b3f139a9d48501a978b611df","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1569ad5969ae0de6ad0bdfaaab0dabcd8878bc3147ab096206eed2019bb84e7f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"42a350ce4f6f291198dc89833afcc4fd078248b4e1fdc9d05c846c66a670f710","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"b03754211d839cdc48979996525a32eb62130682c2f9801dfc2f25533ce7238d","impliedFormat":1},{"version":"3910dab597c40e173bf0e0d419d3ce9682c54ebf6ae84849f9b829b1451a17ec","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"486c074a5c0f2254345c0d1c9540380f5463999e42d7e1a159305ea823d3c4b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"f4d99ac08c4097a3cc202bec2c7198c19dcdd80d4ec6c62d1356b10d03b119d5","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ca77e83162eccec633513723d178d4203bdd5465297267696be08013bab0aa1d","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"f61c153d5abbe4381a1fba0d41be0babdd5de51c626ee7ff14cede14dedc33f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7803171d745ab18e77f16bf82e742268ff72b7f7382ab191e4277527580c2d89","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e9ba65cd3d6d194bdda7343f9f2917f7144ead96a924ca58d1a14919992dc20","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"0b0dfb2d3e8420ead06f6a11acfb02ddcec42257e6ce391993e895ba0af86de4","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"dd5115b329c19c4385af13eda13e3ab03355e711c3f313173fd54ed7d08cfd39","impliedFormat":99},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"e00243d23c495ca2170c9b9e20b5c92331239100b51efdc2b4401cdad859bbef","impliedFormat":1},{"version":"41ea7fd137518560e0d2af581edadadd236b685b5e2f80f083127a28e01cf0ac","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"6fa5d56af71f07dc276aae3f6f30807a9cccf758517fb39742af72e963553d80","impliedFormat":1},{"version":"819dddfec57391f8458929ca8e4377f030d42107ff6ec431e620b70b0695d530","impliedFormat":1},{"version":"701bdef1f4a13932f64c4ce89537f2c66301eb46daf30a16a436c991df568686","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"ac5f598a09eed39b957ae3d909b88126f3faf605bd4589c19e9ae85d23ef71e3","impliedFormat":1},{"version":"92abba98a71c0244a6bcdd3ad4d2e04f1d0a8bcae57d2bb865bf53d1ac86e3d0","impliedFormat":1},{"version":"d2afa0d86bc6f2e72c1cf2ecb2372bf1b0f002493706a81f2b9a3ee4f944e219","impliedFormat":1},{"version":"a4c6c1d6362be3898f007d493d5dd4079be1b2e5b9b0235d7fb1603776f70c33","signature":"aa5bf6559b83d7ea1ca6e9c25d5023889bc675790c0394618d6737b47034c88d"},{"version":"3faab4c171e9087c883642890aca9eebb7a6b7cd8c4e649a74ad813fc63b8064","signature":"c66b21484c525adab03e4508bb41ec6e85c1cfddabdfeb8c8830111a3ca5a340"},{"version":"962484830ac14dd39f731f6662179c07e91079bfa7c51c8e8161155100e9d2ec","signature":"203ea02e5e63347dd75444723b5f7afe01279a2c88d5a3f913646fb9b078e437"},{"version":"fdf53ccd232a5bf55c40b5bf84a18bdeb066c3e812706c59d3185a6309ba301b","signature":"0a99e716dc19b41023dfc452c5dc0f113431e007fef5676b87ed6d0ba3e73ae6"},{"version":"a8527fc329ec9722c7a6f63700dbf381ea5bb0caab11afee3e248c1589e61ba0","signature":"386443026576ffd3abee69067d3bfb9a7431ecef70db5423dd9c63960514574f"},"a4763c81e3ddb14c7881f8749520bceead4644b2afa094c246878ad6b20e40eb",{"version":"76ad5b471368d0da9777645c5985f026a20234f07d6d10c1df15cd7253d58e7a","signature":"a55401e3f4a54ef0f1028385f957fbc8ce99c5e270a31e61b4a7579ef3f9fea5"},{"version":"d70b99ae6c47c24d616ce785a9774b993ab450df2946870b2690121e75d0fd55","signature":"bdaedc05ac0bdb3601d0ae0283bc1f26819dfd508cf33d19126fd61228742157"},{"version":"cdd7abc16df3802139af0a41294aebcd8f48aaf2ea385f774ba88b5b20d2ad16","signature":"d0201f51a5efd0e8b4d39203162de7d4296aea8557ab6c11810d8c8ef970a8cf"},"61c73df1af8c14917cfb2b1b6201d64799bb9dcc0d36783d4511a3763a6615fd",{"version":"1eae6c77db8b8d518b1f9fd014c8042cf58f4cff6cd435cd7fb41e9893f8ac78","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1297f624f2e649bdf426471eb84defe14d988772c2d862a8bd7296d077485740","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e802ea05dd654fc639fa7867aac7def50a52a46e55bcceb0f75427bca03c6382","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"619cd7789fdbfaaa25555de83d6323dcbc7b8ab0bab43d38a86b9b4428c2fe3f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"4e23d76a539f0d4774adcaf10bc144db0fe191910a225ac932d4527a4c36aa09",{"version":"c6ff85f84b43c93a20b42b3c494ecd7ad05630656e766063060c83cb9b2242a9","impliedFormat":1},{"version":"b104e2da53231a529373174880dc0abfbc80184bb473b6bf2a9a0746bebb663d","impliedFormat":99},{"version":"3d4bb4d84af5f0b348f01c85537da1c7afabc174e48806c8b20901377c57b8e4","impliedFormat":99},{"version":"a2500b15294325d9784a342145d16ef13d9efb1c3c6cb4d89934b2c0d521b4ab","impliedFormat":99},{"version":"79d5c409e84764fabdd276976a31928576dcf9aea37be3b5a81f74943f01f3ff","impliedFormat":99},{"version":"8ea020ea63ecc981b9318fc532323e31270c911a7ade4ba74ab902fcf8281c45","impliedFormat":99},{"version":"c81e1a9b03e4de1225b33ac84aaf50a876837057828e0806d025daf919bf2d51","impliedFormat":99},{"version":"bb7264d8bd6152524f2ef5dae5c260ae60d459bf406202258bd0ce57c79e5a6d","impliedFormat":99},{"version":"fb66165c4976bc21a4fde14101e36c43d46f907489b7b6a5f2a2679108335d4a","impliedFormat":99},{"version":"628c2e0a0b61be3e44f296083e6af9b5a9b6881037dd43e7685ee473930a4404","impliedFormat":99},{"version":"4776f1e810184f538d55c5da92da77f491999054a1a1ee69a2d995ab2e8d1bc0","impliedFormat":99},{"version":"11544c4e626eab113df9432e97a371693c98c17ae4291d2ad425af5ef00e580b","impliedFormat":99},{"version":"e1847b81166d25f29213d37115253c5b82ec9ee78f19037592aa173e017636d5","impliedFormat":99},{"version":"fe0bd60f36509711c4a69c0e00c0111f5ecdc685e6c1a2ae99bd4d56c76c07fc","impliedFormat":99},{"version":"b8f3f4ee9aae88a9cec9797d166209eb2a7e4beb8a15e0fc3c8b90c9682c337d","impliedFormat":99},{"version":"ea3c4f5121fe2e86101c155ebe60b435c729027ae50025b2a4e1d12a476002ae","impliedFormat":99},{"version":"372db10bea0dbe1f8588f82b339152b11847e6a4535d57310292660c8a9acfc5","impliedFormat":99},{"version":"6f9fba6349c16eed21d139d5562295e8d5aafa5abe6e8ebcde43615a80c69ac1","impliedFormat":99},{"version":"1474533e27d0e3e45a417ea153d4612f0adbff055f244a29606a1fae6db56cda","impliedFormat":99},{"version":"c7fd8a79d0495955d55bfea34bbdb85235b0f27b417a81afc395655ef43d091d","impliedFormat":99},{"version":"987405949bfafbb1c93d976c3352fe33bfb85303a79fc5d9588b681e4af6c3b3","impliedFormat":99},{"version":"867bc1f5a168fd86d12d828dfafd77c557f13b4326588615b19e301f6856f70c","impliedFormat":99},{"version":"6beddab08d635b4c16409a748dcd8de38a8e444a501b8e79d89f458ae88579d1","impliedFormat":99},{"version":"1dea5c7bf28569228ffcc83e69e1c759e7f0133c232708e09cfa4d7ed3ec7079","impliedFormat":99},{"version":"6114545678bb75e581982c990597ca3ba7eeef185256a14c906edfc949db2cd1","impliedFormat":99},{"version":"5c8625f8dbbd94ab6ca171d621049c810cce4fce6ec1fd1c24c331d9858dce17","impliedFormat":99},{"version":"af36e5f207299ba2013f981dffacd4a04cdce2dd4bd255fff084e7257bf8b947","impliedFormat":99},{"version":"c69c720b733cdaa3b4542f4c1206d9f0fcf3696f87a6e88adb15db6882fbcd69","impliedFormat":99},{"version":"9c37e66916cbbe7d96301934b665ec712679c3cb99081ccaae4034b987533a59","impliedFormat":99},{"version":"2e1a163ab5b5c2640d7f5a100446bbcaeda953a06439c901b2ae307f7088dc30","impliedFormat":99},{"version":"f0b3406d2bc2c262f218c42a125832e026997278a890ef3549fa49e62177ce86","impliedFormat":99},{"version":"756cf223ca25eb36c413b2a286fa108f19a5ac39dc6d65f2c590dc118f6150df","impliedFormat":99},{"version":"70ce03da8740ca786a1a78b8a61394ecf812dd1acf2564d0ce6be5caf29e58d9","impliedFormat":99},{"version":"e0f5707d91bb950edb6338e83dd31b6902b6620018f6aa5fd0f504c2b0ea61f5","impliedFormat":99},{"version":"0dc7ae20eab8097b0c7a48b5833f6329e976f88af26055cdae6337141ff2c12e","impliedFormat":99},{"version":"76b6db79c0f5b326ff98b15829505efd25d36ce436b47fe59781ac9aec0d7f1b","impliedFormat":99},{"version":"786f3f186af874ea3e34c2aeef56a0beab90926350f3375781c0a3aa844cd76e","impliedFormat":99},{"version":"63dbc8fa1dcbfb8af6c48f004a1d31988f42af171596c5cca57e4c9d5000d291","impliedFormat":99},{"version":"aa235b26568b02c10d74007f577e0fa21a266745029f912e4fba2c38705b3abe","impliedFormat":99},{"version":"3d6d570b5f36cf08d9ad8d93db7ddc90fa7ccc0c177de2e9948bb23cde805d32","impliedFormat":99},{"version":"9a60faaa0d582db70f85a94a3439bd83720a9468928b76b4db561a1a0137fa90","impliedFormat":99},{"version":"627e2ac450dcd71bdd8c1614b5d3a02b214ad92a1621ebeb2642dffb9be93715","impliedFormat":99},{"version":"813514ef625cb8fc3befeec97afddfb3b80b80ced859959339d99f3ad538d8fe","impliedFormat":99},{"version":"624f8a7a76f26b9b0af9524e6b7fa50f492655ab7489c3f5f0ddd2de5461b0c3","impliedFormat":99},{"version":"d6b6fa535b18062680e96b2f9336e301312a2f7bdaeb47c4a5b3114c3de0c08b","impliedFormat":99},{"version":"818e8f95d3851073e92bcad7815367dd8337863aaf50d79e703ac479cca0b6a4","impliedFormat":99},{"version":"29b716ff24d0db64060c9a90287f9de2863adf0ef1efef71dbaba33ebc20b390","impliedFormat":99},{"version":"2530c36527a988debd39fed6504d8c51a3e0f356aaf2d270edd492f4223bdeff","impliedFormat":99},{"version":"2553cfd0ec0164f3ea228c5badd1ba78607d034fc2dec96c781026a28095204b","impliedFormat":99},{"version":"6e943693dbc91aa2c6c520e7814316469c8482d5d93df51178d8ded531bb29ee","impliedFormat":99},{"version":"e74e1249b69d9f49a6d9bfa5305f2a9f501e18de6ab0829ab342abf6d55d958b","impliedFormat":99},{"version":"16f60d6924a9e0b4b9961e42b5e586b28ffd57cdfa236ae4408f7bed9855a816","impliedFormat":99},{"version":"493c2d42f1b6cfe3b13358ff3085b90fa9a65d4858ea4d02d43772c0795006ec","impliedFormat":99},{"version":"3702c7cbcd937d7b96e5376fe562fd77b4598fe93c7595ee696ebbfefddac70f","impliedFormat":99},{"version":"848621f6b65b3963f86c51c8b533aea13eadb045da52515e6e1407dea19b8457","impliedFormat":99},{"version":"c15b679c261ce17551e17a40a42934aeba007580357f1a286c79e8e091ee3a76","impliedFormat":99},{"version":"156108cedad653a6277b1cb292b18017195881f5fe837fb7f9678642da8fa8f2","impliedFormat":99},{"version":"0a0bb42c33e9faf63e0b49a429e60533ab392f4f02528732ecbd62cfc2d54c10","impliedFormat":99},{"version":"70fa95cd7cb511e55c9262246de1f35f3966c50e8795a147a93c538db824cdc8","impliedFormat":99},{"version":"bc28d8cec56b5f91c8a2ec131444744b13f63c53ce670cb31d4dffdfc246ba34","impliedFormat":99},{"version":"7bd87c0667376e7d6325ada642ec29bf28e940cb146d21d270cac46b127e5313","impliedFormat":99},{"version":"0318969deede7190dd3567433a24133f709874c5414713aac8b706a5cb0fe347","impliedFormat":99},{"version":"3770586d5263348c664379f748428e6f17e275638f8620a60490548d1fada8b4","impliedFormat":99},{"version":"ff65e6f720ba4bf3da5815ca1c2e0df2ece2911579f307c72f320d692410e03d","impliedFormat":99},{"version":"edb4f17f49580ebcec71e1b7217ad1139a52c575e83f4f126db58438a549b6df","impliedFormat":99},{"version":"353c0cbb6e39e73e12c605f010fddc912c8212158ee0c49a6b2e16ede22cdaab","impliedFormat":99},{"version":"e125fdbea060b339306c30c33597b3c677e00c9e78cd4bf9a15b3fb9474ebb5d","impliedFormat":99},{"version":"ee141f547382d979d56c3b059fc12b01a88b7700d96f085e74268bc79f48c40a","impliedFormat":99},{"version":"1d64132735556e2a1823044b321c929ad4ede45b81f3e04e0e23cf76f4cbf638","impliedFormat":99},{"version":"8b4a3550a3cac035fe928701bc046f5fac76cca32c7851376424b37312f4b4ca","impliedFormat":99},{"version":"5fd7f9b36f48d6308feba95d98817496274be1939a9faa5cd9ed0f8adf3adf3a","impliedFormat":99},{"version":"15a8f79b1557978d752c0be488ee5a70daa389638d79570507a3d4cfc620d49d","impliedFormat":99},{"version":"d4c14ea7d76619ef4244e2c220c2caeec78d10f28e1490eeac89df7d2556b79f","impliedFormat":99},{"version":"8096207a00346207d9baf7bc8f436ef45a20818bf306236a4061d6ccc45b0372","impliedFormat":99},{"version":"040f2531989793c4846be366c100455789834ba420dfd6f36464fe73b68e35b6","impliedFormat":99},{"version":"c5c7020a1d11b7129eb8ddffb7087f59c83161a3792b3560dcd43e7528780ab0","impliedFormat":99},{"version":"d1f97ea020060753089059e9b6de1ab05be4cb73649b595c475e2ec197cbce0f","impliedFormat":99},{"version":"b5ddca6fd676daf45113412aa2b8242b8ee2588e99d68c231ab7cd3d88b392fa","impliedFormat":99},{"version":"77404ec69978995e3278f4a2d42940acbf221da672ae9aba95ffa485d0611859","impliedFormat":99},{"version":"4e6672fb142798b69bcb8d6cd5cc2ec9628dbea9744840ee3599b3dcd7b74b09","impliedFormat":99},{"version":"609653f5b74ef61422271a28dea232207e7ab8ad1446de2d57922e3678160f01","impliedFormat":99},{"version":"9f96251a94fbff4038b464ee2d99614bca48e086e1731ae7a2b5b334826d3a86","impliedFormat":99},{"version":"cacbb7f3e679bdea680c6c609f4403574a5de8b66167b8867967083a40821e2a","impliedFormat":99},{"version":"ee4cf97e8bad27c9e13a17a9f9cbd86b32e9fbc969a5c3f479dafb219209848c","impliedFormat":99},{"version":"3a4e35b6e99ed398e77583ffc17f8774cb4253f8796c0e04ce07c26636fed4a9","impliedFormat":99},{"version":"08d323cb848564baef1ecbe29df14f7ad84e5b2eaf2e02ea8cb422f069dcb2fa","impliedFormat":99},{"version":"a05b53646fa669b87d8b97c1fb7c0183d771680fdd1276b12e68bed4e84cf556","impliedFormat":99},{"version":"c3b9c02a31b36dd3a4067f420316c550f93d463e46b2704391100428e145fd7f","impliedFormat":99},{"version":"b2a4d01fcf005530c3f8689ac0197e5fd6b75eb031e73ca39e5a27d41793a5d8","impliedFormat":99},{"version":"e99d9167596f997dd2da0de0751a9f0e2f4100f07bddf049378719191aee87f6","impliedFormat":99},{"version":"40cc853264e24e0578580194c76e25628acdd1111b54ec8abf59b834c4942839","impliedFormat":99},{"version":"403971c465292dedc8dff308f430c6b69ec5e19ea98d650dae40c70f2399dc14","impliedFormat":99},{"version":"fd3774aa27a30b17935ad360d34570820b26ec70fa5fcfd44c7e884247354d37","impliedFormat":99},{"version":"7b149b38e54fe0149fe500c5d5a049654ce17b1705f6a1f72dd50d84c6a678b9","impliedFormat":99},{"version":"3eb76327823b6288eb4ed4648ebf4e75cf47c6fbc466ed920706b801399f7dc3","impliedFormat":99},{"version":"c6a219d0d39552594a4cc75970768004f99684f28890fc36a42b853af04997b7","impliedFormat":99},{"version":"2110d74b178b022ca8c5ae8dcc46e759c34cf3b7e61cb2f8891fd8d24cb614ef","impliedFormat":99},{"version":"38f5e025404a3108f5bb41e52cead694a86d16ad0005e0ef7718a2a31e959d1e","impliedFormat":99},{"version":"8db133d270ebb1ba3fa8e2c4ab48df2cc79cb03a705d47ca9f959b0756113d3d","impliedFormat":99},{"version":"fc9294185089a62f8287130bc100fa5ab11f3e6af8874127bbdf7600f19913ee","impliedFormat":99},{"version":"f06e5783d10123b74b14e141426a80234b9d6e5ad94bfc4850ea912719f4987c","impliedFormat":99},{"version":"de9466be4b561ad0079ac95ca7445c99fdf45ef115a93af8e2e933194b3cdf4c","impliedFormat":99},{"version":"0c1eed961c15e1242389b0497628709f59d7afd50d5a1955daa10b5bd3b68fc2","impliedFormat":99},{"version":"5e07a9f7f130e5404c202bf7b0625a624c9d266b980576f5d62608ef21d96eab","impliedFormat":99},{"version":"2f97d5063ab69bf32d6417d71765fc154dc6ff7c16700db7c4af5341a965c277","impliedFormat":99},{"version":"a8a9459dd76ef5eeef768da4ce466c5539d73b26334131bd1dd6cbd74ce48fa2","impliedFormat":99},{"version":"123ff203ffba727213e5095b9a59091cdbc9d1d94bae0d6adb98060ef410016c","impliedFormat":99},{"version":"9e4d81dd52d5a8b6c159c0b2f2b5fbe2566f12fcc81f7ba7ebb46ca604657b45","impliedFormat":99},{"version":"9ee245e7c6aa2d81ee0d7f30ff6897334842c469b0e20da24b3cddc6f635cc06","impliedFormat":99},{"version":"e7d5132674ddcd01673b0517eebc44c17f478126284c3eabd0a552514cb992bb","impliedFormat":99},{"version":"a820710a917f66fa88a27564465a033c393e1322a61eb581d1f20e0680b498f1","impliedFormat":99},{"version":"19086752f80202e6a993e2e45c0e7fc7c7fc4315c4805f3464625f54d919fa2e","impliedFormat":99},{"version":"141aebe2ee4fecd417d44cf0dabf6b80592c43164e1fbd9bfaf03a4ec377c18e","impliedFormat":99},{"version":"72c35a5291e2e913387583717521a25d15f1e77d889191440dc855c7e821b451","impliedFormat":99},{"version":"ec1c67b32d477ceeebf18bdeb364646d6572e9dd63bb736f461d7ea8510aca4f","impliedFormat":99},{"version":"fb555843022b96141c2bfaf9adcc3e5e5c2d3f10e2bcbd1b2b666bd701cf9303","impliedFormat":99},{"version":"f851083fc20ecc00ff8aaf91ba9584e924385768940654518705423822de09e8","impliedFormat":99},{"version":"c8d53cdb22eedf9fc0c8e41a1d9a147d7ad8997ed1e306f1216ed4e8daedb6b3","impliedFormat":99},{"version":"6c052f137bab4ba9ed6fd76f88a8d00484df9d5cb921614bb4abe60f51970447","impliedFormat":99},{"version":"e182c297b81a8cb2614ebf5d5d29500987deb641ea310802754d2fec3ef3ff00","impliedFormat":99},{"version":"7d5c2df0c3706f45b77970232aa3a38952561311ccc8fcb7591e1b7a469ad761","impliedFormat":99},{"version":"2c41502b030205006ea3849c83063c4327342fbf925d8ed93b18309428fdd832","impliedFormat":99},{"version":"d12eecede214f8807a719178d7d7e2fc32f227d4705d123c3f45d8a3b5765f38","impliedFormat":99},{"version":"c8893abd114f341b860622b92c9ffc8c9eb9f21f6541bd3cbc9a4aa9b1097e42","impliedFormat":99},{"version":"825674da70d892b7e32c53f844c5dfce5b15ea67ceda4768f752eed2f02d8077","impliedFormat":99},{"version":"2c676d27ef1afbc8f8e514bb46f38550adf177ae9b0102951111116fa7ea2e10","impliedFormat":99},{"version":"a6072f5111ea2058cb4d592a4ee241f88b198498340d9ad036499184f7798ae2","impliedFormat":99},{"version":"ab87c99f96d9b1bf93684b114b27191944fef9a164476f2c6c052b93eaac0a4f","impliedFormat":99},{"version":"13e48eaca1087e1268f172607ae2f39c72c831a482cab597076c6073c97a15e7","impliedFormat":99},{"version":"19597dbe4500c782a4252755510be8324451847354cd8e204079ae81ab8d0ef6","impliedFormat":99},{"version":"f7d487e5f0104f0737951510ea361bc919f5b5f3ebc51807f81ce54934a3556f","impliedFormat":99},{"version":"efa8c5897e0239017e5b53e3f465d106b00d01ee94c9ead378a33284a2998356","impliedFormat":99},{"version":"fe3c53940b26832930246d4c39d6e507c26a86027817882702cf03bff314fa1d","impliedFormat":99},{"version":"53ee33b91d4dc2787eccebdbd396291e063db1405514bb3ab446e1ca3fd81a90","impliedFormat":99},{"version":"c4a97da118b4e6dde7c1daa93c4da17f0c4eedece638fc6dcc84f4eb1d370808","impliedFormat":99},{"version":"71666363fbdb0946bfc38a8056c6010060d1a526c0584145a9560151c6962b4f","impliedFormat":99},{"version":"1326f3630d26716257e09424f33074a945940afd64f2482e2bbc885258fca6bb","impliedFormat":99},{"version":"cc2eb5b23140bbceadf000ef2b71d27ac011d1c325b0fc5ecd42a3221db5fb2e","impliedFormat":99},{"version":"d04f5f3e90755ed40b25ed4c6095b6ad13fc9ce98b34a69c8da5ed38e2dbab5a","impliedFormat":99},{"version":"280b04a2238c0636dad2f25bbbbac18cf7bb933c80e8ec0a44a1d6a9f9d69537","impliedFormat":99},{"version":"0e9a2d784877b62ad97ed31816b1f9992563fdda58380cd696e796022a46bfdf","impliedFormat":99},{"version":"1b1411e7a3729bc632d8c0a4d265de9c6cbba4dc36d679c26dad87507faedee3","impliedFormat":99},{"version":"c478cfb0a2474672343b932ea69da64005bbfc23af5e661b907b0df8eb87bcb7","impliedFormat":99},{"version":"1a7bff494148b6e66642db236832784b8b2c9f5ad9bff82de14bcdb863dadcd9","impliedFormat":99},{"version":"65e6ad2d939dd38d03b157450ba887d2e9c7fd0f8f9d3008c0d1e59a0d8a73b4","impliedFormat":99},{"version":"f72b400dbf8f27adbda4c39a673884cb05daf8e0a1d8152eec2480f5700db36c","impliedFormat":99},{"version":"347f6fe4308288802eb123596ad9caf06755e80cfc7f79bbe56f4141a8ee4c50","impliedFormat":99},{"version":"5f5baa59149d3d6d6cef2c09d46bb4d19beb10d6bee8c05b7850c33535b3c438","impliedFormat":99},{"version":"a8f0c99380c9e91a73ecfc0a8582fbdefde3a1351e748079dc8c0439ea97b6db","impliedFormat":99},{"version":"be02e3c3cb4e187fd252e7ae12f6383f274e82288c8772bb0daf1a4e4af571ad","impliedFormat":99},{"version":"82ca40fb541799273571b011cd9de6ee9b577ef68acc8408135504ae69365b74","impliedFormat":99},{"version":"e671e3fc9b6b2290338352606f6c92e6ecf1a56459c3f885a11080301ca7f8de","impliedFormat":99},{"version":"a2e4b90260194318b1fa1e6b0554d257a0862c10e982c8907d30d1e7f3d463af","impliedFormat":99},{"version":"5559ab4aa1ba9fac7225398231a179d63a4c4dccd982a17f09404b536980dae8","impliedFormat":99},{"version":"2d7b9e1626f44684252d826a8b35770b77ce7c322734a5d3236b629a301efdcf","impliedFormat":99},{"version":"5b8dafbb90924201f655931d429a4eceb055f11c836a6e9cbc7c3aecf735912d","impliedFormat":99},{"version":"0b9be1f90e5e154b61924a28ed2de133fd1115b79c682b1e3988ac810674a5c4","impliedFormat":99},{"version":"7a9477ba5fc17786ee74340780083f39f437904229a0cd57fc9a468fd6567eb8","impliedFormat":99},{"version":"3da1dd252145e279f23d85294399ed2120bf8124ed574d34354a0a313c8554b6","impliedFormat":99},{"version":"e5c4080de46b1a486e25a54ddbb6b859312359f9967a7dc3c9d5cf4676378201","impliedFormat":99},{"version":"cfe1cdf673d2db391fd1a1f123e0e69c7ca06c31d9ac8b35460130c5817c8d29","impliedFormat":99},{"version":"b9701f688042f44529f99fd312c49fea853e66538c19cfcbb9ef024fdb5470cc","impliedFormat":99},{"version":"6daa62c5836cc12561d12220d385a4a243a4a5a89afd6f2e48009a8dd8f0ad83","impliedFormat":99},{"version":"c74550758053cf21f7fea90c7f84fa66c27c5f5ac1eca77ce6c2877dbfdec4d1","impliedFormat":99},{"version":"bd8310114a3a5283faac25bfbfc0d75b685a3a3e0d827ee35d166286bdd4f82e","impliedFormat":99},{"version":"1459ae97d13aeb6e457ccffac1fbb5c5b6d469339729d9ef8aeb8f0355e1e2c9","impliedFormat":99},{"version":"1bf03857edaebf4beba27459edf97f9407467dc5c30195425cb8a5d5a573ea52","impliedFormat":99},{"version":"f6b4833d66c12c9106a3299e520ed46f9a4c443cefc22c993315c4bb97a28db1","impliedFormat":99},{"version":"746c02f8b99bd90c4d135badaab575c6cfce0d030528cf90190c8914b0934ea3","impliedFormat":99},{"version":"a858ba8df5e703977dee467b10af084398919e99c9e42559180e75953a1f6ef6","impliedFormat":99},{"version":"d2dcd6105c195d0409abd475b41363789c63ae633282f04465e291a68a151685","impliedFormat":99},{"version":"0b569ed836f0431c2efaef9b6017e8b700a7fed319866d7667f1189957275045","impliedFormat":99},{"version":"9371612fd8638d7f6a249a14843132e7adb0b5c84edba9ed7905e835b644c013","impliedFormat":99},{"version":"0c72189b6ec67331476a36ec70a2b8ce6468dc4db5d3eb52deb9fefbd6981ebb","impliedFormat":99},{"version":"af8dd6bb70bfcb2c6b2de0d42240c2c952b9040af259a287e78eaf883ef1ce0d","impliedFormat":99},{"version":"7e4a27fd17dbb256314c2513784236f2ae2023573e83d0e65ebddfda336701db","impliedFormat":99},{"version":"131ecac1c7c961041df80a1dc353223af4e658d56ba1516317f79bd5400cffeb","impliedFormat":99},{"version":"f3a55347fb874828e442c2916716d56552ac3478204c29c0d47e698c00eb5d28","impliedFormat":99},{"version":"49ebbdfe7427d784ccdc8325bdecc8dda1719a7881086f14751879b4f8d70c21","impliedFormat":99},{"version":"c1692845412646f17177eb62feb9588c8b5d5013602383f02ae9d38f3915020c","impliedFormat":99},{"version":"b1b440e6c973d920935591a3d360d79090b8cf58947c0230259225b02cf98a83","impliedFormat":99},{"version":"defc2ae12099f46649d12aa4872ce23ba43fba275920c00c398487eaf091bbae","impliedFormat":99},{"version":"620390fbef44884902e4911e7473531e9be4db37eeef2da52a34449d456b4617","impliedFormat":99},{"version":"e60440cbd3ec916bc5f25ada3a6c174619745c38bfca58d3554f7d62905dc376","impliedFormat":99},{"version":"86388eda63dcb65b4982786eec9f80c3ef21ca9fb2808ff58634e712f1f39a27","impliedFormat":99},{"version":"022cd098956e78c9644e4b3ad1fe460fac6914ca9349d6213f518386baf7c96b","impliedFormat":99},{"version":"dfc67e73325643e92f71f94276b5fb3be09c59a1eeee022e76c61ae99f3eda4b","impliedFormat":99},{"version":"8c3d6c9abaa0b383f43cac0c227f063dc4018d851a14b6c2142745a78553c426","impliedFormat":99},{"version":"ee551dc83df0963c1ee03dc32ce36d83b3db9793f50b1686dc57ec2bbffc98af","impliedFormat":99},{"version":"968832c4ffd675a0883e3d208b039f205e881ae0489cc13060274cf12e0e4370","impliedFormat":99},{"version":"c593ca754961cfd13820add8b34da35a114cda7215d214e4177a1b0e1a7f3377","impliedFormat":99},{"version":"ed88c51aa3b33bb2b6a8f2434c34f125946ba7b91ed36973169813fdad57f1ec","impliedFormat":99},{"version":"a9ea477d5607129269848510c2af8bcfd8e262ebfbd6cd33a6c451f0cd8f5257","impliedFormat":99},{"version":"c9b868ce3c992a9f81fa8aa3d7839356d677c3f03c0b4584dce4ecd710ee601b","impliedFormat":1},{"version":"68f7865785fea7b6822ee8b9975b7934f6f6c3a908393ffca96ce3d0f0bc8122","impliedFormat":1},{"version":"3bf23090b94bda18a619623d2652b48ea904e26304267b10fcbdb85e032b7351","impliedFormat":1},{"version":"d4d6aab35ead2fbdafc31c9b0cb8a5b5939c7d24c63356c979757194eaa282cf","impliedFormat":1},{"version":"41e505053447b27c132cab048c148ece25b79d688e7f221e915994c4151dfeec","impliedFormat":1},{"version":"6a2c60605a0cf6b80e7e563159c55ea3c25d32871a9e4c3ec8ec231c2cba5e80","impliedFormat":1},{"version":"3e2f739bdfb6b194ae2af13316b4c5bb18b3fe81ac340288675f92ba2061b370","affectsGlobalScope":true,"impliedFormat":1}],"root":[[179,193]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":99,"outDir":"../..","rootDir":"../../../..","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[170,1],[171,2],[177,3],[169,4],[178,5],[164,6],[165,7],[163,2],[159,2],[161,8],[162,9],[393,10],[194,2],[387,11],[386,12],[197,13],[198,14],[335,13],[336,15],[317,16],[318,17],[201,18],[202,19],[272,20],[273,21],[246,13],[247,22],[240,13],[241,23],[332,24],[330,25],[331,2],[346,26],[347,27],[216,28],[217,29],[348,30],[349,31],[350,32],[351,33],[208,34],[209,35],[334,36],[333,37],[319,13],[320,38],[212,39],[213,40],[236,2],[237,41],[354,42],[352,43],[353,44],[355,45],[356,46],[359,47],[357,48],[360,25],[358,49],[361,50],[364,51],[362,52],[363,53],[365,54],[214,34],[215,55],[340,56],[337,57],[338,58],[339,2],[315,59],[316,60],[260,61],[259,62],[257,63],[256,64],[258,65],[367,66],[366,67],[369,68],[368,69],[245,70],[244,13],[223,71],[221,72],[220,18],[222,73],[372,74],[376,75],[370,76],[371,77],[373,74],[374,74],[375,74],[262,78],[261,18],[278,79],[276,80],[277,25],[274,81],[275,82],[211,83],[210,13],[268,84],[199,13],[200,85],[267,86],[305,87],[308,88],[306,89],[307,90],[219,91],[218,13],[310,92],[309,18],[288,93],[287,13],[243,94],[242,13],[314,95],[313,96],[282,97],[281,98],[279,99],[280,100],[271,101],[270,102],[269,103],[378,104],[377,105],[295,106],[294,107],[293,108],[342,109],[341,2],[286,110],[285,111],[283,112],[284,113],[264,114],[263,18],[207,115],[206,116],[205,117],[204,118],[203,119],[299,120],[298,121],[229,122],[228,18],[233,123],[232,124],[297,125],[296,13],[343,2],[345,126],[344,2],[302,127],[301,128],[300,129],[380,130],[379,131],[382,132],[381,133],[328,134],[329,135],[327,136],[266,137],[265,2],[312,138],[311,139],[239,140],[238,13],[290,141],[289,13],[196,142],[195,2],[249,143],[250,144],[255,145],[248,146],[252,147],[251,148],[253,149],[254,150],[304,151],[303,18],[235,152],[234,18],[385,153],[384,154],[383,155],[322,156],[321,13],[292,157],[291,13],[227,158],[225,159],[224,18],[226,160],[324,161],[323,13],[231,162],[230,13],[326,163],[325,13],[392,164],[389,165],[390,166],[391,167],[388,168],[102,169],[103,169],[104,170],[50,171],[105,172],[106,173],[107,174],[48,2],[108,175],[109,176],[110,177],[111,178],[112,179],[113,180],[114,180],[115,181],[116,182],[117,183],[118,184],[51,2],[49,2],[119,185],[120,186],[121,187],[155,188],[122,189],[123,2],[124,190],[125,191],[74,192],[86,193],[71,194],[87,195],[96,196],[62,197],[63,198],[61,199],[95,200],[90,201],[94,202],[65,203],[83,204],[64,205],[93,206],[59,207],[60,201],[66,208],[67,2],[73,209],[70,208],[57,210],[97,211],[88,212],[77,213],[76,208],[78,214],[81,215],[75,216],[79,217],[91,200],[68,218],[69,219],[82,220],[58,195],[85,221],[84,208],[72,219],[80,222],[89,2],[56,2],[92,223],[126,224],[127,225],[128,226],[129,227],[130,228],[131,229],[132,230],[133,230],[134,231],[135,2],[136,232],[137,233],[139,234],[138,235],[140,236],[141,237],[142,238],[143,239],[144,240],[145,241],[146,242],[147,243],[148,244],[149,245],[150,246],[151,247],[152,248],[52,2],[53,249],[54,2],[55,2],[98,250],[99,251],[100,2],[101,236],[153,252],[154,253],[167,2],[156,2],[158,254],[157,255],[160,2],[175,256],[173,257],[174,258],[168,259],[166,2],[176,260],[172,261],[46,2],[47,2],[9,2],[8,2],[2,2],[10,2],[11,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[3,2],[18,2],[19,2],[4,2],[20,2],[24,2],[21,2],[22,2],[23,2],[25,2],[26,2],[27,2],[5,2],[28,2],[29,2],[30,2],[31,2],[6,2],[35,2],[32,2],[33,2],[34,2],[36,2],[7,2],[37,2],[42,2],[43,2],[38,2],[39,2],[40,2],[41,2],[1,2],[44,2],[45,2],[193,262],[179,2],[183,263],[188,264],[180,2],[181,265],[185,2],[182,266],[186,2],[187,267],[192,268],[184,269],[189,270],[190,271],[191,272]],"affectedFilesPendingEmit":[[193,17],[179,17],[183,17],[188,17],[180,17],[181,17],[185,17],[182,17],[186,17],[187,17],[192,17],[184,17],[189,17],[190,17],[191,17]],"emitSignatures":[179,180,181,182,183,184,185,186,187,188,189,190,191,192,193],"version":"5.9.3"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { HttpShop, NotAuthenticated } from './HttpShop.js';
|
|
2
|
+
export { SHOP_ROUTES } from './routes.js';
|
|
3
|
+
export type { Caller, Role } from './Caller.js';
|
|
4
|
+
export type { BuildVolume, FilamentDemand, Job, JobDetails, JobPhase, JobState, JobsHeld, PrinterOutcome, Verdict } from './Job.js';
|
|
5
|
+
export type { Holding, PrinterApi, PrinterRecord, PrinterStatus, RegisteredPrinter } from './Printer.js';
|
|
6
|
+
export type { PrinterAdded, Shop } from './Shop.js';
|
|
7
|
+
export { DEFAULT_PORT, DEFAULT_SHOP_URL, SHOP_URL_ENV, defaultShopUrl } from './shopUrl.js';
|
|
8
|
+
export { TOKEN_ENV, UnusableToken, defaultToken, defaultTokenFile } from './token.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { HttpShop, NotAuthenticated } from './HttpShop.js';
|
|
2
|
+
export { SHOP_ROUTES } from './routes.js';
|
|
3
|
+
export { DEFAULT_PORT, DEFAULT_SHOP_URL, SHOP_URL_ENV, defaultShopUrl } from './shopUrl.js';
|
|
4
|
+
export { TOKEN_ENV, UnusableToken, defaultToken, defaultTokenFile } from './token.js';
|
package/dist/routes.d.ts
ADDED
package/dist/routes.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// AIDEV-NOTE: the shop answers at the ROOT rather than under a prefix, so anything else serving a
|
|
2
|
+
// page beside it - a dev server, a proxy - has to know which paths are the shop's. That was a list
|
|
3
|
+
// kept by hand in vite.config.ts, and a route added to the contract without being added there was a
|
|
4
|
+
// browser getting index.html back and a page reporting "unexpected character at line 1 column 1",
|
|
5
|
+
// which says nothing about what is wrong. So the list lives here, beside the client that asks for
|
|
6
|
+
// them, and `everyPathHttpShopAsksFor` in the tests fails when one of them is missing.
|
|
7
|
+
/** The first segment of every path this shop answers, for whoever has to route to it. */
|
|
8
|
+
export const SHOP_ROUTES = ['/jobs', '/printers', '/filaments', '/sessions', '/me', '/shutdown'];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const SHOP_URL_ENV = "PRINT_SHOP_URL";
|
|
2
|
+
export declare const DEFAULT_PORT = 7373;
|
|
3
|
+
/** The shop on this machine. What a client falls back to when nobody says where to look. */
|
|
4
|
+
export declare const DEFAULT_SHOP_URL = "http://localhost:7373";
|
|
5
|
+
export declare function defaultShopUrl(): string;
|
package/dist/shopUrl.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// AIDEV-NOTE: the shop on this machine, which is the overwhelmingly likely one. Named like the
|
|
2
|
+
// data root, and for the same reason: `3D_` is not a legal start for an environment variable.
|
|
3
|
+
export const SHOP_URL_ENV = 'PRINT_SHOP_URL';
|
|
4
|
+
export const DEFAULT_PORT = 7373;
|
|
5
|
+
/** The shop on this machine. What a client falls back to when nobody says where to look. */
|
|
6
|
+
export const DEFAULT_SHOP_URL = `http://localhost:${DEFAULT_PORT}`;
|
|
7
|
+
export function defaultShopUrl() {
|
|
8
|
+
return process.env[SHOP_URL_ENV] ?? DEFAULT_SHOP_URL;
|
|
9
|
+
}
|
package/dist/token.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const TOKEN_ENV = "PRINT_SHOP_TOKEN";
|
|
2
|
+
/** A token file somebody other than its owner can read. Refused rather than presented. */
|
|
3
|
+
export declare class UnusableToken extends Error {
|
|
4
|
+
}
|
|
5
|
+
export declare function defaultTokenFile(): string;
|
|
6
|
+
/**
|
|
7
|
+
* The token to present, or undefined when there is none to present - which every shop refuses,
|
|
8
|
+
* because no route there answers a caller it cannot name.
|
|
9
|
+
*
|
|
10
|
+
* Read synchronously and once: every caller needs it before its first request, and a token that
|
|
11
|
+
* changed part way through a run would be worse than one that did not.
|
|
12
|
+
*/
|
|
13
|
+
export declare function defaultToken(): string | undefined;
|
package/dist/token.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
export const TOKEN_ENV = 'PRINT_SHOP_TOKEN';
|
|
5
|
+
/** A token file somebody other than its owner can read. Refused rather than presented. */
|
|
6
|
+
export class UnusableToken extends Error {
|
|
7
|
+
}
|
|
8
|
+
// AIDEV-NOTE: a caller's own token, and nothing like the shop's /etc files - it is ONE string, it
|
|
9
|
+
// belongs to whoever is calling rather than to the machine, and the caller is often not on the same
|
|
10
|
+
// machine at all. The environment suits a program; the file suits a person's shell, where an
|
|
11
|
+
// environment variable would have to be set by something.
|
|
12
|
+
export function defaultTokenFile() {
|
|
13
|
+
const configured = process.env.XDG_CONFIG_HOME;
|
|
14
|
+
return path.join(configured ?? path.join(homedir(), '.config'), '3d-print-shop', 'token');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The token to present, or undefined when there is none to present - which every shop refuses,
|
|
18
|
+
* because no route there answers a caller it cannot name.
|
|
19
|
+
*
|
|
20
|
+
* Read synchronously and once: every caller needs it before its first request, and a token that
|
|
21
|
+
* changed part way through a run would be worse than one that did not.
|
|
22
|
+
*/
|
|
23
|
+
export function defaultToken() {
|
|
24
|
+
const said = process.env[TOKEN_ENV]?.trim();
|
|
25
|
+
if (said !== undefined && said !== '')
|
|
26
|
+
return said;
|
|
27
|
+
// The file is only judged when it is the thing being used. An environment that named a token has
|
|
28
|
+
// already answered, and what a file nobody is reading is set to is nobody's business.
|
|
29
|
+
const file = defaultTokenFile();
|
|
30
|
+
const found = whatIsThere(file);
|
|
31
|
+
if (found === undefined)
|
|
32
|
+
return undefined;
|
|
33
|
+
requireOnlyItsOwnerCanRead(file, found.mode);
|
|
34
|
+
try {
|
|
35
|
+
const held = readFileSync(file, 'utf-8').trim();
|
|
36
|
+
return held === '' ? undefined : held;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Not there is no token, which is what it has always been - and so is a directory this cannot look
|
|
43
|
+
// into. Neither is a thing to complain about; what is, is a file that IS there and is open to others.
|
|
44
|
+
function whatIsThere(file) {
|
|
45
|
+
try {
|
|
46
|
+
return statSync(file, { throwIfNoEntry: false });
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// AIDEV-NOTE: the mode is checked rather than assumed, the way ssh refuses a private key anyone can
|
|
53
|
+
// read and the way the shop refuses its own credential files - see `readOnlyByItsOwner` in the
|
|
54
|
+
// server's credentials.ts, which says the same thing about the files at the other end. What is in
|
|
55
|
+
// here is a BEARER credential: whoever presents it is that caller with that caller's role, and on an
|
|
56
|
+
// ordinary install it is the first admin's, which is every printer and every job and the power to
|
|
57
|
+
// stop the shop. So a file left 0644 by a stray redirect hands all of that to any account on the
|
|
58
|
+
// machine, silently, while every command still works - and the installer already tells whoever pastes
|
|
59
|
+
// a token in here to chmod it 600.
|
|
60
|
+
//
|
|
61
|
+
// Refused rather than ignored. Ignoring it would answer 401 - "this shop does not know that token" -
|
|
62
|
+
// with the right token sitting on disk, which sends somebody looking anywhere but at the mode.
|
|
63
|
+
//
|
|
64
|
+
// Group and other, not owner: what matters is that nobody ELSE can read it.
|
|
65
|
+
function requireOnlyItsOwnerCanRead(file, mode) {
|
|
66
|
+
if ((mode & 0o077) === 0)
|
|
67
|
+
return;
|
|
68
|
+
throw new UnusableToken(`${file} can be read by somebody other than its owner (mode ${(mode & 0o777).toString(8)}) - ` +
|
|
69
|
+
`it is the token this shop knows you by, so it must be 0600: chmod 600 ${file}`);
|
|
70
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@3d-print-shop/client",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"files": [
|
|
6
|
+
"dist"
|
|
7
|
+
],
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./browser": {
|
|
19
|
+
"import": "./dist/browser.js",
|
|
20
|
+
"types": "./dist/browser.d.ts"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p tests/tsconfig.json",
|
|
26
|
+
"test": "echo \"tests run from root\" && exit 0"
|
|
27
|
+
},
|
|
28
|
+
"author": "dcorbin",
|
|
29
|
+
"license": "PolyForm-Noncommercial-1.0.0",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/dcorbin-apps/3d-print-shop.git",
|
|
33
|
+
"directory": "packages/client"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"typescript": "^5.9.3"
|
|
37
|
+
}
|
|
38
|
+
}
|