meridian-sdk 0.4.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
package/dist/transport/http.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAElB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,KAAK,EAAE,MAAM,CAAC;gBAEF,MAAM,EAAE,gBAAgB;IAMpC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,YAAY,CAAC;IAIzF,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,GAAG,YAAY,CAAC;IAIpG,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,YAAY,CAAC;IAS3D,UAAU,CACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,WAAW,CAAA;KAAE,GACpE,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,SAAS,GAAG,YAAY,CAAC;IAI9D,OAAO,CAAC,OAAO;CAyDhB"}
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAElB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,KAAK,EAAE,MAAM,CAAC;gBAEF,MAAM,EAAE,gBAAgB;IAMpC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,YAAY,CAAC;IAIzF,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,GAAG,YAAY,CAAC;IAIpG,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,YAAY,CAAC;IAS3D,UAAU,CACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,WAAW,CAAA;KAAE,GACpE,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,SAAS,GAAG,YAAY,CAAC;IAI9D,OAAO,CAAC,WAAW;IAsDnB,OAAO,CAAC,OAAO;CAyDhB"}
|
package/dist/transport/http.js
CHANGED
|
@@ -26,7 +26,47 @@ export class HttpClient {
|
|
|
26
26
|
return this.request(CrdtGetResponse, "GET", path);
|
|
27
27
|
}
|
|
28
28
|
issueToken(ns, opts) {
|
|
29
|
-
return this.
|
|
29
|
+
return this.requestJson(TokenIssueResponse, "POST", `/v1/namespaces/${ns}/tokens`, opts);
|
|
30
|
+
}
|
|
31
|
+
requestJson(responseSchema, method, path, body) {
|
|
32
|
+
const url = `${this.baseUrl}${path}`;
|
|
33
|
+
const headers = {
|
|
34
|
+
Authorization: `Bearer ${this.token}`,
|
|
35
|
+
};
|
|
36
|
+
let bodyStr;
|
|
37
|
+
if (body !== undefined) {
|
|
38
|
+
bodyStr = JSON.stringify(body);
|
|
39
|
+
headers["Content-Type"] = "application/json";
|
|
40
|
+
}
|
|
41
|
+
const fetchEffect = Effect.tryPromise({
|
|
42
|
+
try: async () => {
|
|
43
|
+
const controller = new AbortController();
|
|
44
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
45
|
+
try {
|
|
46
|
+
const response = await fetch(url, { method, headers, body: bodyStr, signal: controller.signal });
|
|
47
|
+
const text = await response.text();
|
|
48
|
+
return { response, text };
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
clearTimeout(timer);
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
catch: (e) => new NetworkError({ message: e instanceof Error ? e.message : "fetch failed", cause: e }),
|
|
55
|
+
});
|
|
56
|
+
return fetchEffect.pipe(Effect.flatMap(({ response, text }) => {
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
let errBody;
|
|
59
|
+
try {
|
|
60
|
+
errBody = Schema.decodeUnknownSync(ErrorResponse)(JSON.parse(text));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
errBody = { error: "unknown", message: `HTTP ${response.status}` };
|
|
64
|
+
}
|
|
65
|
+
return Effect.fail(new HttpError({ status: response.status, body: errBody }));
|
|
66
|
+
}
|
|
67
|
+
const raw = JSON.parse(text);
|
|
68
|
+
return Schema.decodeUnknown(responseSchema)(raw).pipe(Effect.mapError((e) => new NetworkError({ message: `Response schema validation failed: ${e.message}` })));
|
|
69
|
+
}));
|
|
30
70
|
}
|
|
31
71
|
request(responseSchema, method, path, body) {
|
|
32
72
|
const url = `${this.baseUrl}${path}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,aAAa,GAEd,MAAM,cAAc,CAAC;AAStB,MAAM,OAAO,UAAU;IACJ,OAAO,CAAS;IAChB,SAAS,CAAS;IACnC,KAAK,CAAS;IAEd,YAAY,MAAwB;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,EAAU,EAAE,EAAU;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,EAAU,EAAE,EAAW;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,QAAQ,CACN,EAAU,EACV,EAAU,EACV,OAAqB;QAErB,IAAI,IAAI,GAAG,kBAAkB,EAAE,UAAU,EAAE,OAAO,CAAC;QACnD,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3C,IAAI,IAAI,UAAU,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,UAAU,CACR,EAAU,EACV,IAAqE;QAErE,OAAO,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/transport/http.ts
CHANGED
|
@@ -52,7 +52,61 @@ export class HttpClient {
|
|
|
52
52
|
ns: string,
|
|
53
53
|
opts: { client_id: number; ttl_ms: number; permissions: Permissions },
|
|
54
54
|
): Effect.Effect<TokenIssueResponse, HttpError | NetworkError> {
|
|
55
|
-
return this.
|
|
55
|
+
return this.requestJson(TokenIssueResponse, "POST", `/v1/namespaces/${ns}/tokens`, opts);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private requestJson<A, I>(
|
|
59
|
+
responseSchema: Schema.Schema<A, I>,
|
|
60
|
+
method: string,
|
|
61
|
+
path: string,
|
|
62
|
+
body?: unknown,
|
|
63
|
+
): Effect.Effect<A, HttpError | NetworkError> {
|
|
64
|
+
const url = `${this.baseUrl}${path}`;
|
|
65
|
+
const headers: Record<string, string> = {
|
|
66
|
+
Authorization: `Bearer ${this.token}`,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
let bodyStr: string | undefined;
|
|
70
|
+
if (body !== undefined) {
|
|
71
|
+
bodyStr = JSON.stringify(body);
|
|
72
|
+
headers["Content-Type"] = "application/json";
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const fetchEffect = Effect.tryPromise({
|
|
76
|
+
try: async () => {
|
|
77
|
+
const controller = new AbortController();
|
|
78
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
79
|
+
try {
|
|
80
|
+
const response = await fetch(url, { method, headers, body: bodyStr, signal: controller.signal });
|
|
81
|
+
const text = await response.text();
|
|
82
|
+
return { response, text };
|
|
83
|
+
} finally {
|
|
84
|
+
clearTimeout(timer);
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
catch: (e) =>
|
|
88
|
+
new NetworkError({ message: e instanceof Error ? e.message : "fetch failed", cause: e }),
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
return fetchEffect.pipe(
|
|
92
|
+
Effect.flatMap(({ response, text }): Effect.Effect<A, HttpError | NetworkError> => {
|
|
93
|
+
if (!response.ok) {
|
|
94
|
+
let errBody: ErrorResponse;
|
|
95
|
+
try {
|
|
96
|
+
errBody = Schema.decodeUnknownSync(ErrorResponse)(JSON.parse(text));
|
|
97
|
+
} catch {
|
|
98
|
+
errBody = { error: "unknown", message: `HTTP ${response.status}` };
|
|
99
|
+
}
|
|
100
|
+
return Effect.fail(new HttpError({ status: response.status, body: errBody }));
|
|
101
|
+
}
|
|
102
|
+
const raw = JSON.parse(text);
|
|
103
|
+
return Schema.decodeUnknown(responseSchema)(raw).pipe(
|
|
104
|
+
Effect.mapError((e) =>
|
|
105
|
+
new NetworkError({ message: `Response schema validation failed: ${e.message}` }),
|
|
106
|
+
),
|
|
107
|
+
);
|
|
108
|
+
}),
|
|
109
|
+
);
|
|
56
110
|
}
|
|
57
111
|
|
|
58
112
|
private request<A, I>(
|