@skipruntime/helpers 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/rest.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rest.js","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -1,24 +1,22 @@
1
- import type { Opt } from "@skip-wasm/std";
1
+ import type { Nullable } from "@skip-wasm/std";
2
2
  import { ManyToOneMapper } from "@skipruntime/api";
3
- import type { Accumulator, NonEmptyIterator, ReactiveResponse, TJSON } from "@skipruntime/api";
4
- export declare class Sum implements Accumulator<number, number> {
3
+ import type { Reducer, NonEmptyIterator, Json } from "@skipruntime/api";
4
+ export declare class Sum implements Reducer<number, number> {
5
5
  default: number;
6
- accumulate(acc: number, value: number): number;
7
- dismiss(acc: number, value: number): Opt<number>;
6
+ add(acc: number, value: number): number;
7
+ remove(acc: number, value: number): Nullable<number>;
8
8
  }
9
- export declare class Min implements Accumulator<number, number> {
9
+ export declare class Min implements Reducer<number, number> {
10
10
  default: null;
11
- accumulate(acc: Opt<number>, value: number): number;
12
- dismiss(acc: number, value: number): Opt<number>;
11
+ add(acc: Nullable<number>, value: number): number;
12
+ remove(acc: number, value: number): Nullable<number>;
13
13
  }
14
- export declare class Max implements Accumulator<number, number> {
14
+ export declare class Max implements Reducer<number, number> {
15
15
  default: null;
16
- accumulate(acc: Opt<number>, value: number): number;
17
- dismiss(acc: number, value: number): Opt<number>;
16
+ add(acc: Nullable<number>, value: number): number;
17
+ remove(acc: number, value: number): Nullable<number>;
18
18
  }
19
- export declare class CountMapper<K extends TJSON, V extends TJSON> extends ManyToOneMapper<K, V, number> {
19
+ export declare class CountMapper<K extends Json, V extends Json> extends ManyToOneMapper<K, V, number> {
20
20
  mapValues(values: NonEmptyIterator<V>): number;
21
21
  }
22
- export declare function parseReactiveResponse(header: Headers | string): ReactiveResponse | undefined;
23
- export declare function reactiveResponseHeader(reactiveResponse: ReactiveResponse): [string, string];
24
22
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,EACN,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,GAAI,YAAW,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IACrD,OAAO,SAAK;IAEZ,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAI9C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;CAGjD;AAED,qBAAa,GAAI,YAAW,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IACrD,OAAO,OAAQ;IAEf,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAInD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;CAGjD;AAED,qBAAa,GAAI,YAAW,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IACrD,OAAO,OAAQ;IAEf,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAInD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;CAGjD;AAED,qBAAa,WAAW,CACtB,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,KAAK,CACf,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM;CAG/C;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,GAAG,MAAM,GACvB,gBAAgB,GAAG,SAAS,CAU9B;AAED,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,gBAAgB,GACjC,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExE,qBAAa,GAAI,YAAW,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACjD,OAAO,SAAK;IAEZ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;CAGrD;AAED,qBAAa,GAAI,YAAW,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACjD,OAAO,OAAQ;IAEf,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAIjD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;CAGrD;AAED,qBAAa,GAAI,YAAW,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACjD,OAAO,OAAQ;IAEf,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAIjD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;CAGrD;AAED,qBAAa,WAAW,CACtB,CAAC,SAAS,IAAI,EACd,CAAC,SAAS,IAAI,CACd,SAAQ,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM;CAG/C"}
package/dist/utils.js CHANGED
@@ -3,10 +3,10 @@ export class Sum {
3
3
  constructor() {
4
4
  this.default = 0;
5
5
  }
6
- accumulate(acc, value) {
6
+ add(acc, value) {
7
7
  return acc + value;
8
8
  }
9
- dismiss(acc, value) {
9
+ remove(acc, value) {
10
10
  return acc - value;
11
11
  }
12
12
  }
@@ -14,10 +14,10 @@ export class Min {
14
14
  constructor() {
15
15
  this.default = null;
16
16
  }
17
- accumulate(acc, value) {
17
+ add(acc, value) {
18
18
  return acc === null ? value : Math.min(acc, value);
19
19
  }
20
- dismiss(acc, value) {
20
+ remove(acc, value) {
21
21
  return value > acc ? acc : null;
22
22
  }
23
23
  }
@@ -25,10 +25,10 @@ export class Max {
25
25
  constructor() {
26
26
  this.default = null;
27
27
  }
28
- accumulate(acc, value) {
28
+ add(acc, value) {
29
29
  return acc === null ? value : Math.max(acc, value);
30
30
  }
31
- dismiss(acc, value) {
31
+ remove(acc, value) {
32
32
  return value < acc ? acc : null;
33
33
  }
34
34
  }
@@ -37,22 +37,4 @@ export class CountMapper extends ManyToOneMapper {
37
37
  return values.toArray().length;
38
38
  }
39
39
  }
40
- export function parseReactiveResponse(header) {
41
- const strReactiveResponse = typeof header == "string"
42
- ? header
43
- : header.get("Skip-Reactive-Response-Token");
44
- if (!strReactiveResponse)
45
- return undefined;
46
- return JSON.parse(strReactiveResponse, (key, value) => {
47
- if (key == "watermark")
48
- return BigInt(value);
49
- return value;
50
- });
51
- }
52
- export function reactiveResponseHeader(reactiveResponse) {
53
- return [
54
- "Skip-Reactive-Response-Token",
55
- JSON.stringify(reactiveResponse, (_key, value) => typeof value === "bigint" ? value.toString() : value),
56
- ];
57
- }
58
40
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAQnD,MAAM,OAAO,GAAG;IAAhB;QACE,YAAO,GAAG,CAAC,CAAC;IASd,CAAC;IAPC,UAAU,CAAC,GAAW,EAAE,KAAa;QACnC,OAAO,GAAG,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,OAAO,GAAG,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,GAAG;IAAhB;QACE,YAAO,GAAG,IAAI,CAAC;IASjB,CAAC;IAPC,UAAU,CAAC,GAAgB,EAAE,KAAa;QACxC,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,OAAO,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,GAAG;IAAhB;QACE,YAAO,GAAG,IAAI,CAAC;IASjB,CAAC;IAPC,UAAU,CAAC,GAAgB,EAAE,KAAa;QACxC,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,OAAO,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,WAGX,SAAQ,eAA6B;IACrC,SAAS,CAAC,MAA2B;QACnC,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAwB;IAExB,MAAM,mBAAmB,GACvB,OAAO,MAAM,IAAI,QAAQ;QACvB,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IACjD,IAAI,CAAC,mBAAmB;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;QACpE,IAAI,GAAG,IAAI,WAAW;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC,CAAqB,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,gBAAkC;IAElC,OAAO;QACL,8BAA8B;QAC9B,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,IAAY,EAAE,KAAc,EAAE,EAAE,CAChE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CACrD;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,MAAM,OAAO,GAAG;IAAhB;QACE,YAAO,GAAG,CAAC,CAAC;IASd,CAAC;IAPC,GAAG,CAAC,GAAW,EAAE,KAAa;QAC5B,OAAO,GAAG,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,KAAa;QAC/B,OAAO,GAAG,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,GAAG;IAAhB;QACE,YAAO,GAAG,IAAI,CAAC;IASjB,CAAC;IAPC,GAAG,CAAC,GAAqB,EAAE,KAAa;QACtC,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,KAAa;QAC/B,OAAO,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,GAAG;IAAhB;QACE,YAAO,GAAG,IAAI,CAAC;IASjB,CAAC;IAPC,GAAG,CAAC,GAAqB,EAAE,KAAa;QACtC,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,KAAa;QAC/B,OAAO,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,WAGX,SAAQ,eAA6B;IACrC,SAAS,CAAC,MAA2B;QACnC,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;IACjC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skipruntime/helpers",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dist/index.js",
@@ -20,8 +20,11 @@
20
20
  "node": ">=22.6.0 <23.0.0"
21
21
  },
22
22
  "dependencies": {
23
+ "eventsource": "^2.0.2",
23
24
  "express": "^4.21.0",
24
- "@skipruntime/client": "^0.0.1",
25
- "@skipruntime/api": "^0.0.1"
25
+ "@skipruntime/api": "^0.0.3"
26
+ },
27
+ "devDependencies": {
28
+ "@types/eventsource": "^1.1.15"
26
29
  }
27
30
  }
package/src/external.ts CHANGED
@@ -1,35 +1,30 @@
1
- import type { Entry, ExternalService, TJSON } from "@skipruntime/api";
1
+ import type { Entry, ExternalService, Json } from "@skipruntime/api";
2
2
  import { fetchJSON } from "./rest.js";
3
3
 
4
4
  export interface ExternalResource {
5
5
  open(
6
- params: Record<string, string | number>,
6
+ params: { [param: string]: string | number },
7
7
  callbacks: {
8
- update: (updates: Entry<TJSON, TJSON>[], isInit: boolean) => void;
9
- error: (error: TJSON) => void;
8
+ update: (updates: Entry<Json, Json>[], isInit: boolean) => void;
9
+ error: (error: Json) => void;
10
10
  loading: () => void;
11
11
  },
12
- reactiveAuth?: Uint8Array,
13
12
  ): void;
14
13
 
15
- close(
16
- params: Record<string, string | number>,
17
- reactiveAuth?: Uint8Array,
18
- ): void;
14
+ close(params: { [param: string]: string | number }): void;
19
15
  }
20
16
 
21
17
  export class GenericExternalService implements ExternalService {
22
- constructor(private resources: Record<string, ExternalResource>) {}
18
+ constructor(private resources: { [name: string]: ExternalResource }) {}
23
19
 
24
20
  subscribe(
25
21
  resourceName: string,
26
- params: Record<string, string | number>,
22
+ params: { [param: string]: string | number },
27
23
  callbacks: {
28
- update: (updates: Entry<TJSON, TJSON>[], isInit: boolean) => void;
29
- error: (error: TJSON) => void;
24
+ update: (updates: Entry<Json, Json>[], isInit: boolean) => void;
25
+ error: (error: Json) => void;
30
26
  loading: () => void;
31
27
  },
32
- reactiveAuth?: Uint8Array,
33
28
  ): void {
34
29
  const resource = this.resources[resourceName] as
35
30
  | ExternalResource
@@ -37,21 +32,17 @@ export class GenericExternalService implements ExternalService {
37
32
  if (!resource) {
38
33
  throw new Error(`Unkonwn resource named '${resourceName}'`);
39
34
  }
40
- resource.open(params, callbacks, reactiveAuth);
35
+ resource.open(params, callbacks);
41
36
  }
42
37
 
43
- unsubscribe(
44
- resourceName: string,
45
- params: Record<string, string>,
46
- reactiveAuth?: Uint8Array,
47
- ) {
38
+ unsubscribe(resourceName: string, params: { [param: string]: string }) {
48
39
  const resource = this.resources[resourceName] as
49
40
  | ExternalResource
50
41
  | undefined;
51
42
  if (!resource) {
52
43
  throw new Error(`Unkonwn resource named '${resourceName}'`);
53
44
  }
54
- resource.close(params, reactiveAuth);
45
+ resource.close(params);
55
46
  }
56
47
 
57
48
  shutdown(): void {
@@ -62,16 +53,15 @@ export class GenericExternalService implements ExternalService {
62
53
  type Timeout = ReturnType<typeof setInterval>;
63
54
 
64
55
  export class TimerResource implements ExternalResource {
65
- private intervals = new Map<string, Record<string, Timeout>>();
56
+ private intervals = new Map<string, { [name: string]: Timeout }>();
66
57
 
67
58
  open(
68
- params: Record<string, string | number>,
59
+ params: { [param: string]: string | number },
69
60
  callbacks: {
70
- update: (updates: Entry<TJSON, TJSON>[], isInit: boolean) => void;
71
- error: (error: TJSON) => void;
61
+ update: (updates: Entry<Json, Json>[], isInit: boolean) => void;
62
+ error: (error: Json) => void;
72
63
  loading: () => void;
73
64
  },
74
- reactiveAuth?: Uint8Array,
75
65
  ) {
76
66
  const time = new Date().getTime();
77
67
  const values: Entry<string, number>[] = [];
@@ -79,13 +69,13 @@ export class TimerResource implements ExternalResource {
79
69
  values.push([name, [time]]);
80
70
  }
81
71
  callbacks.update(values, true);
82
- const id = toId(params, reactiveAuth);
83
- const intervals: Record<string, Timeout> = {};
72
+ const id = toId(params);
73
+ const intervals: { [name: string]: Timeout } = {};
84
74
  for (const [name, duration] of Object.entries(params)) {
85
75
  const ms = Number(duration);
86
76
  if (ms > 0) {
87
77
  intervals[name] = setInterval(() => {
88
- const newvalue: Entry<TJSON, TJSON> = [name, [new Date().getTime()]];
78
+ const newvalue: Entry<Json, Json> = [name, [new Date().getTime()]];
89
79
  callbacks.update([newvalue], true);
90
80
  }, ms);
91
81
  }
@@ -93,11 +83,8 @@ export class TimerResource implements ExternalResource {
93
83
  this.intervals.set(id, intervals);
94
84
  }
95
85
 
96
- close(
97
- params: Record<string, string | number>,
98
- reactiveAuth?: Uint8Array,
99
- ): void {
100
- const intervals = this.intervals.get(toId(params, reactiveAuth));
86
+ close(params: { [param: string]: string | number }): void {
87
+ const intervals = this.intervals.get(toId(params));
101
88
  if (intervals != null) {
102
89
  for (const interval of Object.values(intervals)) {
103
90
  clearInterval(interval);
@@ -106,7 +93,7 @@ export class TimerResource implements ExternalResource {
106
93
  }
107
94
  }
108
95
 
109
- export class Polled<S extends TJSON, K extends TJSON, V extends TJSON>
96
+ export class Polled<S extends Json, K extends Json, V extends Json>
110
97
  implements ExternalResource
111
98
  {
112
99
  private intervals = new Map<string, Timeout>();
@@ -118,20 +105,19 @@ export class Polled<S extends TJSON, K extends TJSON, V extends TJSON>
118
105
  ) {}
119
106
 
120
107
  open(
121
- params: Record<string, string | number>,
108
+ params: { [param: string]: string | number },
122
109
  callbacks: {
123
- update: (updates: Entry<TJSON, TJSON>[], isInit: boolean) => void;
124
- error: (error: TJSON) => void;
110
+ update: (updates: Entry<Json, Json>[], isInit: boolean) => void;
111
+ error: (error: Json) => void;
125
112
  loading: () => void;
126
113
  },
127
- reactiveAuth?: Uint8Array,
128
114
  ): void {
129
- this.close(params, reactiveAuth);
130
- const querieParams: Record<string, string> = {};
115
+ this.close(params);
116
+ const queryParams: { [param: string]: string } = {};
131
117
  for (const [key, value] of Object.entries(params)) {
132
- querieParams[key] = value.toString();
118
+ queryParams[key] = value.toString();
133
119
  }
134
- const strParams = new URLSearchParams(querieParams).toString();
120
+ const strParams = new URLSearchParams(queryParams).toString();
135
121
  const url = `${this.url}?${strParams}`;
136
122
  const call = () => {
137
123
  callbacks.loading();
@@ -145,30 +131,20 @@ export class Polled<S extends TJSON, K extends TJSON, V extends TJSON>
145
131
  });
146
132
  };
147
133
  call();
148
- this.intervals.set(
149
- toId(params, reactiveAuth),
150
- setInterval(call, this.duration),
151
- );
134
+ this.intervals.set(toId(params), setInterval(call, this.duration));
152
135
  }
153
136
 
154
- close(
155
- params: Record<string, string | number>,
156
- reactiveAuth?: Uint8Array,
157
- ): void {
158
- const interval = this.intervals.get(toId(params, reactiveAuth));
137
+ close(params: { [param: string]: string | number }): void {
138
+ const interval = this.intervals.get(toId(params));
159
139
  if (interval) {
160
140
  clearInterval(interval);
161
141
  }
162
142
  }
163
143
  }
164
144
 
165
- function toId(
166
- params: Record<string, string | number>,
167
- reactiveAuth?: Uint8Array,
168
- ): string {
145
+ function toId(params: { [param: string]: string | number }): string {
169
146
  const strparams = Object.entries(params)
170
147
  .map(([key, value]) => `${key}:${value.toString()}`)
171
148
  .sort();
172
- const hex = reactiveAuth ? Buffer.from(reactiveAuth).toString("hex") : "";
173
- return `[${strparams.join(",")}]${hex}`;
149
+ return `[${strparams.join(",")}]`;
174
150
  }
package/src/index.ts CHANGED
@@ -4,11 +4,5 @@ export {
4
4
  GenericExternalService,
5
5
  Polled,
6
6
  } from "./external.js";
7
- export {
8
- Sum,
9
- Min,
10
- Max,
11
- CountMapper,
12
- parseReactiveResponse,
13
- reactiveResponseHeader,
14
- } from "./utils.js";
7
+ export { Sum, Min, Max, CountMapper } from "./utils.js";
8
+ export { RESTWrapperOfSkipService } from "./rest.js";
package/src/remote.ts CHANGED
@@ -1,158 +1,94 @@
1
- import type {
2
- Entry,
3
- ExternalService,
4
- ReactiveResponse,
5
- TJSON,
6
- } from "@skipruntime/api";
7
- import { parseReactiveResponse } from "./utils.js";
1
+ // TODO: Remove once global `EventSource` makes it out of experimental
2
+ // in nodejs LTS.
3
+ import EventSource from "eventsource";
8
4
 
9
- import { connect, Protocol, Client } from "@skipruntime/client";
10
- import { fetchJSON, type Entrypoint } from "./rest.js";
5
+ import type { Entry, ExternalService, Json } from "@skipruntime/api";
6
+
7
+ import type { Entrypoint } from "./rest.js";
11
8
 
12
9
  interface Closable {
13
10
  close(): void;
14
11
  }
15
12
 
16
13
  export class SkipExternalService implements ExternalService {
17
- private client?: Promise<[Client, Protocol.Creds]>;
18
14
  private resources = new Map<string, Closable>();
19
15
 
20
16
  constructor(
21
17
  private url: string,
22
- private auth: (
23
- resource: string,
24
- params: Record<string, string>,
25
- reactiveAuth: Uint8Array,
26
- ) => Promise<ReactiveResponse>,
27
- private creds?: Protocol.Creds,
18
+ private control_url: string,
28
19
  ) {}
29
20
 
30
- static fromEntrypoint(
31
- entrypoint: Entrypoint,
32
- auth: (
33
- resource: string,
34
- params: Record<string, string>,
35
- reactiveAuth: Uint8Array,
36
- ) => Promise<ReactiveResponse>,
37
- creds?: Protocol.Creds,
38
- ): SkipExternalService {
39
- let url = `ws://${entrypoint.host}:${entrypoint.port.toString()}`;
40
- if (entrypoint.secured)
41
- url = `wss://${entrypoint.host}:${entrypoint.port.toString()}`;
42
- return new SkipExternalService(url, auth, creds);
43
- }
44
-
45
- static direct(
46
- entrypoint: Entrypoint,
47
- creds?: Protocol.Creds,
48
- ): SkipExternalService {
49
- let url = `http://${entrypoint.host}:${entrypoint.port.toString()}`;
50
- if (entrypoint.secured)
51
- url = `https://${entrypoint.host}:${entrypoint.port.toString()}`;
52
- const auth = async (
53
- resource: string,
54
- params: Record<string, string>,
55
- reactiveAuth: Uint8Array,
56
- ) => {
57
- const qParams = new URLSearchParams(params).toString();
58
- const header = {
59
- "X-Reactive-Auth": Buffer.from(reactiveAuth).toString("base64"),
60
- };
61
- const [_data, headers] = await fetchJSON(
62
- `${url}/v1/${resource}?${qParams}`,
63
- "HEAD",
64
- header,
65
- );
66
- const reactiveResponse = parseReactiveResponse(headers);
67
- if (!reactiveResponse)
68
- throw new Error("Reactive response must be suplied.");
69
- return reactiveResponse;
70
- };
71
- return new SkipExternalService(url, auth, creds);
21
+ // TODO: Support Skip external services going through a gateway.
22
+ static direct(entrypoint: Entrypoint): SkipExternalService {
23
+ let url = `http://${entrypoint.host}:${entrypoint.streaming_port.toString()}`;
24
+ let control_url = `http://${entrypoint.host}:${entrypoint.control_port.toString()}`;
25
+ if (entrypoint.secured) {
26
+ url = `https://${entrypoint.host}:${entrypoint.streaming_port.toString()}`;
27
+ control_url = `https://${entrypoint.host}:${entrypoint.control_port.toString()}`;
28
+ }
29
+ return new SkipExternalService(url, control_url);
72
30
  }
73
31
 
74
32
  subscribe(
75
33
  resource: string,
76
- params: Record<string, string>,
34
+ params: { [param: string]: string },
77
35
  callbacks: {
78
- update: (updates: Entry<TJSON, TJSON>[], isInit: boolean) => void;
79
- error: (error: TJSON) => void;
36
+ update: (updates: Entry<Json, Json>[], isInitial: boolean) => void;
37
+ // FIXME: What is `error()` used for?
38
+ error: (error: Json) => void;
39
+ // FIXME: What is `loading()` used for?
80
40
  loading: () => void;
81
41
  },
82
- reactiveAuth?: Uint8Array,
83
42
  ): void {
84
- if (!this.client) {
85
- if (!this.creds) {
86
- this.client = Protocol.generateCredentials().then((creds) => {
87
- this.creds = creds;
88
- return connect(this.url, this.creds).then((c) => [c, creds]);
43
+ // TODO Manage Status
44
+ fetch(`${this.control_url}/v1/streams`, {
45
+ method: "POST",
46
+ headers: {
47
+ "Content-Type": "application/json",
48
+ },
49
+ body: JSON.stringify({
50
+ resource,
51
+ params,
52
+ }),
53
+ })
54
+ .then((resp) => resp.json())
55
+ .then((uuid) => {
56
+ const evSource = new EventSource(`${this.url}/v1/streams/${uuid}`);
57
+ evSource.addEventListener("init", (e: MessageEvent<string>) => {
58
+ const updates = JSON.parse(e.data) as Entry<Json, Json>[];
59
+ callbacks.update(updates, true);
89
60
  });
90
- } else {
91
- this.client = connect(this.url, this.creds).then((c) => {
92
- return [c, this.creds!];
61
+ evSource.addEventListener("update", (e: MessageEvent<string>) => {
62
+ const updates = JSON.parse(e.data) as Entry<Json, Json>[];
63
+ callbacks.update(updates, false);
93
64
  });
94
- }
95
- }
96
- this.subscribe_(resource, params, callbacks, reactiveAuth).catch(
97
- (e: unknown) => {
98
- console.error(e);
99
- },
100
- );
65
+ evSource.onerror = (e) => {
66
+ console.log(e);
67
+ };
68
+ this.resources.set(this.toId(resource, params), evSource);
69
+ })
70
+ .catch((e: unknown) => {
71
+ console.log(e);
72
+ });
101
73
  }
102
74
 
103
- unsubscribe(
104
- resource: string,
105
- params: Record<string, string>,
106
- reactiveAuth?: Uint8Array,
107
- ) {
108
- const closable = this.resources.get(
109
- this.toId(resource, params, reactiveAuth),
110
- );
75
+ unsubscribe(resource: string, params: { [param: string]: string }) {
76
+ const closable = this.resources.get(this.toId(resource, params));
111
77
  if (closable) closable.close();
112
78
  }
113
79
 
114
80
  shutdown(): void {
115
- if (this.client) {
116
- this.client
117
- .then((client) => {
118
- client[0].close();
119
- })
120
- .catch((e: unknown) => console.error(e));
81
+ for (const res of this.resources.values()) {
82
+ res.close();
121
83
  }
122
84
  }
123
85
 
124
- private async subscribe_(
125
- resource: string,
126
- params: Record<string, string>,
127
- callbacks: {
128
- update: (updates: Entry<TJSON, TJSON>[], isInit: boolean) => void;
129
- error: (error: TJSON) => void;
130
- loading: () => void;
131
- },
132
- reactiveAuth?: Uint8Array,
133
- ): Promise<void> {
134
- const [client, creds] = await this.client!;
135
- const publicKey = new Uint8Array(await Protocol.exportKey(creds.publicKey));
136
- const reactive = await this.auth(resource, params, publicKey);
137
- // TODO Manage Status
138
- const close = client.subscribe(
139
- reactive.collection,
140
- BigInt(reactive.watermark),
141
- callbacks.update,
142
- );
143
- this.resources.set(this.toId(resource, params, reactiveAuth), close);
144
- }
145
-
146
- private toId(
147
- resource: string,
148
- params: Record<string, string>,
149
- reactiveAuth?: Uint8Array,
150
- ): string {
86
+ private toId(resource: string, params: { [param: string]: string }): string {
87
+ // TODO: This is equivalent to `querystring.encode(params, ',', ':')`.
151
88
  const strparams: string[] = [];
152
89
  for (const key of Object.keys(params).sort()) {
153
90
  strparams.push(`${key}:${params[key]}`);
154
91
  }
155
- const hex = reactiveAuth ? Buffer.from(reactiveAuth).toString("hex") : "";
156
- return `${resource}[${strparams.join(",")}]${hex}`;
92
+ return `${resource}[${strparams.join(",")}]`;
157
93
  }
158
94
  }