@toa.io/origin 1.0.0 → 1.2.2
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/.vscode/settings.json +8 -1
- package/CHANGELOG.md +28 -0
- package/README.md +8 -30
- package/eslint.config.js +3 -5
- package/package.json +1 -1
- package/source/Agent.ts +156 -0
- package/source/Error.ts +3 -0
- package/source/Evt.ts +3 -0
- package/source/Octets.ts +5 -6
- package/source/Origin.ts +47 -0
- package/source/Resource.ts +41 -16
- package/source/index.ts +3 -6
- package/transpiled/Agent.d.ts +30 -0
- package/transpiled/Agent.js +102 -0
- package/transpiled/Agent.js.map +1 -0
- package/transpiled/Error.d.ts +2 -0
- package/transpiled/Error.js +2 -0
- package/transpiled/Error.js.map +1 -0
- package/transpiled/Evt.d.ts +8 -0
- package/transpiled/Evt.js +2 -0
- package/transpiled/Evt.js.map +1 -0
- package/transpiled/Octets.d.ts +4 -7
- package/transpiled/Origin.d.ts +18 -0
- package/transpiled/Origin.js +32 -0
- package/transpiled/Origin.js.map +1 -0
- package/transpiled/Resource.d.ts +16 -9
- package/transpiled/Resource.js +22 -13
- package/transpiled/Resource.js.map +1 -1
- package/transpiled/index.d.ts +3 -6
- package/transpiled/index.js +1 -5
- package/transpiled/index.js.map +1 -1
- package/tsconfig.json +3 -5
- package/source/Failure.ts +0 -3
- package/source/Method.ts +0 -99
- package/source/events.ts +0 -20
- package/source/fail.ts +0 -13
- package/source/ok.ts +0 -15
- package/source/request.ts +0 -84
- package/transpiled/Failure.d.ts +0 -3
- package/transpiled/Failure.js +0 -4
- package/transpiled/Failure.js.map +0 -1
- package/transpiled/Method.d.ts +0 -15
- package/transpiled/Method.js +0 -71
- package/transpiled/Method.js.map +0 -1
- package/transpiled/events.d.ts +0 -15
- package/transpiled/events.js +0 -3
- package/transpiled/events.js.map +0 -1
- package/transpiled/fail.d.ts +0 -2
- package/transpiled/fail.js +0 -10
- package/transpiled/fail.js.map +0 -1
- package/transpiled/ok.d.ts +0 -1
- package/transpiled/ok.js +0 -17
- package/transpiled/ok.js.map +0 -1
- package/transpiled/request.d.ts +0 -15
- package/transpiled/request.js +0 -52
- package/transpiled/request.js.map +0 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import mitt from 'mitt';
|
|
2
|
+
import { Agent } from './Agent';
|
|
3
|
+
import { Resource } from './Resource';
|
|
4
|
+
/** Resoruce factory */
|
|
5
|
+
class Origin {
|
|
6
|
+
events;
|
|
7
|
+
agent;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.events = mitt();
|
|
10
|
+
this.agent = new Agent({
|
|
11
|
+
origin: options.origin,
|
|
12
|
+
events: this.events,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
resource(path) {
|
|
16
|
+
return new Resource({
|
|
17
|
+
agent: this.agent,
|
|
18
|
+
path,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
authenticate(challenge) {
|
|
22
|
+
this.agent.authenticate(challenge);
|
|
23
|
+
}
|
|
24
|
+
use(fetch) {
|
|
25
|
+
this.agent.use(fetch);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function connect(options) {
|
|
29
|
+
return new Origin(options);
|
|
30
|
+
}
|
|
31
|
+
export { connect };
|
|
32
|
+
//# sourceMappingURL=Origin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Origin.js","sourceRoot":"","sources":["../source/Origin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,uBAAuB;AACvB,MAAM,MAAM;IACM,MAAM,CAAiB;IACtB,KAAK,CAAO;IAE7B,YAAY,OAAgB;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,EAAU,CAAA;QAE5B,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAA;IACJ,CAAC;IAEM,QAAQ,CAAc,IAAY;QACvC,OAAO,IAAI,QAAQ,CAAI;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI;SACL,CAAC,CAAA;IACJ,CAAC;IAEM,YAAY,CAAC,SAAwB;QAC1C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;IACpC,CAAC;IAEM,GAAG,CAAC,KAAY;QACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;CACF;AAED,SAAS,OAAO,CAAC,OAAgB;IAC/B,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AAQD,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
package/transpiled/Resource.d.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import type { Agent, Init } from './Agent';
|
|
2
|
+
import type { GenericError } from './Error';
|
|
3
|
+
import type { Faulty, OctetsEntry } from './Octets';
|
|
4
|
+
import type { Emitter } from 'mitt';
|
|
5
|
+
declare class Resource<T = unknown, E extends GenericError = GenericError> {
|
|
6
|
+
private readonly agent;
|
|
7
|
+
private readonly path;
|
|
8
|
+
constructor(options: Options);
|
|
9
|
+
json<R = T, F extends E = E>(rel?: string, init?: Init): Promise<R | F>;
|
|
10
|
+
octets<T extends Record<string, unknown> = Record<string, unknown>, F extends E = E>(rel?: string, init?: Init): Promise<[OctetsEntry, Emitter<Faulty<T>>] | F>;
|
|
11
|
+
private abs;
|
|
10
12
|
}
|
|
13
|
+
interface Options {
|
|
14
|
+
agent: Agent;
|
|
15
|
+
path: string;
|
|
16
|
+
}
|
|
17
|
+
export { Resource };
|
package/transpiled/Resource.js
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
this.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
class Resource {
|
|
2
|
+
agent;
|
|
3
|
+
path;
|
|
4
|
+
constructor(options) {
|
|
5
|
+
this.agent = options.agent;
|
|
6
|
+
this.path = options.path;
|
|
7
|
+
}
|
|
8
|
+
async json(rel = '', init) {
|
|
9
|
+
const abs = this.abs(rel);
|
|
10
|
+
return await this.agent.json(abs, init);
|
|
11
|
+
}
|
|
12
|
+
async octets(rel = '', init) {
|
|
13
|
+
const abs = this.abs(rel);
|
|
14
|
+
return await this.agent.octets(abs, init);
|
|
15
|
+
}
|
|
16
|
+
abs(rel) {
|
|
17
|
+
const base = new URL(this.path, 'uri://void');
|
|
18
|
+
const url = new URL(rel, base);
|
|
19
|
+
if (!url.pathname.endsWith('/'))
|
|
20
|
+
url.pathname += '/';
|
|
21
|
+
return url.pathname + url.search;
|
|
14
22
|
}
|
|
15
23
|
}
|
|
24
|
+
export { Resource };
|
|
16
25
|
//# sourceMappingURL=Resource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Resource.js","sourceRoot":"","sources":["../source/Resource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Resource.js","sourceRoot":"","sources":["../source/Resource.ts"],"names":[],"mappings":"AAKA,MAAM,QAAQ;IACK,KAAK,CAAO;IACZ,IAAI,CAAQ;IAE7B,YAAmB,OAAgB;QACjC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAC1B,CAAC;IAEM,KAAK,CAAC,IAAI,CAAyB,MAAc,EAAE,EAAE,IAAW;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAEzB,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAO,GAAG,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC;IAEM,KAAK,CAAC,MAAM,CAA+E,MAAc,EAAE,EAAE,IAAW;QAC7H,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAEzB,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAO,GAAG,EAAE,IAAI,CAAC,CAAA;IACjD,CAAC;IAEO,GAAG,CAAC,GAAW;QACrB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAE9B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7B,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAA;QAErB,OAAO,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAA;IAClC,CAAC;CACF;AAOD,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
package/transpiled/index.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export { authenticate, request, use, connect, type Options } from './request';
|
|
5
|
-
export { events } from './events';
|
|
6
|
-
export type * from './Octets';
|
|
1
|
+
export { connect } from './Origin';
|
|
2
|
+
export type { GenericError } from './Error';
|
|
3
|
+
export type { OctetsEntry, WorkflowStep } from './Octets';
|
package/transpiled/index.js
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { Method } from './Method';
|
|
3
|
-
export { Failure } from './Failure';
|
|
4
|
-
export { authenticate, request, use, connect } from './request';
|
|
5
|
-
export { events } from './events';
|
|
1
|
+
export { connect } from './Origin';
|
|
6
2
|
//# sourceMappingURL=index.js.map
|
package/transpiled/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA"}
|
package/tsconfig.json
CHANGED
|
@@ -3,19 +3,17 @@
|
|
|
3
3
|
"compilerOptions": {
|
|
4
4
|
"outDir": "./transpiled",
|
|
5
5
|
"rootDir": "./source",
|
|
6
|
-
"moduleResolution": "bundler",
|
|
7
|
-
"module": "esnext",
|
|
8
|
-
"target": "esnext",
|
|
9
6
|
"sourceMap": true,
|
|
10
7
|
"declaration": true,
|
|
11
8
|
"esModuleInterop": true,
|
|
12
9
|
"skipLibCheck": true,
|
|
13
10
|
"incremental": true,
|
|
14
11
|
"strict": true,
|
|
15
|
-
"experimentalDecorators": true,
|
|
16
12
|
"noImplicitOverride": true,
|
|
17
13
|
"allowJs": true,
|
|
18
|
-
"
|
|
14
|
+
"module": "ESNext",
|
|
15
|
+
"target": "ES2022",
|
|
16
|
+
"moduleResolution": "node"
|
|
19
17
|
},
|
|
20
18
|
"include": [
|
|
21
19
|
"source/**/*"
|
package/source/Failure.ts
DELETED
package/source/Method.ts
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { Err } from 'error-value'
|
|
2
|
-
import mitt, { type Emitter } from 'mitt'
|
|
3
|
-
import { request, type Options } from './request'
|
|
4
|
-
import type { Failure } from './Failure'
|
|
5
|
-
import type { OctetsEntry, WorkflowStep } from './Octets'
|
|
6
|
-
|
|
7
|
-
export class Method<Entity = never> {
|
|
8
|
-
private readonly base: string
|
|
9
|
-
private readonly options?: Options
|
|
10
|
-
|
|
11
|
-
constructor(base: string, options?: Options) {
|
|
12
|
-
this.base = base
|
|
13
|
-
this.options = options
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
public async none(segments?: string[] | string, options?: Options): Promise<void | Failure> {
|
|
17
|
-
return await this.request(segments, options)
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
public async value<T = Entity>(segments?: string[] | string, options?: Options): Promise<T | Failure> {
|
|
21
|
-
return await this.request<T>(segments, options)
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
public async array<T = Entity[]>(segments?: string[] | string, options?: Options): Promise<T[] | Failure> {
|
|
25
|
-
return await this.request<T[]>(segments, options)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
public async multipart<T = Entity>(
|
|
29
|
-
segments?: string[] | string,
|
|
30
|
-
options?: Options
|
|
31
|
-
): Promise<AsyncGenerator<T, void, undefined> | Failure> {
|
|
32
|
-
const generator = await this.request<AsyncGenerator<{ body: string }>>(segments, options)
|
|
33
|
-
|
|
34
|
-
if (generator instanceof Error) return generator
|
|
35
|
-
|
|
36
|
-
const ack = await generator.next()
|
|
37
|
-
|
|
38
|
-
if (JSON.parse(ack.value.body) !== 'ACK') throw new Error('No ACK')
|
|
39
|
-
|
|
40
|
-
return (async function * () {
|
|
41
|
-
for await (const chunk of generator) {
|
|
42
|
-
const value = JSON.parse(chunk.body)
|
|
43
|
-
|
|
44
|
-
if (value === 'FIN') return
|
|
45
|
-
|
|
46
|
-
yield value
|
|
47
|
-
}
|
|
48
|
-
})()
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
public async octets<Events extends Record<string, unknown>>(
|
|
52
|
-
segments?: string[],
|
|
53
|
-
options?: Options
|
|
54
|
-
): Promise<[OctetsEntry, Emitter<Events>] | Failure> {
|
|
55
|
-
const generator = await this.multipart(segments, options)
|
|
56
|
-
|
|
57
|
-
if (generator instanceof Error) return generator
|
|
58
|
-
|
|
59
|
-
const chunk = await generator.next()
|
|
60
|
-
const entry = chunk.value as OctetsEntry
|
|
61
|
-
const emitter = mitt<Events>()
|
|
62
|
-
|
|
63
|
-
void (async () => {
|
|
64
|
-
for await (const part of generator) {
|
|
65
|
-
const workflow = part as WorkflowStep
|
|
66
|
-
|
|
67
|
-
console.debug('octets chunk:', workflow)
|
|
68
|
-
|
|
69
|
-
const payload =
|
|
70
|
-
workflow.error === undefined
|
|
71
|
-
? workflow.output
|
|
72
|
-
: new Err(workflow.error.code, workflow.error.message)
|
|
73
|
-
|
|
74
|
-
emitter.emit(workflow.step, payload as Events[typeof workflow.step])
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
emitter.off('*')
|
|
78
|
-
})()
|
|
79
|
-
|
|
80
|
-
return [entry, emitter]
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
private async request<T>(segments?: string | string[], options?: Options): Promise<T | Failure> {
|
|
84
|
-
const path = toPath(segments)
|
|
85
|
-
|
|
86
|
-
return await request<T>(`${this.base}${path}`, {
|
|
87
|
-
...this.options,
|
|
88
|
-
...options
|
|
89
|
-
})
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function toPath(segments: string | string[] | undefined): string {
|
|
94
|
-
if (segments === undefined) return ''
|
|
95
|
-
|
|
96
|
-
if (typeof segments === 'string') return segments
|
|
97
|
-
|
|
98
|
-
return segments.filter((s) => s !== undefined).join('/') + '/'
|
|
99
|
-
}
|
package/source/events.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import mitt from 'mitt'
|
|
2
|
-
import type { Options } from './request'
|
|
3
|
-
|
|
4
|
-
export const events = mitt<Events>()
|
|
5
|
-
|
|
6
|
-
export interface Events extends Record<string | symbol, unknown> {
|
|
7
|
-
challenge: string
|
|
8
|
-
|
|
9
|
-
request: {
|
|
10
|
-
id: string
|
|
11
|
-
path: string
|
|
12
|
-
options: Options
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
response: {
|
|
16
|
-
id: string
|
|
17
|
-
response: Response
|
|
18
|
-
duration: number
|
|
19
|
-
}
|
|
20
|
-
}
|
package/source/fail.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Failure } from './Failure'
|
|
2
|
-
import { events } from './events'
|
|
3
|
-
|
|
4
|
-
export async function fail(response: Response): Promise<Failure> {
|
|
5
|
-
const payload =
|
|
6
|
-
response.headers.get('content-type') === 'application/json'
|
|
7
|
-
? await response.json()
|
|
8
|
-
: await response.text()
|
|
9
|
-
|
|
10
|
-
events.emit(response.status, payload)
|
|
11
|
-
|
|
12
|
-
return new Failure(response.status)
|
|
13
|
-
}
|
package/source/ok.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { meros } from 'meros/browser'
|
|
2
|
-
import { events } from './events'
|
|
3
|
-
|
|
4
|
-
export async function ok<T>(response: Response): Promise<T> {
|
|
5
|
-
const challenge = response.headers.get('authorization')
|
|
6
|
-
|
|
7
|
-
if (challenge !== null) events.emit('challenge', challenge)
|
|
8
|
-
|
|
9
|
-
const type = response.headers.get('content-type')
|
|
10
|
-
|
|
11
|
-
if (type?.startsWith('multipart/')) return (await meros(response)) as T
|
|
12
|
-
else if (type === 'application/json') return (await response.json()) as T
|
|
13
|
-
else if (type?.startsWith('text/')) return (await response.text()) as T
|
|
14
|
-
else return (await response.blob()) as T
|
|
15
|
-
}
|
package/source/request.ts
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { events } from './events'
|
|
2
|
-
import { fail } from './fail'
|
|
3
|
-
import { ok } from './ok'
|
|
4
|
-
import type { Failure } from './Failure'
|
|
5
|
-
|
|
6
|
-
let challenge: string | null = null
|
|
7
|
-
|
|
8
|
-
export function authenticate(value: string | null) {
|
|
9
|
-
challenge = value
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
let _fetch = fetch
|
|
13
|
-
|
|
14
|
-
export function use(fetcher: typeof fetch) {
|
|
15
|
-
_fetch = fetcher
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
interface Settings {
|
|
19
|
-
origin: string
|
|
20
|
-
delay?: number
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const settings: Partial<Settings> = {} as const
|
|
24
|
-
|
|
25
|
-
export function connect(values: Settings) {
|
|
26
|
-
Object.assign(settings, values)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export async function request<T = unknown>(
|
|
30
|
-
path: string,
|
|
31
|
-
options: Options = {}
|
|
32
|
-
): Promise<T | Failure> {
|
|
33
|
-
if (settings.origin === undefined)
|
|
34
|
-
throw new Error('Origin not connected')
|
|
35
|
-
|
|
36
|
-
options.headers ??= {}
|
|
37
|
-
options.headers['accept'] ??= 'application/json'
|
|
38
|
-
|
|
39
|
-
if (settings.delay)
|
|
40
|
-
options.headers['sleep'] = Math.round((Math.random() * settings.delay) / 2 + settings.delay / 2).toString()
|
|
41
|
-
|
|
42
|
-
const authentication = options.credentials === 'include'
|
|
43
|
-
|
|
44
|
-
if (options.body !== undefined)
|
|
45
|
-
if (options.body instanceof File || options.body instanceof ReadableStream) {
|
|
46
|
-
options.method ??= 'POST'
|
|
47
|
-
options.duplex = 'half'
|
|
48
|
-
options.headers['content-type'] ??= (options.body as File).type ?? 'application/octet-stream'
|
|
49
|
-
} else {
|
|
50
|
-
options.body = JSON.stringify(options.body)
|
|
51
|
-
options.headers['content-type'] ??= 'application/json'
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (authentication && options.headers['authorization'] === undefined) {
|
|
55
|
-
if (challenge === null)
|
|
56
|
-
throw new Error(`Credentials must be set before sending authenticated request ${options.method ?? 'GET'} ${path}`)
|
|
57
|
-
|
|
58
|
-
options.headers['authorization'] = challenge
|
|
59
|
-
delete options.credentials // no cookies
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const start = performance.now()
|
|
63
|
-
|
|
64
|
-
const id =
|
|
65
|
-
typeof window !== 'undefined' && (window.crypto.randomUUID?.() ?? Math.random().toString())
|
|
66
|
-
|
|
67
|
-
if (id)
|
|
68
|
-
events.emit('request', { id, path, options })
|
|
69
|
-
|
|
70
|
-
const response = await _fetch(settings.origin + path, options)
|
|
71
|
-
|
|
72
|
-
if (id)
|
|
73
|
-
events.emit('response', { id, response, duration: performance.now() - start })
|
|
74
|
-
|
|
75
|
-
if (!response.ok) return await fail(response)
|
|
76
|
-
else return await ok<T>(response)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export interface Options extends Omit<RequestInit, 'headers'> {
|
|
80
|
-
duplex?: 'half'
|
|
81
|
-
|
|
82
|
-
body?: any
|
|
83
|
-
headers?: Record<string, string>
|
|
84
|
-
}
|
package/transpiled/Failure.d.ts
DELETED
package/transpiled/Failure.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Failure.js","sourceRoot":"","sources":["../source/Failure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,MAAM,OAAO,OAAQ,SAAQ,GAAW;CAAG"}
|
package/transpiled/Method.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type Emitter } from 'mitt';
|
|
2
|
-
import { type Options } from './request';
|
|
3
|
-
import type { Failure } from './Failure';
|
|
4
|
-
import type { OctetsEntry } from './Octets';
|
|
5
|
-
export declare class Method<Entity = never> {
|
|
6
|
-
private readonly base;
|
|
7
|
-
private readonly options?;
|
|
8
|
-
constructor(base: string, options?: Options);
|
|
9
|
-
none(segments?: string[] | string, options?: Options): Promise<void | Failure>;
|
|
10
|
-
value<T = Entity>(segments?: string[] | string, options?: Options): Promise<T | Failure>;
|
|
11
|
-
array<T = Entity[]>(segments?: string[] | string, options?: Options): Promise<T[] | Failure>;
|
|
12
|
-
multipart<T = Entity>(segments?: string[] | string, options?: Options): Promise<AsyncGenerator<T, void, undefined> | Failure>;
|
|
13
|
-
octets<Events extends Record<string, unknown>>(segments?: string[], options?: Options): Promise<[OctetsEntry, Emitter<Events>] | Failure>;
|
|
14
|
-
private request;
|
|
15
|
-
}
|
package/transpiled/Method.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { Err } from 'error-value';
|
|
2
|
-
import mitt from 'mitt';
|
|
3
|
-
import { request } from './request';
|
|
4
|
-
export class Method {
|
|
5
|
-
base;
|
|
6
|
-
options;
|
|
7
|
-
constructor(base, options) {
|
|
8
|
-
this.base = base;
|
|
9
|
-
this.options = options;
|
|
10
|
-
}
|
|
11
|
-
async none(segments, options) {
|
|
12
|
-
return await this.request(segments, options);
|
|
13
|
-
}
|
|
14
|
-
async value(segments, options) {
|
|
15
|
-
return await this.request(segments, options);
|
|
16
|
-
}
|
|
17
|
-
async array(segments, options) {
|
|
18
|
-
return await this.request(segments, options);
|
|
19
|
-
}
|
|
20
|
-
async multipart(segments, options) {
|
|
21
|
-
const generator = await this.request(segments, options);
|
|
22
|
-
if (generator instanceof Error)
|
|
23
|
-
return generator;
|
|
24
|
-
const ack = await generator.next();
|
|
25
|
-
if (JSON.parse(ack.value.body) !== 'ACK')
|
|
26
|
-
throw new Error('No ACK');
|
|
27
|
-
return (async function* () {
|
|
28
|
-
for await (const chunk of generator) {
|
|
29
|
-
const value = JSON.parse(chunk.body);
|
|
30
|
-
if (value === 'FIN')
|
|
31
|
-
return;
|
|
32
|
-
yield value;
|
|
33
|
-
}
|
|
34
|
-
})();
|
|
35
|
-
}
|
|
36
|
-
async octets(segments, options) {
|
|
37
|
-
const generator = await this.multipart(segments, options);
|
|
38
|
-
if (generator instanceof Error)
|
|
39
|
-
return generator;
|
|
40
|
-
const chunk = await generator.next();
|
|
41
|
-
const entry = chunk.value;
|
|
42
|
-
const emitter = mitt();
|
|
43
|
-
void (async () => {
|
|
44
|
-
for await (const part of generator) {
|
|
45
|
-
const workflow = part;
|
|
46
|
-
console.debug('octets chunk:', workflow);
|
|
47
|
-
const payload = workflow.error === undefined
|
|
48
|
-
? workflow.output
|
|
49
|
-
: new Err(workflow.error.code, workflow.error.message);
|
|
50
|
-
emitter.emit(workflow.step, payload);
|
|
51
|
-
}
|
|
52
|
-
emitter.off('*');
|
|
53
|
-
})();
|
|
54
|
-
return [entry, emitter];
|
|
55
|
-
}
|
|
56
|
-
async request(segments, options) {
|
|
57
|
-
const path = toPath(segments);
|
|
58
|
-
return await request(`${this.base}${path}`, {
|
|
59
|
-
...this.options,
|
|
60
|
-
...options
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
function toPath(segments) {
|
|
65
|
-
if (segments === undefined)
|
|
66
|
-
return '';
|
|
67
|
-
if (typeof segments === 'string')
|
|
68
|
-
return segments;
|
|
69
|
-
return segments.filter((s) => s !== undefined).join('/') + '/';
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=Method.js.map
|
package/transpiled/Method.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Method.js","sourceRoot":"","sources":["../source/Method.ts"],"names":[],"mappings":"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"}
|
package/transpiled/events.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Options } from './request';
|
|
2
|
-
export declare const events: import("mitt").Emitter<Events>;
|
|
3
|
-
export interface Events extends Record<string | symbol, unknown> {
|
|
4
|
-
challenge: string;
|
|
5
|
-
request: {
|
|
6
|
-
id: string;
|
|
7
|
-
path: string;
|
|
8
|
-
options: Options;
|
|
9
|
-
};
|
|
10
|
-
response: {
|
|
11
|
-
id: string;
|
|
12
|
-
response: Response;
|
|
13
|
-
duration: number;
|
|
14
|
-
};
|
|
15
|
-
}
|
package/transpiled/events.js
DELETED
package/transpiled/events.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../source/events.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,EAAU,CAAA"}
|
package/transpiled/fail.d.ts
DELETED
package/transpiled/fail.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Failure } from './Failure';
|
|
2
|
-
import { events } from './events';
|
|
3
|
-
export async function fail(response) {
|
|
4
|
-
const payload = response.headers.get('content-type') === 'application/json'
|
|
5
|
-
? await response.json()
|
|
6
|
-
: await response.text();
|
|
7
|
-
events.emit(response.status, payload);
|
|
8
|
-
return new Failure(response.status);
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=fail.js.map
|
package/transpiled/fail.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fail.js","sourceRoot":"","sources":["../source/fail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,QAAkB;IAC3C,MAAM,OAAO,GACX,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,kBAAkB;QACzD,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE;QACvB,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAE3B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAErC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACrC,CAAC"}
|
package/transpiled/ok.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function ok<T>(response: Response): Promise<T>;
|
package/transpiled/ok.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { meros } from 'meros/browser';
|
|
2
|
-
import { events } from './events';
|
|
3
|
-
export async function ok(response) {
|
|
4
|
-
const challenge = response.headers.get('authorization');
|
|
5
|
-
if (challenge !== null)
|
|
6
|
-
events.emit('challenge', challenge);
|
|
7
|
-
const type = response.headers.get('content-type');
|
|
8
|
-
if (type?.startsWith('multipart/'))
|
|
9
|
-
return (await meros(response));
|
|
10
|
-
else if (type === 'application/json')
|
|
11
|
-
return (await response.json());
|
|
12
|
-
else if (type?.startsWith('text/'))
|
|
13
|
-
return (await response.text());
|
|
14
|
-
else
|
|
15
|
-
return (await response.blob());
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=ok.js.map
|
package/transpiled/ok.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ok.js","sourceRoot":"","sources":["../source/ok.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAI,QAAkB;IAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAEvD,IAAI,SAAS,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IAE3D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAEjD,IAAI,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAM,CAAA;SAClE,IAAI,IAAI,KAAK,kBAAkB;QAAE,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAA;SACpE,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAA;;QAClE,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAA;AAC1C,CAAC"}
|
package/transpiled/request.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Failure } from './Failure';
|
|
2
|
-
export declare function authenticate(value: string | null): void;
|
|
3
|
-
export declare function use(fetcher: typeof fetch): void;
|
|
4
|
-
interface Settings {
|
|
5
|
-
origin: string;
|
|
6
|
-
delay?: number;
|
|
7
|
-
}
|
|
8
|
-
export declare function connect(values: Settings): void;
|
|
9
|
-
export declare function request<T = unknown>(path: string, options?: Options): Promise<T | Failure>;
|
|
10
|
-
export interface Options extends Omit<RequestInit, 'headers'> {
|
|
11
|
-
duplex?: 'half';
|
|
12
|
-
body?: any;
|
|
13
|
-
headers?: Record<string, string>;
|
|
14
|
-
}
|
|
15
|
-
export {};
|