@qitqode/qitqore 0.1.0 → 0.3.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/LICENSE +21 -0
- package/README.md +165 -0
- package/dist/decision-policy.d.ts +132 -0
- package/dist/decision-policy.d.ts.map +1 -0
- package/dist/decision-policy.js +308 -0
- package/dist/decision-policy.js.map +1 -0
- package/dist/device-authorization.d.ts +67 -0
- package/dist/device-authorization.d.ts.map +1 -0
- package/dist/device-authorization.js +122 -0
- package/dist/device-authorization.js.map +1 -0
- package/dist/errors.d.ts +36 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +108 -17
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/recovery-capabilities.d.ts +26 -0
- package/dist/recovery-capabilities.d.ts.map +1 -0
- package/dist/recovery-capabilities.js +113 -0
- package/dist/recovery-capabilities.js.map +1 -0
- package/dist/recovery-directive.d.ts +20 -0
- package/dist/recovery-directive.d.ts.map +1 -0
- package/dist/recovery-directive.js +116 -0
- package/dist/recovery-directive.js.map +1 -0
- package/dist/recovery-lease.d.ts +80 -0
- package/dist/recovery-lease.d.ts.map +1 -0
- package/dist/recovery-lease.js +257 -0
- package/dist/recovery-lease.js.map +1 -0
- package/dist/recovery-status.d.ts +22 -0
- package/dist/recovery-status.d.ts.map +1 -0
- package/dist/recovery-status.js +113 -0
- package/dist/recovery-status.js.map +1 -0
- package/dist/recovery.d.ts +13 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +94 -55
- package/dist/recovery.js.map +1 -1
- package/dist/redaction.d.ts +64 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +154 -0
- package/dist/redaction.js.map +1 -0
- package/dist/route-contract.d.ts +36 -0
- package/dist/route-contract.d.ts.map +1 -0
- package/dist/route-contract.js +89 -0
- package/dist/route-contract.js.map +1 -0
- package/dist/sse.d.ts +4 -0
- package/dist/sse.d.ts.map +1 -1
- package/dist/sse.js +16 -1
- package/dist/sse.js.map +1 -1
- package/dist/stream-payload.d.ts +40 -0
- package/dist/stream-payload.d.ts.map +1 -0
- package/dist/stream-payload.js +96 -0
- package/dist/stream-payload.js.map +1 -0
- package/dist/transport.d.ts +10 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +28 -0
- package/dist/transport.js.map +1 -1
- package/package.json +12 -2
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for Qortex route identity, module endpoints, and request headers.
|
|
3
|
+
* Every module name, route, and identifier comes from the caller. QitQore does
|
|
4
|
+
* not choose between the canonical `qortex` and historical `@bijikyu/omniquery`
|
|
5
|
+
* module paths, and it never creates request or idempotency identities.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Build the route identity Qortex reports for a recovery status. The module is
|
|
9
|
+
* the public path segment as the caller addresses it, and the path is normalized
|
|
10
|
+
* to begin with a single slash.
|
|
11
|
+
*/
|
|
12
|
+
export declare function recoveryRouteID(input: {
|
|
13
|
+
module: string;
|
|
14
|
+
method: string;
|
|
15
|
+
path: string;
|
|
16
|
+
}): string;
|
|
17
|
+
/**
|
|
18
|
+
* Build a module function URL, `<base>/api/v1/<module>/<function>`. The module
|
|
19
|
+
* path is kept exactly as supplied, including scoped names such as
|
|
20
|
+
* `@bijikyu/omniquery`, because percent-encoding it would not match the route.
|
|
21
|
+
*/
|
|
22
|
+
export declare function qortexModuleEndpoint(input: {
|
|
23
|
+
baseUrl: string | URL;
|
|
24
|
+
module: string;
|
|
25
|
+
functionName: string;
|
|
26
|
+
}): string;
|
|
27
|
+
/**
|
|
28
|
+
* Bounded request-identity headers. A host supplies both identities; QitQore
|
|
29
|
+
* validates them and never invents one. The idempotency key is sent with the
|
|
30
|
+
* request ID only when the host has an approved stable key.
|
|
31
|
+
*/
|
|
32
|
+
export declare function qortexRequestHeaders(input: {
|
|
33
|
+
requestId?: string;
|
|
34
|
+
idempotencyKey?: string;
|
|
35
|
+
}): Record<string, string>;
|
|
36
|
+
//# sourceMappingURL=route-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-contract.d.ts","sourceRoot":"","sources":["../src/route-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuBH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAgB/F;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAgBT;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAezB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for Qortex route identity, module endpoints, and request headers.
|
|
3
|
+
* Every module name, route, and identifier comes from the caller. QitQore does
|
|
4
|
+
* not choose between the canonical `qortex` and historical `@bijikyu/omniquery`
|
|
5
|
+
* module paths, and it never creates request or idempotency identities.
|
|
6
|
+
*/
|
|
7
|
+
const MODULE_PATH = /^[A-Za-z0-9._~@-]{1,128}(?:\/[A-Za-z0-9._~@-]{1,128})*$/;
|
|
8
|
+
const FUNCTION_NAME = /^[A-Za-z][A-Za-z0-9_]{0,127}$/;
|
|
9
|
+
const METHOD = /^[A-Za-z]{1,16}$/;
|
|
10
|
+
const ROUTE_PATH = /^\/[A-Za-z0-9_./~-]{0,255}$/;
|
|
11
|
+
const REQUEST_ID = /^[A-Za-z0-9_.:-]{1,160}$/;
|
|
12
|
+
const IDEMPOTENCY_KEY = /^[A-Za-z0-9_.:-]{1,256}$/;
|
|
13
|
+
const MAX_ROUTE_ID_LENGTH = 256;
|
|
14
|
+
/** Dot-only segments would let a module or path climb out of its route prefix. */
|
|
15
|
+
function hasDotSegment(value) {
|
|
16
|
+
return value.split("/").some((segment) => segment === "." || segment === "..");
|
|
17
|
+
}
|
|
18
|
+
function isModulePath(value) {
|
|
19
|
+
return typeof value === "string" && MODULE_PATH.test(value) && !hasDotSegment(value);
|
|
20
|
+
}
|
|
21
|
+
function isRoutePath(value) {
|
|
22
|
+
return ROUTE_PATH.test(value) && !hasDotSegment(value);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build the route identity Qortex reports for a recovery status. The module is
|
|
26
|
+
* the public path segment as the caller addresses it, and the path is normalized
|
|
27
|
+
* to begin with a single slash.
|
|
28
|
+
*/
|
|
29
|
+
export function recoveryRouteID(input) {
|
|
30
|
+
if (!isModulePath(input.module)) {
|
|
31
|
+
throw new TypeError("Qortex route module is invalid");
|
|
32
|
+
}
|
|
33
|
+
if (typeof input.method !== "string" || !METHOD.test(input.method)) {
|
|
34
|
+
throw new TypeError("Qortex route method is invalid");
|
|
35
|
+
}
|
|
36
|
+
const path = `/${input.path.replace(/^\/+/, "")}`;
|
|
37
|
+
if (!isRoutePath(path)) {
|
|
38
|
+
throw new TypeError("Qortex route path is invalid");
|
|
39
|
+
}
|
|
40
|
+
const routeID = `${input.module}:${input.method.toUpperCase()}:${path}`;
|
|
41
|
+
if (routeID.length > MAX_ROUTE_ID_LENGTH) {
|
|
42
|
+
throw new TypeError("Qortex route identity is too long");
|
|
43
|
+
}
|
|
44
|
+
return routeID;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build a module function URL, `<base>/api/v1/<module>/<function>`. The module
|
|
48
|
+
* path is kept exactly as supplied, including scoped names such as
|
|
49
|
+
* `@bijikyu/omniquery`, because percent-encoding it would not match the route.
|
|
50
|
+
*/
|
|
51
|
+
export function qortexModuleEndpoint(input) {
|
|
52
|
+
if (!isModulePath(input.module)) {
|
|
53
|
+
throw new TypeError("Qortex module name is invalid");
|
|
54
|
+
}
|
|
55
|
+
if (typeof input.functionName !== "string" || !FUNCTION_NAME.test(input.functionName)) {
|
|
56
|
+
throw new TypeError("Qortex function name is invalid");
|
|
57
|
+
}
|
|
58
|
+
const base = new URL(input.baseUrl);
|
|
59
|
+
if (base.protocol !== "https:" && base.protocol !== "http:") {
|
|
60
|
+
throw new TypeError("Qortex base URL must use HTTP or HTTPS");
|
|
61
|
+
}
|
|
62
|
+
if (base.search !== "" || base.hash !== "") {
|
|
63
|
+
throw new TypeError("Qortex base URL must not include a query or fragment");
|
|
64
|
+
}
|
|
65
|
+
const basePath = base.pathname.replace(/\/+$/, "");
|
|
66
|
+
return `${base.origin}${basePath}/api/v1/${input.module}/${input.functionName}`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Bounded request-identity headers. A host supplies both identities; QitQore
|
|
70
|
+
* validates them and never invents one. The idempotency key is sent with the
|
|
71
|
+
* request ID only when the host has an approved stable key.
|
|
72
|
+
*/
|
|
73
|
+
export function qortexRequestHeaders(input) {
|
|
74
|
+
const headers = {};
|
|
75
|
+
if (input.requestId !== undefined) {
|
|
76
|
+
if (typeof input.requestId !== "string" || !REQUEST_ID.test(input.requestId)) {
|
|
77
|
+
throw new TypeError("Qortex request ID is invalid");
|
|
78
|
+
}
|
|
79
|
+
headers["x-request-id"] = input.requestId;
|
|
80
|
+
}
|
|
81
|
+
if (input.idempotencyKey !== undefined) {
|
|
82
|
+
if (typeof input.idempotencyKey !== "string" || !IDEMPOTENCY_KEY.test(input.idempotencyKey)) {
|
|
83
|
+
throw new TypeError("Qortex idempotency key is invalid");
|
|
84
|
+
}
|
|
85
|
+
headers["x-idempotency-key"] = input.idempotencyKey;
|
|
86
|
+
}
|
|
87
|
+
return headers;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=route-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-contract.js","sourceRoot":"","sources":["../src/route-contract.ts"],"names":[],"mappings":"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"}
|
package/dist/sse.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export interface QortexSseEvent {
|
|
|
3
3
|
event?: string;
|
|
4
4
|
id?: string;
|
|
5
5
|
retry?: number;
|
|
6
|
+
routingStatus?: "free-fallback";
|
|
7
|
+
routingStage?: "auto-free" | "free-pool";
|
|
6
8
|
}
|
|
7
9
|
export declare class SseDecoder {
|
|
8
10
|
private readonly decoder;
|
|
@@ -12,6 +14,8 @@ export declare class SseDecoder {
|
|
|
12
14
|
private eventId;
|
|
13
15
|
private lastEventId;
|
|
14
16
|
private retry;
|
|
17
|
+
private routingStatus;
|
|
18
|
+
private routingStage;
|
|
15
19
|
push(chunk: Uint8Array | string): QortexSseEvent[];
|
|
16
20
|
finish(): QortexSseEvent[];
|
|
17
21
|
private consume;
|
package/dist/sse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,YAAY,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;CAC1C;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,YAAY,CAAwC;IAE5D,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,cAAc,EAAE;IAQlD,MAAM,IAAI,cAAc,EAAE;IAS1B,OAAO,CAAC,OAAO;IAgCf,OAAO,CAAC,WAAW;IAsDnB,OAAO,CAAC,UAAU;CAQnB;AAED,wBAAuB,UAAU,CAC/B,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,MAAM,CAAC,EAAE,WAAW,GACnB,cAAc,CAAC,cAAc,CAAC,CA0ChC"}
|
package/dist/sse.js
CHANGED
|
@@ -6,6 +6,8 @@ export class SseDecoder {
|
|
|
6
6
|
eventId;
|
|
7
7
|
lastEventId;
|
|
8
8
|
retry;
|
|
9
|
+
routingStatus;
|
|
10
|
+
routingStage;
|
|
9
11
|
push(chunk) {
|
|
10
12
|
const text = typeof chunk === "string"
|
|
11
13
|
? this.decoder.decode() + chunk
|
|
@@ -55,7 +57,7 @@ export class SseDecoder {
|
|
|
55
57
|
}
|
|
56
58
|
processLine(line) {
|
|
57
59
|
if (line.length === 0) {
|
|
58
|
-
if (this.data.length === 0) {
|
|
60
|
+
if (this.data.length === 0 && this.routingStatus === undefined) {
|
|
59
61
|
this.resetFrame();
|
|
60
62
|
return [];
|
|
61
63
|
}
|
|
@@ -66,6 +68,8 @@ export class SseDecoder {
|
|
|
66
68
|
? { id: this.eventId ?? this.lastEventId }
|
|
67
69
|
: {}),
|
|
68
70
|
...(this.retry === undefined ? {} : { retry: this.retry }),
|
|
71
|
+
...(this.routingStatus ? { routingStatus: this.routingStatus } : {}),
|
|
72
|
+
...(this.routingStage ? { routingStage: this.routingStage } : {}),
|
|
69
73
|
};
|
|
70
74
|
this.resetFrame();
|
|
71
75
|
return [event];
|
|
@@ -94,6 +98,15 @@ export class SseDecoder {
|
|
|
94
98
|
if (/^\d+$/.test(value))
|
|
95
99
|
this.retry = Number(value);
|
|
96
100
|
break;
|
|
101
|
+
case "qortex-routing-status":
|
|
102
|
+
if (value === "free-fallback")
|
|
103
|
+
this.routingStatus = "free-fallback";
|
|
104
|
+
break;
|
|
105
|
+
case "qortex-routing-stage":
|
|
106
|
+
if (this.routingStatus === "free-fallback" && (value === "auto-free" || value === "free-pool")) {
|
|
107
|
+
this.routingStage = value;
|
|
108
|
+
}
|
|
109
|
+
break;
|
|
97
110
|
}
|
|
98
111
|
return [];
|
|
99
112
|
}
|
|
@@ -102,6 +115,8 @@ export class SseDecoder {
|
|
|
102
115
|
this.eventName = undefined;
|
|
103
116
|
this.eventId = undefined;
|
|
104
117
|
this.retry = undefined;
|
|
118
|
+
this.routingStatus = undefined;
|
|
119
|
+
this.routingStage = undefined;
|
|
105
120
|
}
|
|
106
121
|
}
|
|
107
122
|
export async function* iterateSse(stream, signal) {
|
package/dist/sse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,UAAU;IACJ,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IACrC,MAAM,GAAG,EAAE,CAAC;IACZ,IAAI,GAAa,EAAE,CAAC;IACpB,SAAS,CAAqB;IAC9B,OAAO,CAAqB;IAC5B,WAAW,CAAqB;IAChC,KAAK,CAAqB;IAC1B,aAAa,CAA8B;IAC3C,YAAY,CAAwC;IAE5D,IAAI,CAAC,KAA0B;QAC7B,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ;YACvB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,KAAK;YAC/B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,yEAAyE;QACzE,uDAAuD;QACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,OAAO,CAAC,IAAY,EAAE,KAAc;QAC1C,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;QACpB,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,IAAI,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK;oBAAE,MAAM;gBACvD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAClD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;oBAAE,MAAM,IAAI,CAAC,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvC,MAAM,IAAI,CAAC,CAAC;gBACZ,SAAS,GAAG,MAAM,CAAC;YACrB,CAAC;iBAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvE,MAAM,IAAI,CAAC,CAAC;gBACZ,SAAS,GAAG,MAAM,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,KAAK,GAAmB;gBAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1B,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW;oBAClC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;oBAC1C,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC1D,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClE,CAAC;YACF,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACjE,IAAI,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAElD,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,MAAM;gBACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,MAAM;YACR,KAAK,IAAI;gBACP,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBACrB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC3B,CAAC;gBACD,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;oBAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpD,MAAM;YACR,KAAK,uBAAuB;gBAC1B,IAAI,KAAK,KAAK,eAAe;oBAAE,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC;gBACpE,MAAM;YACR,KAAK,sBAAsB;gBACzB,IAAI,IAAI,CAAC,aAAa,KAAK,eAAe,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,CAAC,EAAE,CAAC;oBAC/F,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC5B,CAAC;gBACD,MAAM;QACV,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,UAAU,CAC/B,MAAkC,EAClC,MAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;IACjC,IAAI,aAAuC,CAAC;IAC5C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,aAAa,GAAG,GAAG,EAAE;gBACnB,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACpG,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM;YACR,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;QAC5D,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;YAAE,MAAM,KAAK,CAAC;IACpD,CAAC;YAAS,CAAC;QACT,IAAI,MAAM,IAAI,aAAa;YAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,iDAAiD;YACnD,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type QortexCostFrameID = "qortex-cost" | "qlex-cost";
|
|
2
|
+
export type QortexUsageFrameID = "qortex-stream" | "qlex-stream";
|
|
3
|
+
/**
|
|
4
|
+
* A tagged result. `text` is literal model output, and `json` is a structured
|
|
5
|
+
* frame the host must adapt. The host must not treat `json` as text by accident.
|
|
6
|
+
*/
|
|
7
|
+
export type QortexStreamPayload = {
|
|
8
|
+
kind: "empty";
|
|
9
|
+
} | {
|
|
10
|
+
kind: "text";
|
|
11
|
+
text: string;
|
|
12
|
+
} | {
|
|
13
|
+
kind: "json";
|
|
14
|
+
value: Record<string, unknown>;
|
|
15
|
+
} | {
|
|
16
|
+
kind: "usage";
|
|
17
|
+
id: QortexUsageFrameID;
|
|
18
|
+
usage: Record<string, unknown>;
|
|
19
|
+
finishReason?: string;
|
|
20
|
+
} | {
|
|
21
|
+
kind: "cost";
|
|
22
|
+
id: QortexCostFrameID;
|
|
23
|
+
final: boolean;
|
|
24
|
+
frame: Record<string, unknown>;
|
|
25
|
+
} | {
|
|
26
|
+
kind: "control";
|
|
27
|
+
control: "routing-status";
|
|
28
|
+
status: "free-fallback";
|
|
29
|
+
fallbackStage?: "auto-free" | "free-pool";
|
|
30
|
+
} | {
|
|
31
|
+
kind: "done";
|
|
32
|
+
} | {
|
|
33
|
+
kind: "error";
|
|
34
|
+
message: string;
|
|
35
|
+
code?: string;
|
|
36
|
+
requestId?: string;
|
|
37
|
+
};
|
|
38
|
+
/** Classify one SSE data payload. Pure: the same input always yields the same result. */
|
|
39
|
+
export declare function classifyQortexStreamPayload(data: string): QortexStreamPayload;
|
|
40
|
+
//# sourceMappingURL=stream-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-payload.d.ts","sourceRoot":"","sources":["../src/stream-payload.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,WAAW,CAAC;AAC5D,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,aAAa,CAAC;AAEjE;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAChG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACvF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,aAAa,CAAC,EAAE,WAAW,GAAG,WAAW,CAAA;CAAE,GAClH;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAwC1E,yFAAyF;AACzF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CA+C7E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classifies one reassembled Qortex SSE data payload. The caller frames the
|
|
3
|
+
* stream with `SseDecoder` or `iterateSse`, which joins multi-line `data:` values
|
|
4
|
+
* before this function sees them.
|
|
5
|
+
*
|
|
6
|
+
* Classification is pure and separate from product behavior. It does not convert
|
|
7
|
+
* OpenAI chunks, flatten tool calls, choose finish reasons, update accounting,
|
|
8
|
+
* settle reservations, or decide that a stream completed successfully. Terminal
|
|
9
|
+
* success stays with the host, and an unterminated stream remains incomplete.
|
|
10
|
+
*/
|
|
11
|
+
import { redactSensitiveText } from "./redaction.js";
|
|
12
|
+
const COST_FRAME_IDS = new Set(["qortex-cost", "qlex-cost"]);
|
|
13
|
+
const USAGE_FRAME_IDS = new Set(["qortex-stream", "qlex-stream"]);
|
|
14
|
+
const DEFAULT_STREAM_ERROR = "Qortex stream error";
|
|
15
|
+
const MAX_ERROR_MESSAGE_LENGTH = 512;
|
|
16
|
+
const ERROR_CODE = /^([A-Z][A-Z0-9_]{1,63})(?:\s+[—-]\s+|$)([\s\S]*)$/;
|
|
17
|
+
const ERROR_REFERENCE = /\s*\(ref:\s*([A-Za-z0-9_.:-]{1,160})\)\s*$/;
|
|
18
|
+
function isRecord(value) {
|
|
19
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse a `[ERROR] <CODE> — <message> (ref: <id>)` detail. The code and reference
|
|
23
|
+
* are kept only when they match the safe identifier shape. The message is bounded
|
|
24
|
+
* and redacted before it leaves this module.
|
|
25
|
+
*/
|
|
26
|
+
function parseStreamError(detail) {
|
|
27
|
+
const coded = ERROR_CODE.exec(detail);
|
|
28
|
+
const remainder = coded ? coded[2] : detail;
|
|
29
|
+
const reference = ERROR_REFERENCE.exec(remainder);
|
|
30
|
+
const message = redactSensitiveText((reference ? remainder.slice(0, reference.index) : remainder).trim(), MAX_ERROR_MESSAGE_LENGTH);
|
|
31
|
+
return {
|
|
32
|
+
message: message || DEFAULT_STREAM_ERROR,
|
|
33
|
+
...(coded ? { code: coded[1] } : {}),
|
|
34
|
+
...(reference ? { requestId: reference[1] } : {}),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function finishReasonOf(frame) {
|
|
38
|
+
const choices = frame.choices;
|
|
39
|
+
if (!Array.isArray(choices) || !isRecord(choices[0]))
|
|
40
|
+
return undefined;
|
|
41
|
+
const reason = choices[0].finish_reason;
|
|
42
|
+
return typeof reason === "string" ? reason : undefined;
|
|
43
|
+
}
|
|
44
|
+
/** Classify one SSE data payload. Pure: the same input always yields the same result. */
|
|
45
|
+
export function classifyQortexStreamPayload(data) {
|
|
46
|
+
if (data === "")
|
|
47
|
+
return { kind: "empty" };
|
|
48
|
+
if (data === "[DONE]")
|
|
49
|
+
return { kind: "done" };
|
|
50
|
+
if (data.startsWith("[ERROR]"))
|
|
51
|
+
return { kind: "error", ...parseStreamError(data.slice("[ERROR]".length).trim()) };
|
|
52
|
+
// Only payloads that begin like a JSON object or array are parsed. Plain tokens are
|
|
53
|
+
// the most common frame, and they must not pay for a thrown parse on every chunk.
|
|
54
|
+
const first = data.charCodeAt(0);
|
|
55
|
+
const mayBeObject = first === 123 || first === 91 || first === 32 || first === 9 || first === 10 || first === 13;
|
|
56
|
+
if (!mayBeObject)
|
|
57
|
+
return { kind: "text", text: data };
|
|
58
|
+
let parsed;
|
|
59
|
+
try {
|
|
60
|
+
parsed = JSON.parse(data);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return { kind: "text", text: data };
|
|
64
|
+
}
|
|
65
|
+
// Arrays and JSON primitives are not frames. They stay literal text, as they did before.
|
|
66
|
+
if (!isRecord(parsed))
|
|
67
|
+
return { kind: "text", text: data };
|
|
68
|
+
const id = parsed.id;
|
|
69
|
+
if (typeof id === "string" && COST_FRAME_IDS.has(id)) {
|
|
70
|
+
return { kind: "cost", id: id, final: parsed.final === true, frame: parsed };
|
|
71
|
+
}
|
|
72
|
+
if (typeof id === "string" && USAGE_FRAME_IDS.has(id) && isRecord(parsed.usage)) {
|
|
73
|
+
const finishReason = finishReasonOf(parsed);
|
|
74
|
+
return {
|
|
75
|
+
kind: "usage",
|
|
76
|
+
id: id,
|
|
77
|
+
usage: parsed.usage,
|
|
78
|
+
...(finishReason === undefined ? {} : { finishReason }),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
if (id === "qortex-routing" && parsed.object === "qortex.routing.status" && parsed.status === "free-fallback") {
|
|
82
|
+
const hasStage = Object.prototype.hasOwnProperty.call(parsed, "fallbackStage");
|
|
83
|
+
const fallbackStage = parsed.fallbackStage;
|
|
84
|
+
if (hasStage && fallbackStage !== "auto-free" && fallbackStage !== "free-pool") {
|
|
85
|
+
return { kind: "json", value: parsed };
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
kind: "control",
|
|
89
|
+
control: "routing-status",
|
|
90
|
+
status: "free-fallback",
|
|
91
|
+
...(hasStage ? { fallbackStage: fallbackStage } : {}),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return { kind: "json", value: parsed };
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=stream-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-payload.js","sourceRoot":"","sources":["../src/stream-payload.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { QortexHttpError } from "./errors.js";
|
|
2
|
+
import { type QortexRecoveryStatus } from "./recovery-status.js";
|
|
3
|
+
import { type QortexRecoveryCapabilities } from "./recovery-capabilities.js";
|
|
2
4
|
export interface QortexClientOptions {
|
|
3
5
|
baseUrl: string | URL;
|
|
4
6
|
fetch?: typeof globalThis.fetch;
|
|
@@ -26,6 +28,14 @@ export declare class QortexClient {
|
|
|
26
28
|
getRequestStatus<T = unknown>(requestId: string, policy?: QortexRequestPolicy & {
|
|
27
29
|
headers?: HeadersInit;
|
|
28
30
|
}): Promise<QortexJsonResult<T>>;
|
|
31
|
+
/** Read route execution/result state; this is not billing evidence. */
|
|
32
|
+
getRecoveryStatus(requestId: string, policy?: QortexRequestPolicy & {
|
|
33
|
+
headers?: HeadersInit;
|
|
34
|
+
}): Promise<QortexJsonResult<QortexRecoveryStatus>>;
|
|
35
|
+
/** Read route recovery guarantees separately from billing and execution status. */
|
|
36
|
+
getRecoveryCapabilities(policy?: QortexRequestPolicy & {
|
|
37
|
+
headers?: HeadersInit;
|
|
38
|
+
}): Promise<QortexJsonResult<QortexRecoveryCapabilities>>;
|
|
29
39
|
openStream(target: RequestInfo | URL, init?: RequestInit, policy?: QortexRequestPolicy): Promise<Response>;
|
|
30
40
|
}
|
|
31
41
|
export declare function createQortexClient(options: QortexClientOptions): QortexClient;
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAKhB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAKhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqJD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAM;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAS;gBAE/B,OAAO,EAAE,mBAAmB;IAgBlC,OAAO,CACX,MAAM,EAAE,WAAW,GAAG,GAAG,EACzB,IAAI,GAAE,WAAgB,EACtB,MAAM,GAAE,mBAAwB,GAC/B,OAAO,CAAC,QAAQ,CAAC;IA+Cd,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3B,MAAM,EAAE,WAAW,GAAG,GAAG,EACzB,IAAI,GAAE,WAAgB,EACtB,MAAM,GAAE,mBAAwB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAwBzB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAChC,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,mBAAmB,GAAG;QAAE,OAAO,CAAC,EAAE,WAAW,CAAA;KAAO,GAC3D,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAS/B,uEAAuE;IACjE,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,mBAAmB,GAAG;QAAE,OAAO,CAAC,EAAE,WAAW,CAAA;KAAO,GAC3D,OAAO,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAyBlD,mFAAmF;IAC7E,uBAAuB,CAC3B,MAAM,GAAE,mBAAmB,GAAG;QAAE,OAAO,CAAC,EAAE,WAAW,CAAA;KAAO,GAC3D,OAAO,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;IAkBxD,UAAU,CACR,MAAM,EAAE,WAAW,GAAG,GAAG,EACzB,IAAI,GAAE,WAAgB,EACtB,MAAM,GAAE,mBAAwB,GAC/B,OAAO,CAAC,QAAQ,CAAC;CAGrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAE7E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAW7D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E"}
|
package/dist/transport.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { QortexHttpError, QortexProtocolError, QortexTimeoutError, QortexTransportError, qortexHttpError, } from "./errors.js";
|
|
2
|
+
import { parseRecoveryStatus } from "./recovery-status.js";
|
|
3
|
+
import { parseRecoveryCapabilities, } from "./recovery-capabilities.js";
|
|
2
4
|
function makeAbortScope(signals, timeoutMs) {
|
|
3
5
|
if (timeoutMs !== undefined && (!Number.isFinite(timeoutMs) || timeoutMs <= 0)) {
|
|
4
6
|
throw new RangeError("timeoutMs must be a positive finite number");
|
|
@@ -209,6 +211,32 @@ export class QortexClient {
|
|
|
209
211
|
const url = new URL(`/auth/usage/v1/requests/${encodeURIComponent(requestId)}`, this.baseUrl.origin);
|
|
210
212
|
return this.requestJson(url, { method: "GET", headers: policy.headers }, policy);
|
|
211
213
|
}
|
|
214
|
+
/** Read route execution/result state; this is not billing evidence. */
|
|
215
|
+
async getRecoveryStatus(requestId, policy = {}) {
|
|
216
|
+
if (typeof requestId !== "string" || !requestId.trim() || requestId.length > 256) {
|
|
217
|
+
throw new TypeError("requestId must contain between 1 and 256 characters");
|
|
218
|
+
}
|
|
219
|
+
const canonicalRequestId = requestId.trim();
|
|
220
|
+
const url = new URL(`/auth/recovery/v1/requests/${encodeURIComponent(canonicalRequestId)}`, this.baseUrl.origin);
|
|
221
|
+
const result = await this.requestJson(url, { method: "GET", headers: policy.headers }, policy);
|
|
222
|
+
try {
|
|
223
|
+
return { ...result, data: parseRecoveryStatus(result.data, canonicalRequestId) };
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
throw new QortexProtocolError("Qortex returned a malformed recovery-status response", result.status, result.requestId);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/** Read route recovery guarantees separately from billing and execution status. */
|
|
230
|
+
async getRecoveryCapabilities(policy = {}) {
|
|
231
|
+
const url = new URL("/auth/recovery/v1/capabilities", this.baseUrl.origin);
|
|
232
|
+
const result = await this.requestJson(url, { method: "GET", headers: policy.headers }, policy);
|
|
233
|
+
try {
|
|
234
|
+
return { ...result, data: parseRecoveryCapabilities(result.data) };
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
throw new QortexProtocolError("Qortex returned a malformed recovery-capabilities response", result.status, result.requestId);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
212
240
|
openStream(target, init = {}, policy = {}) {
|
|
213
241
|
return this.request(target, init, policy);
|
|
214
242
|
}
|
package/dist/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,GAChB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAA6B,MAAM,sBAAsB,CAAC;AACtF,OAAO,EACL,yBAAyB,GAE1B,MAAM,4BAA4B,CAAC;AA4BpC,SAAS,cAAc,CACrB,OAA8C,EAC9C,SAAkB;IAElB,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,UAAU,CAAC,4CAA4C,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAgD,CAAC;IAErD,KAAK,MAAM,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAuB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1D,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC;YAC9B,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC;IAED,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO;QACvB,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QAC1E,OAAO;YACL,IAAI,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7C,KAAK,MAAM,MAAM,IAAI,QAAQ;gBAAE,MAAM,EAAE,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAyB,EAAE,OAAY;IAC5D,IAAI,MAAM,YAAY,OAAO;QAAE,OAAO,MAAM,CAAC;IAC7C,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,SAAS,CAAC,MAAyB;IAC1C,OAAO,IAAI,GAAG,CAAC,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,YAAY,CACnB,QAAiC,EACjC,cAAuC,EACvC,WAAoC;IAEpC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,KAAK,MAAM,MAAM,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,OAAgB;IACpC,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACnC,OAAO,KAAK,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB,EAAE,KAAiB;IAC9D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;QAC5D,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,cAAc,CAAa;QAC1C,KAAK,CAAC,IAAI,CAAC,UAAU;YACnB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,MAAM,EAAE,CAAC;oBACT,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,OAAO;gBACT,CAAC;gBACD,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,EAAE,CAAC;gBACT,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,MAAM;YACjB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;oBAAS,CAAC;gBACT,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,KAAiC,CAAC,OAAO,KAAK,KAAK,CACrD,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,YAAY;IACN,OAAO,CAAM;IACb,SAAS,CAA0B;IACnC,cAAc,CAAe;IAC7B,gBAAgB,CAAU;IAE3C,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,CAAC;QAChF,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpD,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;QACvE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;QACnD,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YACzC,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAyB,EACzB,OAAoB,EAAE,EACtB,SAA8B,EAAE;QAEhC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvD,MAAM,IAAI,SAAS,CAAC,6DAA6D,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,MAAM,KAAK,GAAG,cAAc,CAC1B,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAC3C,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAC1C,CAAC;QACF,MAAM,OAAO,GAAG,YAAY,CAC1B,IAAI,CAAC,cAAc,EACnB,aAAa,CAAC,CAAC,CAAE,MAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACvD,IAAI,CAAC,OAAO,CACb,CAAC;QAEF,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACrB,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC7B,CAAC;gBACD,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3G,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;gBAC9C,GAAG,IAAI;gBACP,OAAO;gBACP,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACrB,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC7B,CAAC;gBACD,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3G,CAAC;YACD,OAAO,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACrB,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE;oBAC3E,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;YACL,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,KAAK,CAAC;YACtC,MAAM,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,MAAyB,EACzB,OAAoB,EAAE,EACtB,SAA8B,EAAE;QAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAC/D,MAAM,IAAI,mBAAmB,CAC3B,6DAA6D,EAC7D,QAAQ,CAAC,MAAM,EACf,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC/B,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,EAAE,IAAS;YACf,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAChC,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAC/C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,SAAiB,EACjB,SAA0D,EAAE;QAE5D,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,2BAA2B,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAC1D,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;QACF,OAAO,IAAI,CAAC,WAAW,CAAI,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IACtF,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,iBAAiB,CACrB,SAAiB,EACjB,SAA0D,EAAE;QAE5D,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACjF,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,8BAA8B,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,EACtE,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,GAAG,EACH,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAC1C,MAAM,CACP,CAAC;QACF,IAAI,CAAC;YACH,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,CAAC;QACnF,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,mBAAmB,CAC3B,sDAAsD,EACtD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mFAAmF;IACnF,KAAK,CAAC,uBAAuB,CAC3B,SAA0D,EAAE;QAE5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gCAAgC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,GAAG,EACH,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAC1C,MAAM,CACP,CAAC;QACF,IAAI,CAAC;YACH,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,mBAAmB,CAC3B,4DAA4D,EAC5D,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,UAAU,CACR,MAAyB,EACzB,OAAoB,EAAE,EACtB,SAA8B,EAAE;QAEhC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IACE,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,KAAiC,CAAC,OAAO,KAAK,IAAI;QACnD,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAC5B,CAAC;QACD,OAAQ,KAAiC,CAAC,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,YAAY,eAAe,CAAC;AAC1C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qitqode/qitqore",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Shared, host-neutral Qortex HTTP, streaming, and recovery primitives",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/forgewisetech/qitqore.git"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/forgewisetech/qitqore#readme",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/forgewisetech/qitqore/issues"
|
|
13
|
+
},
|
|
5
14
|
"type": "module",
|
|
6
15
|
"engines": {
|
|
7
16
|
"node": ">=24"
|
|
@@ -16,7 +25,8 @@
|
|
|
16
25
|
},
|
|
17
26
|
"files": [
|
|
18
27
|
"dist/**",
|
|
19
|
-
"README.md"
|
|
28
|
+
"README.md",
|
|
29
|
+
"LICENSE"
|
|
20
30
|
],
|
|
21
31
|
"sideEffects": false,
|
|
22
32
|
"scripts": {
|