@skipruntime/helpers 0.0.9 → 0.0.10
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/README.md +18 -0
- package/dist/external.d.ts +17 -1
- package/dist/external.d.ts.map +1 -1
- package/dist/external.js +18 -6
- package/dist/external.js.map +1 -1
- package/dist/remote.d.ts.map +1 -1
- package/dist/remote.js +2 -5
- package/dist/remote.js.map +1 -1
- package/dist/rest.d.ts +1 -1
- package/dist/rest.js +5 -5
- package/dist/rest.js.map +1 -1
- package/package.json +2 -2
- package/src/external.ts +22 -5
- package/src/remote.ts +2 -5
- package/src/rest.ts +5 -5
package/README.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# @skipruntime/helpers
|
|
2
|
+
|
|
3
|
+
This package contains items that may be useful for working with the Skip framework, but are not strictly necessary.
|
|
4
|
+
|
|
5
|
+
See the [docs](https://skiplabs.io/docs/api/helpers) for more details.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
Install directly using npm (`npm i @skipruntime/helpers`), or along with other
|
|
10
|
+
components of the runtime by installing the
|
|
11
|
+
[`@skiplabs/skip`](https://www.npmjs.com/package/@skiplabs/skip) meta-package
|
|
12
|
+
(`npm i @skiplabs/skip`)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Support
|
|
16
|
+
|
|
17
|
+
Join the [Discord](https://discord.gg/ss4zxfgUBH) to talk to other community
|
|
18
|
+
members and developers or ask any questions.
|
package/dist/external.d.ts
CHANGED
|
@@ -53,14 +53,30 @@ export declare class Polled<S extends Json, K extends Json, V extends Json> impl
|
|
|
53
53
|
private readonly duration;
|
|
54
54
|
private readonly conv;
|
|
55
55
|
private readonly encodeParams;
|
|
56
|
+
private readonly options?;
|
|
56
57
|
private readonly intervals;
|
|
57
58
|
/**
|
|
59
|
+
* Construct a `Polled` external resource.
|
|
60
|
+
*
|
|
61
|
+
* The URL of the external resource is formed by appending the given base `url` and the result of `encodeParams(params)` where `params` are the parameters provided when instantiating the resource.
|
|
62
|
+
* The default `encodeParams` function produces a query string consisting of a leading `?` followed by the encoding of the `params` given by [URLSearchParams.toString](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/toString) when `params` is an object and otherwise a single key-value pair `params=JSON.stringify(params)`.
|
|
63
|
+
*
|
|
64
|
+
* Note that the result of `encodeParams` contains the `?` separator, but it need not be at the beginning of the returned string, so some parameters can be used in part of the URL preceding the `?`.
|
|
65
|
+
*
|
|
58
66
|
* @param url - HTTP endpoint of external resource to poll.
|
|
59
67
|
* @param duration - Refresh interval, in milliseconds.
|
|
60
68
|
* @param conv - Function to convert data of type `S` received from external resource to `key`-`value` entries.
|
|
61
69
|
* @param encodeParams - Function to use to encode params of type `Json` for external resource request.
|
|
70
|
+
* @param options - Optional parameters.
|
|
71
|
+
* @param options.headers - Additional headers to add to request.
|
|
72
|
+
* @param options.timeout - Timeout for request, in milliseconds. Defaults to 1000ms.
|
|
62
73
|
*/
|
|
63
|
-
constructor(url: string, duration: number, conv: (data: S) => Entry<K, V>[], encodeParams?: (params: Json) => string
|
|
74
|
+
constructor(url: string, duration: number, conv: (data: S) => Entry<K, V>[], encodeParams?: (params: Json) => string, options?: {
|
|
75
|
+
headers?: {
|
|
76
|
+
[header: string]: string;
|
|
77
|
+
};
|
|
78
|
+
timeout?: number;
|
|
79
|
+
} | undefined);
|
|
64
80
|
open(instance: string, params: Json, callbacks: {
|
|
65
81
|
update: (updates: Entry<Json, Json>[], isInit: boolean) => void;
|
|
66
82
|
error: (error: Json) => void;
|
package/dist/external.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external.d.ts","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"external.d.ts","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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"}
|
package/dist/external.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SkipUnknownResourceError } from "@skipruntime/core";
|
|
1
2
|
import { fetchJSON } from "./rest.js";
|
|
2
3
|
/**
|
|
3
4
|
* A generic external service providing external resources.
|
|
@@ -15,7 +16,7 @@ export class GenericExternalService {
|
|
|
15
16
|
subscribe(instance, resourceName, params, callbacks) {
|
|
16
17
|
const resource = this.resources[resourceName];
|
|
17
18
|
if (!resource) {
|
|
18
|
-
throw new
|
|
19
|
+
throw new SkipUnknownResourceError(`Unknown resource named '${resourceName}'`);
|
|
19
20
|
}
|
|
20
21
|
this.instances.set(instance, resource);
|
|
21
22
|
resource.open(instance, params, callbacks);
|
|
@@ -73,10 +74,10 @@ function defaultParamEncoder(params) {
|
|
|
73
74
|
else
|
|
74
75
|
queryParams[key] = value.toString();
|
|
75
76
|
}
|
|
76
|
-
return new URLSearchParams(queryParams).toString()
|
|
77
|
+
return `?${new URLSearchParams(queryParams).toString()}`;
|
|
77
78
|
}
|
|
78
79
|
else
|
|
79
|
-
return
|
|
80
|
+
return `?params=${JSON.stringify(params)}`;
|
|
80
81
|
}
|
|
81
82
|
/**
|
|
82
83
|
* An external resource that is refreshed at some polling interval.
|
|
@@ -87,23 +88,34 @@ function defaultParamEncoder(params) {
|
|
|
87
88
|
*/
|
|
88
89
|
export class Polled {
|
|
89
90
|
/**
|
|
91
|
+
* Construct a `Polled` external resource.
|
|
92
|
+
*
|
|
93
|
+
* The URL of the external resource is formed by appending the given base `url` and the result of `encodeParams(params)` where `params` are the parameters provided when instantiating the resource.
|
|
94
|
+
* The default `encodeParams` function produces a query string consisting of a leading `?` followed by the encoding of the `params` given by [URLSearchParams.toString](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/toString) when `params` is an object and otherwise a single key-value pair `params=JSON.stringify(params)`.
|
|
95
|
+
*
|
|
96
|
+
* Note that the result of `encodeParams` contains the `?` separator, but it need not be at the beginning of the returned string, so some parameters can be used in part of the URL preceding the `?`.
|
|
97
|
+
*
|
|
90
98
|
* @param url - HTTP endpoint of external resource to poll.
|
|
91
99
|
* @param duration - Refresh interval, in milliseconds.
|
|
92
100
|
* @param conv - Function to convert data of type `S` received from external resource to `key`-`value` entries.
|
|
93
101
|
* @param encodeParams - Function to use to encode params of type `Json` for external resource request.
|
|
102
|
+
* @param options - Optional parameters.
|
|
103
|
+
* @param options.headers - Additional headers to add to request.
|
|
104
|
+
* @param options.timeout - Timeout for request, in milliseconds. Defaults to 1000ms.
|
|
94
105
|
*/
|
|
95
|
-
constructor(url, duration, conv, encodeParams = defaultParamEncoder) {
|
|
106
|
+
constructor(url, duration, conv, encodeParams = defaultParamEncoder, options) {
|
|
96
107
|
this.url = url;
|
|
97
108
|
this.duration = duration;
|
|
98
109
|
this.conv = conv;
|
|
99
110
|
this.encodeParams = encodeParams;
|
|
111
|
+
this.options = options;
|
|
100
112
|
this.intervals = new Map();
|
|
101
113
|
}
|
|
102
114
|
open(instance, params, callbacks) {
|
|
103
|
-
const url = `${this.url}
|
|
115
|
+
const url = `${this.url}${this.encodeParams(params)}`;
|
|
104
116
|
const call = () => {
|
|
105
117
|
callbacks.loading();
|
|
106
|
-
fetchJSON(url, "GET",
|
|
118
|
+
fetchJSON(url, "GET", this.options)
|
|
107
119
|
.then((r) => {
|
|
108
120
|
callbacks.update(this.conv(r[0]), true);
|
|
109
121
|
})
|
package/dist/external.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external.js","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAmBtC;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAGjC;;OAEG;IACH,YACmB,SAA+C;QAA/C,cAAS,GAAT,SAAS,CAAsC;QANjD,cAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;IAO9D,CAAC;IAEJ,SAAS,CACP,QAAgB,EAChB,YAAoB,EACpB,MAAY,EACZ,SAIC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAE/B,CAAC;QACd,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"external.js","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAmBtC;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAGjC;;OAEG;IACH,YACmB,SAA+C;QAA/C,cAAS,GAAT,SAAS,CAAsC;QANjD,cAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;IAO9D,CAAC;IAEJ,SAAS,CACP,QAAgB,EAChB,YAAoB,EACpB,MAAY,EACZ,SAIC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAE/B,CAAC;QACd,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,wBAAwB,CAChC,2BAA2B,YAAY,GAAG,CAC3C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO;IACT,CAAC;CACF;AAKD,MAAM,OAAO,aAAa;IAA1B;QACmB,cAAS,GAAG,IAAI,GAAG,EAAuC,CAAC;IAuC9E,CAAC;IArCC,IAAI,CACF,QAAgB,EAChB,MAAY,EACZ,SAIC;QAED,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACX,SAAS,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE;oBACjC,MAAM,QAAQ,GAAsB,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACnE,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;gBACrC,CAAC,EAAE,EAAE,CAAC,CAAC;YACT,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,QAAgB;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChD,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,MAAY;IACvC,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAgC,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,KAAK,IAAI,QAAQ;gBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;gBAClE,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC3D,CAAC;;QAAM,OAAO,WAAW,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,MAAM;IAKjB;;;;;;;;;;;;;;;OAeG;IACH,YACmB,GAAW,EACX,QAAgB,EAChB,IAAgC,EAChC,eAEH,mBAAmB,EAChB,OAGhB;QATgB,QAAG,GAAH,GAAG,CAAQ;QACX,aAAQ,GAAR,QAAQ,CAAQ;QAChB,SAAI,GAAJ,IAAI,CAA4B;QAChC,iBAAY,GAAZ,YAAY,CAEI;QAChB,YAAO,GAAP,OAAO,CAGvB;QA5Bc,cAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;IA6BrD,CAAC;IAEJ,IAAI,CACF,QAAgB,EAChB,MAAY,EACZ,SAIC;QAED,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,SAAS,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;iBAChC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAM,CAAC,EAAE,IAAI,CAAC,CAAC;YAC/C,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBACpB,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;QACP,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,QAAgB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF"}
|
package/dist/remote.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IAQvD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAR9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD;;;OAGG;gBAEgB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM;IAGtC;;;;;OAKG;IAEH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,mBAAmB;IAU1D,SAAS,CACP,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,EACZ,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;QAEnE,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;QAE7B,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,GACA,IAAI;
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IAQvD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAR9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD;;;OAGG;gBAEgB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM;IAGtC;;;;;OAKG;IAEH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,mBAAmB;IAU1D,SAAS,CACP,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,EACZ,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;QAEnE,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;QAE7B,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,GACA,IAAI;IA8BP,WAAW,CAAC,QAAQ,EAAE,MAAM;IAQ5B,QAAQ,IAAI,IAAI;CAKjB"}
|
package/dist/remote.js
CHANGED
|
@@ -34,15 +34,12 @@ export class SkipExternalService {
|
|
|
34
34
|
}
|
|
35
35
|
subscribe(instance, resource, params, callbacks) {
|
|
36
36
|
// TODO Manage Status
|
|
37
|
-
fetch(`${this.control_url}/v1/streams`, {
|
|
37
|
+
fetch(`${this.control_url}/v1/streams/${resource}`, {
|
|
38
38
|
method: "POST",
|
|
39
39
|
headers: {
|
|
40
40
|
"Content-Type": "application/json",
|
|
41
41
|
},
|
|
42
|
-
body: JSON.stringify(
|
|
43
|
-
resource,
|
|
44
|
-
params,
|
|
45
|
-
}),
|
|
42
|
+
body: JSON.stringify(params),
|
|
46
43
|
})
|
|
47
44
|
.then((resp) => resp.text())
|
|
48
45
|
.then((uuid) => {
|
package/dist/remote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,iBAAiB;AACjB,OAAO,WAAW,MAAM,aAAa,CAAC;AAUtC;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAG9B;;;OAGG;IACH,YACmB,GAAW,EACX,WAAmB;QADnB,QAAG,GAAH,GAAG,CAAQ;QACX,gBAAW,GAAX,WAAW,CAAQ;QARrB,cAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAStD,CAAC;IAEJ;;;;;OAKG;IACH,gEAAgE;IAChE,MAAM,CAAC,MAAM,CAAC,UAAsB;QAClC,IAAI,GAAG,GAAG,UAAU,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC9E,IAAI,WAAW,GAAG,UAAU,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;QACpF,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,GAAG,GAAG,WAAW,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3E,WAAW,GAAG,WAAW,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;QACnF,CAAC;QACD,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;IAED,SAAS,CACP,QAAgB,EAChB,QAAgB,EAChB,MAAY,EACZ,SAMC;QAED,qBAAqB;QACrB,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,iBAAiB;AACjB,OAAO,WAAW,MAAM,aAAa,CAAC;AAUtC;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAG9B;;;OAGG;IACH,YACmB,GAAW,EACX,WAAmB;QADnB,QAAG,GAAH,GAAG,CAAQ;QACX,gBAAW,GAAX,WAAW,CAAQ;QARrB,cAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAStD,CAAC;IAEJ;;;;;OAKG;IACH,gEAAgE;IAChE,MAAM,CAAC,MAAM,CAAC,UAAsB;QAClC,IAAI,GAAG,GAAG,UAAU,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC9E,IAAI,WAAW,GAAG,UAAU,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;QACpF,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,GAAG,GAAG,WAAW,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3E,WAAW,GAAG,WAAW,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;QACnF,CAAC;QACD,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;IAED,SAAS,CACP,QAAgB,EAChB,QAAgB,EAChB,MAAY,EACZ,SAMC;QAED,qBAAqB;QACrB,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,eAAe,QAAQ,EAAE,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC;aACC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC3B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,eAAe,IAAI,EAAE,CAAC,CAAC;YACnE,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAuB,EAAE,EAAE;gBAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAwB,CAAC;gBAC1D,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAuB,EAAE,EAAE;gBAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAwB,CAAC;gBAC1D,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;gBACvB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,QAAQ;QACN,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
package/dist/rest.d.ts
CHANGED
|
@@ -86,7 +86,7 @@ export declare class SkipServiceBroker {
|
|
|
86
86
|
* @param params - Resource instance parameters.
|
|
87
87
|
* @param key - Key to read.
|
|
88
88
|
* @returns The value associated to the key.
|
|
89
|
-
* @throws `
|
|
89
|
+
* @throws `SkipNonUniqueValueError` when the key is associated to either zero or multiple values.
|
|
90
90
|
*/
|
|
91
91
|
getUnique<K extends Json, V extends Json>(resource: string, params: Json, key: K): Promise<V>;
|
|
92
92
|
/**
|
package/dist/rest.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SkipNonUniqueValueError, SkipFetchError } from "@skipruntime/core";
|
|
2
2
|
function toHttp(entrypoint) {
|
|
3
3
|
if (entrypoint.secured)
|
|
4
4
|
return `https://${entrypoint.host}:${entrypoint.control_port}`;
|
|
@@ -29,10 +29,10 @@ export async function fetchJSON(url, method = "GET", options = {
|
|
|
29
29
|
Accept: "application/json",
|
|
30
30
|
...options.headers,
|
|
31
31
|
},
|
|
32
|
-
signal: AbortSignal.timeout(1000),
|
|
32
|
+
signal: AbortSignal.timeout(options.timeout ?? 1000),
|
|
33
33
|
});
|
|
34
34
|
if (!response.ok) {
|
|
35
|
-
throw new
|
|
35
|
+
throw new SkipFetchError(`${response.status}: ${response.statusText}`);
|
|
36
36
|
}
|
|
37
37
|
const responseText = await response.text();
|
|
38
38
|
const responseJSON = responseText.length > 0 && responseText != response.statusText
|
|
@@ -96,12 +96,12 @@ export class SkipServiceBroker {
|
|
|
96
96
|
* @param params - Resource instance parameters.
|
|
97
97
|
* @param key - Key to read.
|
|
98
98
|
* @returns The value associated to the key.
|
|
99
|
-
* @throws `
|
|
99
|
+
* @throws `SkipNonUniqueValueError` when the key is associated to either zero or multiple values.
|
|
100
100
|
*/
|
|
101
101
|
async getUnique(resource, params, key) {
|
|
102
102
|
return this.getArray(resource, params, key).then((values) => {
|
|
103
103
|
if (values.length !== 1 || values[0] === undefined)
|
|
104
|
-
throw new
|
|
104
|
+
throw new SkipNonUniqueValueError();
|
|
105
105
|
return values[0];
|
|
106
106
|
});
|
|
107
107
|
}
|
package/dist/rest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skipruntime/helpers",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dist/index.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"eventsource": "^2.0.2",
|
|
23
23
|
"express": "^4.21.1",
|
|
24
|
-
"@skipruntime/core": "0.0.
|
|
24
|
+
"@skipruntime/core": "0.0.10"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/eventsource": "^1.1.15"
|
package/src/external.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Entry, ExternalService, Json } from "@skipruntime/core";
|
|
2
|
+
import { SkipUnknownResourceError } from "@skipruntime/core";
|
|
2
3
|
import { fetchJSON } from "./rest.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -47,7 +48,9 @@ export class GenericExternalService implements ExternalService {
|
|
|
47
48
|
| ExternalResource
|
|
48
49
|
| undefined;
|
|
49
50
|
if (!resource) {
|
|
50
|
-
throw new
|
|
51
|
+
throw new SkipUnknownResourceError(
|
|
52
|
+
`Unknown resource named '${resourceName}'`,
|
|
53
|
+
);
|
|
51
54
|
}
|
|
52
55
|
this.instances.set(instance, resource);
|
|
53
56
|
resource.open(instance, params, callbacks);
|
|
@@ -118,8 +121,8 @@ function defaultParamEncoder(params: Json): string {
|
|
|
118
121
|
if (typeof value == "object") queryParams[key] = JSON.stringify(value);
|
|
119
122
|
else queryParams[key] = value.toString();
|
|
120
123
|
}
|
|
121
|
-
return new URLSearchParams(queryParams).toString()
|
|
122
|
-
} else return
|
|
124
|
+
return `?${new URLSearchParams(queryParams).toString()}`;
|
|
125
|
+
} else return `?params=${JSON.stringify(params)}`;
|
|
123
126
|
}
|
|
124
127
|
|
|
125
128
|
/**
|
|
@@ -135,10 +138,20 @@ export class Polled<S extends Json, K extends Json, V extends Json>
|
|
|
135
138
|
private readonly intervals = new Map<string, Timeout>();
|
|
136
139
|
|
|
137
140
|
/**
|
|
141
|
+
* Construct a `Polled` external resource.
|
|
142
|
+
*
|
|
143
|
+
* The URL of the external resource is formed by appending the given base `url` and the result of `encodeParams(params)` where `params` are the parameters provided when instantiating the resource.
|
|
144
|
+
* The default `encodeParams` function produces a query string consisting of a leading `?` followed by the encoding of the `params` given by [URLSearchParams.toString](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/toString) when `params` is an object and otherwise a single key-value pair `params=JSON.stringify(params)`.
|
|
145
|
+
*
|
|
146
|
+
* Note that the result of `encodeParams` contains the `?` separator, but it need not be at the beginning of the returned string, so some parameters can be used in part of the URL preceding the `?`.
|
|
147
|
+
*
|
|
138
148
|
* @param url - HTTP endpoint of external resource to poll.
|
|
139
149
|
* @param duration - Refresh interval, in milliseconds.
|
|
140
150
|
* @param conv - Function to convert data of type `S` received from external resource to `key`-`value` entries.
|
|
141
151
|
* @param encodeParams - Function to use to encode params of type `Json` for external resource request.
|
|
152
|
+
* @param options - Optional parameters.
|
|
153
|
+
* @param options.headers - Additional headers to add to request.
|
|
154
|
+
* @param options.timeout - Timeout for request, in milliseconds. Defaults to 1000ms.
|
|
142
155
|
*/
|
|
143
156
|
constructor(
|
|
144
157
|
private readonly url: string,
|
|
@@ -147,6 +160,10 @@ export class Polled<S extends Json, K extends Json, V extends Json>
|
|
|
147
160
|
private readonly encodeParams: (
|
|
148
161
|
params: Json,
|
|
149
162
|
) => string = defaultParamEncoder,
|
|
163
|
+
private readonly options?: {
|
|
164
|
+
headers?: { [header: string]: string };
|
|
165
|
+
timeout?: number;
|
|
166
|
+
},
|
|
150
167
|
) {}
|
|
151
168
|
|
|
152
169
|
open(
|
|
@@ -158,10 +175,10 @@ export class Polled<S extends Json, K extends Json, V extends Json>
|
|
|
158
175
|
loading: () => void;
|
|
159
176
|
},
|
|
160
177
|
) {
|
|
161
|
-
const url = `${this.url}
|
|
178
|
+
const url = `${this.url}${this.encodeParams(params)}`;
|
|
162
179
|
const call = () => {
|
|
163
180
|
callbacks.loading();
|
|
164
|
-
fetchJSON(url, "GET",
|
|
181
|
+
fetchJSON(url, "GET", this.options)
|
|
165
182
|
.then((r) => {
|
|
166
183
|
callbacks.update(this.conv(r[0] as S), true);
|
|
167
184
|
})
|
package/src/remote.ts
CHANGED
|
@@ -57,15 +57,12 @@ export class SkipExternalService implements ExternalService {
|
|
|
57
57
|
},
|
|
58
58
|
): void {
|
|
59
59
|
// TODO Manage Status
|
|
60
|
-
fetch(`${this.control_url}/v1/streams`, {
|
|
60
|
+
fetch(`${this.control_url}/v1/streams/${resource}`, {
|
|
61
61
|
method: "POST",
|
|
62
62
|
headers: {
|
|
63
63
|
"Content-Type": "application/json",
|
|
64
64
|
},
|
|
65
|
-
body: JSON.stringify(
|
|
66
|
-
resource,
|
|
67
|
-
params,
|
|
68
|
-
}),
|
|
65
|
+
body: JSON.stringify(params),
|
|
69
66
|
})
|
|
70
67
|
.then((resp) => resp.text())
|
|
71
68
|
.then((uuid) => {
|
package/src/rest.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Json, Entry } from "@skipruntime/core";
|
|
2
|
-
import {
|
|
2
|
+
import { SkipNonUniqueValueError, SkipFetchError } from "@skipruntime/core";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* An entry point of a Skip reactive service.
|
|
@@ -67,10 +67,10 @@ export async function fetchJSON<V extends Json>(
|
|
|
67
67
|
Accept: "application/json",
|
|
68
68
|
...options.headers,
|
|
69
69
|
},
|
|
70
|
-
signal: AbortSignal.timeout(1000),
|
|
70
|
+
signal: AbortSignal.timeout(options.timeout ?? 1000),
|
|
71
71
|
});
|
|
72
72
|
if (!response.ok) {
|
|
73
|
-
throw new
|
|
73
|
+
throw new SkipFetchError(`${response.status}: ${response.statusText}`);
|
|
74
74
|
}
|
|
75
75
|
const responseText = await response.text();
|
|
76
76
|
const responseJSON =
|
|
@@ -158,7 +158,7 @@ export class SkipServiceBroker {
|
|
|
158
158
|
* @param params - Resource instance parameters.
|
|
159
159
|
* @param key - Key to read.
|
|
160
160
|
* @returns The value associated to the key.
|
|
161
|
-
* @throws `
|
|
161
|
+
* @throws `SkipNonUniqueValueError` when the key is associated to either zero or multiple values.
|
|
162
162
|
*/
|
|
163
163
|
async getUnique<K extends Json, V extends Json>(
|
|
164
164
|
resource: string,
|
|
@@ -167,7 +167,7 @@ export class SkipServiceBroker {
|
|
|
167
167
|
): Promise<V> {
|
|
168
168
|
return this.getArray<K, V>(resource, params, key).then((values) => {
|
|
169
169
|
if (values.length !== 1 || values[0] === undefined)
|
|
170
|
-
throw new
|
|
170
|
+
throw new SkipNonUniqueValueError();
|
|
171
171
|
return values[0];
|
|
172
172
|
});
|
|
173
173
|
}
|