@streamlayer/sdk-web-api 0.23.0 → 0.24.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/lib/grpc/queries/user.js +2 -7
- package/lib/grpc/transport.d.ts +5 -4
- package/lib/grpc/transport.js +15 -7
- package/lib/index.d.ts +2 -0
- package/lib/index.js +10 -0
- package/package.json +7 -7
package/lib/grpc/queries/user.js
CHANGED
|
@@ -15,13 +15,8 @@ export const $user = ($userToken, transport) => {
|
|
|
15
15
|
export const bypassLogin = (transport) => {
|
|
16
16
|
const { client, createRequestOptions } = transport.createPromiseClient(Users, { method: 'bypassAuth' });
|
|
17
17
|
const contextValues = createRequestOptions({ retryAttempts: 0 });
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const res = await client.bypassAuth({ userKey, schema, init }, { contextValues });
|
|
21
|
-
if (res.meta) {
|
|
22
|
-
res.meta.inviterKey = inviterKey;
|
|
23
|
-
}
|
|
24
|
-
return res;
|
|
18
|
+
return ({ userKey, schema, init, inviterKey }) => {
|
|
19
|
+
return client.bypassAuth({ userKey, schema, init, inviterKey }, { contextValues });
|
|
25
20
|
};
|
|
26
21
|
};
|
|
27
22
|
export const bypassAuth = (transport, params) => {
|
package/lib/grpc/transport.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { MapStore } from '@streamlayer/sdk-web-interfaces';
|
|
1
2
|
import { createRouterTransport, ConnectRouter, Interceptor, PromiseClient, UnaryRequest, StreamRequest } from '@connectrpc/connect';
|
|
2
3
|
import type { ServiceType, Message, PlainMessage } from '@bufbuild/protobuf';
|
|
3
4
|
import { createGrpcWebTransport } from '@connectrpc/connect-web';
|
|
4
|
-
import type
|
|
5
|
-
import { nanoquery } from '@nanostores/query';
|
|
5
|
+
import { type KeyInput, nanoquery } from '@nanostores/query';
|
|
6
6
|
import { Atom } from 'nanostores';
|
|
7
7
|
import { ServerStreamSubscription, type ServerStreamSubscriptionOptions } from './subscription';
|
|
8
8
|
type KnownHeaders = {
|
|
9
9
|
authorization?: string;
|
|
10
10
|
sdk?: string;
|
|
11
11
|
'sl-device-id': string;
|
|
12
|
+
'sl-device-os': string;
|
|
12
13
|
'sl-user-id'?: string;
|
|
13
14
|
} & Record<string, string>;
|
|
14
15
|
export type GrpcTransport = Transport['transport'];
|
|
@@ -44,10 +45,10 @@ export declare class Transport {
|
|
|
44
45
|
readonly streamTransport: ReturnType<typeof createGrpcWebTransport>;
|
|
45
46
|
readonly nanoquery: NanoqueryObjectType;
|
|
46
47
|
readonly host: string;
|
|
48
|
+
readonly $headers: MapStore<KnownHeaders>;
|
|
47
49
|
protected interceptors: Interceptor[];
|
|
48
|
-
private readonly $headers;
|
|
49
50
|
private clients;
|
|
50
|
-
private
|
|
51
|
+
private streamClients;
|
|
51
52
|
private subscriptions;
|
|
52
53
|
constructor(host: string);
|
|
53
54
|
addSubscription: <T extends ServiceType, Req extends Message<Req>, Res extends Message<Res>>(method: { [P in keyof PromiseClient<T> as T["methods"][P] extends import("@bufbuild/protobuf").MethodInfoServerStreaming<any, any> ? P : never]: T["methods"][P] extends import("@bufbuild/protobuf").MethodInfoServerStreaming<any, any> ? PromiseClient<T>[P] : never; }[keyof { [P in keyof PromiseClient<T> as T["methods"][P] extends import("@bufbuild/protobuf").MethodInfoServerStreaming<any, any> ? P : never]: T["methods"][P] extends import("@bufbuild/protobuf").MethodInfoServerStreaming<any, any> ? PromiseClient<T>[P] : never; }], params: PlainMessage<Req> | Atom<PlainMessage<Req>>, options: ServerStreamSubscriptionOptions) => ServerStreamSubscription<ServiceType, Message<import("@bufbuild/protobuf").AnyMessage>, Message<import("@bufbuild/protobuf").AnyMessage>, never, never> | ServerStreamSubscription<T, Req, Res, keyof { [P in keyof PromiseClient<T> as T["methods"][P] extends import("@bufbuild/protobuf").MethodInfoServerStreaming<any, any> ? P : never]: T["methods"][P] extends import("@bufbuild/protobuf").MethodInfoServerStreaming<any, any> ? PromiseClient<T>[P] : never; }, { [P in keyof PromiseClient<T> as T["methods"][P] extends import("@bufbuild/protobuf").MethodInfoServerStreaming<any, any> ? P : never]: T["methods"][P] extends import("@bufbuild/protobuf").MethodInfoServerStreaming<any, any> ? PromiseClient<T>[P] : never; }[keyof { [P in keyof PromiseClient<T> as T["methods"][P] extends import("@bufbuild/protobuf").MethodInfoServerStreaming<any, any> ? P : never]: T["methods"][P] extends import("@bufbuild/protobuf").MethodInfoServerStreaming<any, any> ? PromiseClient<T>[P] : never; }]>;
|
package/lib/grpc/transport.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { MapStore, createMapStore } from '@streamlayer/sdk-web-interfaces';
|
|
2
2
|
import { nanoid } from 'nanoid';
|
|
3
|
-
import { createRouterTransport, createPromiseClient, } from '@connectrpc/connect';
|
|
3
|
+
import { createRouterTransport, createPromiseClient, createContextValues, createContextKey, } from '@connectrpc/connect';
|
|
4
4
|
import { createGrpcWebTransport } from '@connectrpc/connect-web';
|
|
5
|
-
import { createContextValues, createContextKey } from '@connectrpc/connect';
|
|
6
5
|
import { nanoquery } from '@nanostores/query';
|
|
7
6
|
import { __GRPC_DEVTOOLS_EXTENSION__ } from '../utils/devtools';
|
|
8
7
|
import { ServerStreamSubscription } from './subscription';
|
|
@@ -21,6 +20,11 @@ const getDeviceId = () => {
|
|
|
21
20
|
localStorage.setItem('sl-device-id', newDeviceId);
|
|
22
21
|
return newDeviceId;
|
|
23
22
|
};
|
|
23
|
+
const getDeviceOs = () => {
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
return navigator.userAgentData?.platform || navigator.platform;
|
|
27
|
+
};
|
|
24
28
|
/**
|
|
25
29
|
* transport wrapper, initialize grpc transport, store headers and connect interceptors
|
|
26
30
|
*/
|
|
@@ -36,21 +40,25 @@ export class Transport {
|
|
|
36
40
|
streamTransport;
|
|
37
41
|
nanoquery;
|
|
38
42
|
host;
|
|
39
|
-
interceptors = [];
|
|
40
43
|
$headers;
|
|
44
|
+
interceptors = [];
|
|
41
45
|
clients;
|
|
42
|
-
|
|
46
|
+
streamClients;
|
|
43
47
|
subscriptions;
|
|
44
48
|
constructor(host) {
|
|
45
49
|
this.host = host;
|
|
46
50
|
this.$headers = new MapStore(createMapStore({
|
|
47
51
|
['sl-device-id']: getDeviceId(),
|
|
52
|
+
['sl-device-os']: getDeviceOs(),
|
|
48
53
|
}), 'transport:headers');
|
|
49
54
|
this.initInterceptors();
|
|
50
55
|
this.clients = new Map();
|
|
51
|
-
this.
|
|
56
|
+
this.streamClients = new Map();
|
|
52
57
|
this.subscriptions = new Map();
|
|
53
|
-
const [createFetcherStore, createMutatorStore, utils] = nanoquery(
|
|
58
|
+
const [createFetcherStore, createMutatorStore, utils] = nanoquery({
|
|
59
|
+
dedupeTime: 1000 * 60 * 5,
|
|
60
|
+
refetchInterval: 1000 * 60 * 5,
|
|
61
|
+
});
|
|
54
62
|
this.nanoquery = { createFetcherStore, createMutatorStore, utils };
|
|
55
63
|
this.transport = createGrpcWebTransport({
|
|
56
64
|
baseUrl: host,
|
|
@@ -90,7 +98,7 @@ export class Transport {
|
|
|
90
98
|
this.subscriptions.delete(params);
|
|
91
99
|
}
|
|
92
100
|
this.clients.clear();
|
|
93
|
-
this.
|
|
101
|
+
this.streamClients.clear();
|
|
94
102
|
this.subscriptions.clear();
|
|
95
103
|
// ToDo: reset nanoquery instance, basically we should add connect
|
|
96
104
|
// method where setup nanoquery, transports and interceptors, not in constructor
|
package/lib/index.d.ts
CHANGED
|
@@ -12,10 +12,12 @@ declare module '@streamlayer/sdk-web-interfaces' {
|
|
|
12
12
|
}
|
|
13
13
|
interface StreamLayerContext {
|
|
14
14
|
transport: Transport;
|
|
15
|
+
analyticsTransport: Transport;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
export declare const transport: (instance: StreamLayerContext, opts: {
|
|
18
19
|
sdkKey: string;
|
|
19
20
|
host: string;
|
|
21
|
+
analyticsHost: string;
|
|
20
22
|
version?: string;
|
|
21
23
|
}, done: () => void) => void;
|
package/lib/index.js
CHANGED
|
@@ -3,8 +3,18 @@ import { Transport } from './grpc/transport';
|
|
|
3
3
|
export * as queries from './grpc/queries';
|
|
4
4
|
export const transport = (instance, opts, done) => {
|
|
5
5
|
instance.transport = new Transport(opts.host);
|
|
6
|
+
instance.analyticsTransport = new Transport(opts.analyticsHost);
|
|
6
7
|
instance.sdk.host = instance.transport.host;
|
|
7
8
|
instance.transport.setSdkKey(opts.sdkKey);
|
|
8
9
|
instance.transport.setHeader('sl-sdk-version', opts.version || '-');
|
|
10
|
+
instance.transport.$headers.subscribe((headers) => {
|
|
11
|
+
instance.analyticsTransport.$headers.getStore().set(headers);
|
|
12
|
+
});
|
|
13
|
+
instance.sdk.onMount(() => {
|
|
14
|
+
return () => {
|
|
15
|
+
instance.transport.disconnect();
|
|
16
|
+
instance.analyticsTransport.disconnect();
|
|
17
|
+
};
|
|
18
|
+
});
|
|
9
19
|
done();
|
|
10
20
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@streamlayer/sdk-web-api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"typings": "./lib/index.d.ts",
|
|
@@ -21,18 +21,18 @@
|
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@streamlayer/sdk-web-interfaces": "^0.
|
|
25
|
-
"@streamlayer/sdk-web-logger": "^0.5.
|
|
24
|
+
"@streamlayer/sdk-web-interfaces": "^0.21.0",
|
|
25
|
+
"@streamlayer/sdk-web-logger": "^0.5.18"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@bufbuild/protobuf": "^1.7.2",
|
|
29
29
|
"@connectrpc/connect": "^1.3.0",
|
|
30
30
|
"@connectrpc/connect-web": "^1.3.0",
|
|
31
|
-
"@nanostores/query": "^0.2.
|
|
32
|
-
"@streamlayer/sl-eslib": "^5.
|
|
33
|
-
"@swc/helpers": "
|
|
31
|
+
"@nanostores/query": "^0.2.10",
|
|
32
|
+
"@streamlayer/sl-eslib": "^5.83.1",
|
|
33
|
+
"@swc/helpers": "~0.5.3",
|
|
34
34
|
"nanoid": "3.3.7",
|
|
35
|
-
"nanostores": "^0.
|
|
35
|
+
"nanostores": "^0.10.0",
|
|
36
36
|
"tslib": "^2.6.2"
|
|
37
37
|
}
|
|
38
38
|
}
|