@streamlayer/sdk-web-api 0.7.0 → 0.9.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/package.json CHANGED
@@ -1,12 +1,20 @@
1
1
  {
2
2
  "name": "@streamlayer/sdk-web-api",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "type": "module",
5
5
  "main": "./src/index.js",
6
6
  "typings": "./src/index.d.ts",
7
7
  "files": [
8
8
  "src/"
9
9
  ],
10
+ "exports": {
11
+ ".": "./src/index.js",
12
+ "./queries/*": {
13
+ "types": "./src/grpc/queries/*.d.ts",
14
+ "import": "./src/grpc/queries/*.js",
15
+ "default": "./src/grpc/queries/*.js"
16
+ }
17
+ },
10
18
  "dependencies": {
11
19
  "@bufbuild/connect": "*",
12
20
  "@bufbuild/connect-web": "*",
@@ -2,4 +2,4 @@ import { ReadableAtom } from 'nanostores';
2
2
  import { Transport } from '../transport';
3
3
  export { $user } from './user';
4
4
  export declare const $retrieveEventId: ($providerStreamId: ReadableAtom<string>, transport: Transport) => import("@nanostores/query").FetcherStore<string, any>;
5
- export declare const $streamSettings: (slStreamId: string, transport: Transport) => import("@nanostores/query").FetcherStore<import("@streamlayer/sl-eslib/sdkSettings/sdkSettings.common_pb").StreamSettings, any>;
5
+ export declare const $streamSettings: (slStreamId: ReadableAtom<string>, transport: Transport) => import("@nanostores/query").FetcherStore<import("@streamlayer/sl-eslib/sdkSettings/sdkSettings.common_pb").StreamSettings, any>;
@@ -1,8 +1,6 @@
1
- import { nanoquery } from '@nanostores/query';
2
1
  import { Events } from '@streamlayer/sl-eslib/sports/events/events_connect';
3
2
  import { Client } from '@streamlayer/sl-eslib/sdkSettings/client/client_connect';
4
3
  export { $user } from './user';
5
- const [createFetcherStore] = nanoquery();
6
4
  export const $retrieveEventId = ($providerStreamId, transport)=>{
7
5
  const { client, queryKey } = transport.createPromiseClient(Events, {
8
6
  method: 'retrieveEventId',
@@ -10,7 +8,7 @@ export const $retrieveEventId = ($providerStreamId, transport)=>{
10
8
  $providerStreamId
11
9
  ]
12
10
  });
13
- return createFetcherStore(queryKey, {
11
+ return transport.nanoquery.createFetcherStore(queryKey, {
14
12
  fetcher: async (_, __, id)=>{
15
13
  if (!id) {
16
14
  return '';
@@ -29,7 +27,7 @@ export const $streamSettings = (slStreamId, transport)=>{
29
27
  slStreamId
30
28
  ]
31
29
  });
32
- return createFetcherStore(queryKey, {
30
+ return transport.nanoquery.createFetcherStore(queryKey, {
33
31
  fetcher: async (_, __, id)=>{
34
32
  const res = await client.getStream({
35
33
  id
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/sdk-web-api/src/grpc/queries/event.ts"],"sourcesContent":["import { nanoquery } from '@nanostores/query'\nimport { ReadableAtom } from 'nanostores'\nimport { Events } from '@streamlayer/sl-eslib/sports/events/events_connect'\nimport { Client } from '@streamlayer/sl-eslib/sdkSettings/client/client_connect'\n\nimport { Transport } from '../transport'\n\nexport { $user } from './user'\n\nconst [createFetcherStore] = nanoquery()\n\nexport const $retrieveEventId = ($providerStreamId: ReadableAtom<string>, transport: Transport) => {\n const { client, queryKey } = transport.createPromiseClient(Events, {\n method: 'retrieveEventId',\n params: [$providerStreamId],\n })\n\n return createFetcherStore(queryKey, {\n fetcher: async (_: string, __: string, id: string) => {\n if (!id) {\n return ''\n }\n\n const res = await client.retrieveEventId({\n id,\n })\n\n return (res.data?.id as unknown as string) || ''\n },\n })\n}\n\nexport const $streamSettings = (slStreamId: string, transport: Transport) => {\n const { client, queryKey } = transport.createPromiseClient(Client, { method: 'getStream', params: [slStreamId] })\n\n return createFetcherStore(queryKey, {\n fetcher: async (_: string, __: string, id: string) => {\n const res = await client.getStream({\n id,\n })\n\n return res.data?.attributes\n },\n })\n}\n"],"names":["nanoquery","Events","Client","$user","createFetcherStore","$retrieveEventId","$providerStreamId","transport","client","queryKey","createPromiseClient","method","params","fetcher","_","__","id","res","retrieveEventId","data","$streamSettings","slStreamId","getStream","attributes"],"mappings":"AAAA,SAASA,SAAS,QAAQ,oBAAmB;AAE7C,SAASC,MAAM,QAAQ,qDAAoD;AAC3E,SAASC,MAAM,QAAQ,0DAAyD;AAIhF,SAASC,KAAK,QAAQ,SAAQ;AAE9B,MAAM,CAACC,mBAAmB,GAAGJ;AAE7B,OAAO,MAAMK,mBAAmB,CAACC,mBAAyCC;IACxE,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGF,UAAUG,mBAAmB,CAACT,QAAQ;QACjEU,QAAQ;QACRC,QAAQ;YAACN;SAAkB;IAC7B;IAEA,OAAOF,mBAAmBK,UAAU;QAClCI,SAAS,OAAOC,GAAWC,IAAYC;YACrC,IAAI,CAACA,IAAI;gBACP,OAAO;YACT;YAEA,MAAMC,MAAM,MAAMT,OAAOU,eAAe,CAAC;gBACvCF;YACF;YAEA,OAAO,CAACC,IAAIE,IAAI,EAAEH,EAAuB,KAAK;QAChD;IACF;AACF,EAAC;AAED,OAAO,MAAMI,kBAAkB,CAACC,YAAoBd;IAClD,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGF,UAAUG,mBAAmB,CAACR,QAAQ;QAAES,QAAQ;QAAaC,QAAQ;YAACS;SAAW;IAAC;IAE/G,OAAOjB,mBAAmBK,UAAU;QAClCI,SAAS,OAAOC,GAAWC,IAAYC;YACrC,MAAMC,MAAM,MAAMT,OAAOc,SAAS,CAAC;gBACjCN;YACF;YAEA,OAAOC,IAAIE,IAAI,EAAEI;QACnB;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../../../../packages/sdk-web-api/src/grpc/queries/event.ts"],"sourcesContent":["import { ReadableAtom } from 'nanostores'\nimport { Events } from '@streamlayer/sl-eslib/sports/events/events_connect'\nimport { Client } from '@streamlayer/sl-eslib/sdkSettings/client/client_connect'\n\nimport { Transport } from '../transport'\n\nexport { $user } from './user'\n\nexport const $retrieveEventId = ($providerStreamId: ReadableAtom<string>, transport: Transport) => {\n const { client, queryKey } = transport.createPromiseClient(Events, {\n method: 'retrieveEventId',\n params: [$providerStreamId],\n })\n\n return transport.nanoquery.createFetcherStore(queryKey, {\n fetcher: async (_: string, __: string, id: string) => {\n if (!id) {\n return ''\n }\n\n const res = await client.retrieveEventId({\n id,\n })\n\n return (res.data?.id as unknown as string) || ''\n },\n })\n}\n\nexport const $streamSettings = (slStreamId: ReadableAtom<string>, transport: Transport) => {\n const { client, queryKey } = transport.createPromiseClient(Client, { method: 'getStream', params: [slStreamId] })\n\n return transport.nanoquery.createFetcherStore(queryKey, {\n fetcher: async (_: string, __: string, id: string) => {\n const res = await client.getStream({\n id,\n })\n\n return res.data?.attributes\n },\n })\n}\n"],"names":["Events","Client","$user","$retrieveEventId","$providerStreamId","transport","client","queryKey","createPromiseClient","method","params","nanoquery","createFetcherStore","fetcher","_","__","id","res","retrieveEventId","data","$streamSettings","slStreamId","getStream","attributes"],"mappings":"AACA,SAASA,MAAM,QAAQ,qDAAoD;AAC3E,SAASC,MAAM,QAAQ,0DAAyD;AAIhF,SAASC,KAAK,QAAQ,SAAQ;AAE9B,OAAO,MAAMC,mBAAmB,CAACC,mBAAyCC;IACxE,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGF,UAAUG,mBAAmB,CAACR,QAAQ;QACjES,QAAQ;QACRC,QAAQ;YAACN;SAAkB;IAC7B;IAEA,OAAOC,UAAUM,SAAS,CAACC,kBAAkB,CAACL,UAAU;QACtDM,SAAS,OAAOC,GAAWC,IAAYC;YACrC,IAAI,CAACA,IAAI;gBACP,OAAO;YACT;YAEA,MAAMC,MAAM,MAAMX,OAAOY,eAAe,CAAC;gBACvCF;YACF;YAEA,OAAO,CAACC,IAAIE,IAAI,EAAEH,EAAuB,KAAK;QAChD;IACF;AACF,EAAC;AAED,OAAO,MAAMI,kBAAkB,CAACC,YAAkChB;IAChE,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGF,UAAUG,mBAAmB,CAACP,QAAQ;QAAEQ,QAAQ;QAAaC,QAAQ;YAACW;SAAW;IAAC;IAE/G,OAAOhB,UAAUM,SAAS,CAACC,kBAAkB,CAACL,UAAU;QACtDM,SAAS,OAAOC,GAAWC,IAAYC;YACrC,MAAMC,MAAM,MAAMX,OAAOgB,SAAS,CAAC;gBACjCN;YACF;YAEA,OAAOC,IAAIE,IAAI,EAAEI;QACnB;IACF;AACF,EAAC"}
@@ -1,4 +1,21 @@
1
+ import { ReadableAtom } from 'nanostores';
1
2
  import { Transport } from '../transport';
2
3
  export { $user } from './user';
3
- export declare const $organizationSettings: (transport: Transport) => import("@nanostores/query").FetcherStore<import("@streamlayer/sl-eslib/sdkSettings/sdkSettings.common_pb").OrganizationSettings, any>;
4
- export declare const $organizationAdvertising: (transport: Transport) => import("@nanostores/query").FetcherStore<import("@streamlayer/sl-eslib/sdkSettings/sdkSettings.common_pb").Advertising, any>;
4
+ export declare const $organizationSettings: ($enabled: ReadableAtom<string>, transport: Transport) => import("@nanostores/query").FetcherStore<{
5
+ id: string;
6
+ overlays: import("@streamlayer/sl-eslib/sdkSettings/sdkSettings.common_pb").SdkOverlay[];
7
+ buttonIcon: string;
8
+ tinodeHost: string;
9
+ audience: string;
10
+ name: string;
11
+ provider: string;
12
+ primaryColor: string;
13
+ secondaryColor: string;
14
+ moderationPrimaryColor: string;
15
+ linkShareIcon: string;
16
+ linkShareText: string;
17
+ brandDefaults?: import("@streamlayer/sl-eslib/sdkSettings/sdkSettings.common_pb").BrandDefaults;
18
+ pub?: import("@streamlayer/sl-eslib/sdkSettings/sdkSettings.common_pb").JWK;
19
+ getstream?: import("@streamlayer/sl-eslib/sdkSettings/sdkSettings.common_pb").GetStreamSettingsClient;
20
+ }, any>;
21
+ export declare const $organizationAdvertising: ($enabled: ReadableAtom<string>, transport: Transport) => import("@nanostores/query").FetcherStore<import("@streamlayer/sl-eslib/sdkSettings/sdkSettings.common_pb").Advertising, any>;
@@ -1,23 +1,30 @@
1
- import { nanoquery } from '@nanostores/query';
2
1
  import { Client } from '@streamlayer/sl-eslib/sdkSettings/client/client_connect';
3
2
  export { $user } from './user';
4
- const [createFetcherStore] = nanoquery();
5
- export const $organizationSettings = (transport)=>{
3
+ export const $organizationSettings = ($enabled, transport)=>{
6
4
  const { client, queryKey } = transport.createPromiseClient(Client, {
7
- method: 'getOrganization'
5
+ method: 'getOrganization',
6
+ params: [
7
+ $enabled
8
+ ]
8
9
  });
9
- return createFetcherStore(queryKey, {
10
+ return transport.nanoquery.createFetcherStore(queryKey, {
10
11
  fetcher: async ()=>{
11
12
  const res = await client.getOrganization({});
12
- return res.data?.attributes;
13
+ return res.data ? {
14
+ ...res.data.attributes,
15
+ id: res.data.id
16
+ } : null;
13
17
  }
14
18
  });
15
19
  };
16
- export const $organizationAdvertising = (transport)=>{
20
+ export const $organizationAdvertising = ($enabled, transport)=>{
17
21
  const { client, queryKey } = transport.createPromiseClient(Client, {
18
- method: 'getOrganizationAdvertising'
22
+ method: 'getOrganizationAdvertising',
23
+ params: [
24
+ $enabled
25
+ ]
19
26
  });
20
- return createFetcherStore(queryKey, {
27
+ return transport.nanoquery.createFetcherStore(queryKey, {
21
28
  fetcher: async ()=>{
22
29
  const res = await client.getOrganizationAdvertising({});
23
30
  return res.data?.attributes;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/sdk-web-api/src/grpc/queries/organization.ts"],"sourcesContent":["import { nanoquery } from '@nanostores/query'\nimport { Client } from '@streamlayer/sl-eslib/sdkSettings/client/client_connect'\n\nimport { Transport } from '../transport'\n\nexport { $user } from './user'\n\nconst [createFetcherStore] = nanoquery()\n\nexport const $organizationSettings = (transport: Transport) => {\n const { client, queryKey } = transport.createPromiseClient(Client, { method: 'getOrganization' })\n\n return createFetcherStore(queryKey, {\n fetcher: async () => {\n const res = await client.getOrganization({})\n\n return res.data?.attributes\n },\n })\n}\n\nexport const $organizationAdvertising = (transport: Transport) => {\n const { client, queryKey } = transport.createPromiseClient(Client, { method: 'getOrganizationAdvertising' })\n\n return createFetcherStore(queryKey, {\n fetcher: async () => {\n const res = await client.getOrganizationAdvertising({})\n\n return res.data?.attributes\n },\n })\n}\n"],"names":["nanoquery","Client","$user","createFetcherStore","$organizationSettings","transport","client","queryKey","createPromiseClient","method","fetcher","res","getOrganization","data","attributes","$organizationAdvertising","getOrganizationAdvertising"],"mappings":"AAAA,SAASA,SAAS,QAAQ,oBAAmB;AAC7C,SAASC,MAAM,QAAQ,0DAAyD;AAIhF,SAASC,KAAK,QAAQ,SAAQ;AAE9B,MAAM,CAACC,mBAAmB,GAAGH;AAE7B,OAAO,MAAMI,wBAAwB,CAACC;IACpC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGF,UAAUG,mBAAmB,CAACP,QAAQ;QAAEQ,QAAQ;IAAkB;IAE/F,OAAON,mBAAmBI,UAAU;QAClCG,SAAS;YACP,MAAMC,MAAM,MAAML,OAAOM,eAAe,CAAC,CAAC;YAE1C,OAAOD,IAAIE,IAAI,EAAEC;QACnB;IACF;AACF,EAAC;AAED,OAAO,MAAMC,2BAA2B,CAACV;IACvC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGF,UAAUG,mBAAmB,CAACP,QAAQ;QAAEQ,QAAQ;IAA6B;IAE1G,OAAON,mBAAmBI,UAAU;QAClCG,SAAS;YACP,MAAMC,MAAM,MAAML,OAAOU,0BAA0B,CAAC,CAAC;YAErD,OAAOL,IAAIE,IAAI,EAAEC;QACnB;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../../../../packages/sdk-web-api/src/grpc/queries/organization.ts"],"sourcesContent":["import { Client } from '@streamlayer/sl-eslib/sdkSettings/client/client_connect'\nimport { ReadableAtom } from 'nanostores'\n\nimport { Transport } from '../transport'\n\nexport { $user } from './user'\n\nexport const $organizationSettings = ($enabled: ReadableAtom<string>, transport: Transport) => {\n const { client, queryKey } = transport.createPromiseClient(Client, { method: 'getOrganization', params: [$enabled] })\n\n return transport.nanoquery.createFetcherStore(queryKey, {\n fetcher: async () => {\n const res = await client.getOrganization({})\n\n return res.data\n ? {\n ...res.data.attributes,\n id: res.data.id,\n }\n : null\n },\n })\n}\n\nexport const $organizationAdvertising = ($enabled: ReadableAtom<string>, transport: Transport) => {\n const { client, queryKey } = transport.createPromiseClient(Client, {\n method: 'getOrganizationAdvertising',\n params: [$enabled],\n })\n\n return transport.nanoquery.createFetcherStore(queryKey, {\n fetcher: async () => {\n const res = await client.getOrganizationAdvertising({})\n\n return res.data?.attributes\n },\n })\n}\n"],"names":["Client","$user","$organizationSettings","$enabled","transport","client","queryKey","createPromiseClient","method","params","nanoquery","createFetcherStore","fetcher","res","getOrganization","data","attributes","id","$organizationAdvertising","getOrganizationAdvertising"],"mappings":"AAAA,SAASA,MAAM,QAAQ,0DAAyD;AAKhF,SAASC,KAAK,QAAQ,SAAQ;AAE9B,OAAO,MAAMC,wBAAwB,CAACC,UAAgCC;IACpE,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGF,UAAUG,mBAAmB,CAACP,QAAQ;QAAEQ,QAAQ;QAAmBC,QAAQ;YAACN;SAAS;IAAC;IAEnH,OAAOC,UAAUM,SAAS,CAACC,kBAAkB,CAACL,UAAU;QACtDM,SAAS;YACP,MAAMC,MAAM,MAAMR,OAAOS,eAAe,CAAC,CAAC;YAE1C,OAAOD,IAAIE,IAAI,GACX;gBACE,GAAGF,IAAIE,IAAI,CAACC,UAAU;gBACtBC,IAAIJ,IAAIE,IAAI,CAACE,EAAE;YACjB,IACA;QACN;IACF;AACF,EAAC;AAED,OAAO,MAAMC,2BAA2B,CAACf,UAAgCC;IACvE,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGF,UAAUG,mBAAmB,CAACP,QAAQ;QACjEQ,QAAQ;QACRC,QAAQ;YAACN;SAAS;IACpB;IAEA,OAAOC,UAAUM,SAAS,CAACC,kBAAkB,CAACL,UAAU;QACtDM,SAAS;YACP,MAAMC,MAAM,MAAMR,OAAOc,0BAA0B,CAAC,CAAC;YAErD,OAAON,IAAIE,IAAI,EAAEC;QACnB;IACF;AACF,EAAC"}
@@ -1,9 +1,13 @@
1
1
  import { ReadableAtom } from 'nanostores';
2
+ import type { BypassAuthRequest, BypassAuthResponse } from '@streamlayer/sl-eslib/users/users_pb';
3
+ import { PlainMessage } from '@bufbuild/protobuf';
2
4
  import { Transport } from '../transport';
3
- export declare const $user: ($userKey: ReadableAtom<string>, $userToken: ReadableAtom<string>, transport: Transport) => import("@nanostores/query").FetcherStore<import("@streamlayer/sl-eslib/users/users_pb").BypassAuthResponse | {
4
- meta: {
5
- jwt: string;
6
- };
7
- data?: import("@streamlayer/sl-eslib/users/users_common_pb").User;
8
- }, any>;
5
+ export declare const $user: ($userToken: ReadableAtom<string>, transport: Transport) => import("@nanostores/query").FetcherStore<import("@streamlayer/sl-eslib/users/users_pb").MeResponse, any>;
6
+ export declare const $bypassLogin: (transport: Transport) => import("@nanostores/query").MutatorStore<PlainMessage<BypassAuthRequest>, PlainMessage<BypassAuthResponse>, any>;
7
+ export declare const bypassAuth: (transport: Transport, params: {
8
+ userKey?: string;
9
+ schema?: string;
10
+ init?: boolean;
11
+ }) => Promise<BypassAuthResponse>;
9
12
  export declare const $userSettings: ($userToken: ReadableAtom<string>, transport: Transport) => import("@nanostores/query").FetcherStore<import("@streamlayer/sl-eslib/sdkSettings/client/client_pb").ClientSettings, any>;
13
+ export declare const register: (transport: Transport, phone: string) => Promise<import("@streamlayer/sl-eslib/users/users_pb").RegisterResponse>;
@@ -1,45 +1,43 @@
1
- import { nanoquery } from '@nanostores/query';
2
1
  import { Users } from '@streamlayer/sl-eslib/users/users_connect';
3
2
  import { Client } from '@streamlayer/sl-eslib/sdkSettings/client/client_connect';
4
- const [createFetcherStore] = nanoquery();
5
3
  // user query
6
4
  // cache user
7
5
  // invalidate token
8
6
  // login
9
7
  // save token
10
8
  // called on update user key
11
- export const $user = ($userKey, $userToken, transport)=>{
9
+ export const $user = ($userToken, transport)=>{
12
10
  const { queryKey, client } = transport.createPromiseClient(Users, {
13
- method: 'bypassAuth',
11
+ method: 'me',
14
12
  params: [
15
- $userKey
13
+ $userToken
16
14
  ]
17
15
  });
18
- return createFetcherStore(queryKey, {
19
- fetcher: async (_, __, userKey)=>{
20
- // if user token exist, try to validate and refresh user data
21
- // otherwise clear invalid login token
22
- // and relogin
23
- if ($userToken.get()) {
24
- try {
25
- const response = await client.me({});
26
- return {
27
- ...response,
28
- meta: {
29
- jwt: $userToken.get()
30
- }
31
- };
32
- } catch (err) {
33
- console.log('invalid token, relogin...');
34
- }
35
- }
36
- return client.bypassAuth({
37
- userKey,
38
- schema: 'streamlayer'
39
- });
40
- }
16
+ return transport.nanoquery.createFetcherStore(queryKey, {
17
+ fetcher: ()=>client.me({})
18
+ });
19
+ };
20
+ export const $bypassLogin = (transport)=>{
21
+ const { client, queryKeyStr } = transport.createPromiseClient(Users, {
22
+ method: 'bypassAuth'
23
+ });
24
+ return transport.nanoquery.createMutatorStore(async ({ data: { userKey, schema, init }, getCacheUpdater })=>{
25
+ const [updateCache] = getCacheUpdater(queryKeyStr);
26
+ const user = await client.bypassAuth({
27
+ userKey,
28
+ schema,
29
+ init
30
+ });
31
+ updateCache(user);
32
+ return user;
41
33
  });
42
34
  };
35
+ export const bypassAuth = (transport, params)=>{
36
+ const { client } = transport.createPromiseClient(Users, {
37
+ method: 'bypassAuth'
38
+ });
39
+ return client.bypassAuth(params);
40
+ };
43
41
  export const $userSettings = ($userToken, transport)=>{
44
42
  const { client, queryKey } = transport.createPromiseClient(Client, {
45
43
  method: 'get',
@@ -47,12 +45,20 @@ export const $userSettings = ($userToken, transport)=>{
47
45
  $userToken
48
46
  ]
49
47
  });
50
- return createFetcherStore(queryKey, {
48
+ return transport.nanoquery.createFetcherStore(queryKey, {
51
49
  fetcher: async ()=>{
52
50
  const data = await client.get({});
53
51
  return data.data?.attributes;
54
52
  }
55
53
  });
56
54
  };
55
+ export const register = (transport, phone)=>{
56
+ const { client } = transport.createPromiseClient(Users, {
57
+ method: 'register'
58
+ });
59
+ return client.register({
60
+ id: phone
61
+ });
62
+ };
57
63
 
58
64
  //# sourceMappingURL=user.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../packages/sdk-web-api/src/grpc/queries/user.ts"],"sourcesContent":["import { nanoquery } from '@nanostores/query'\nimport { ReadableAtom } from 'nanostores'\nimport { Users } from '@streamlayer/sl-eslib/users/users_connect'\nimport { Client } from '@streamlayer/sl-eslib/sdkSettings/client/client_connect'\n\nimport { Transport } from '../transport'\n\nconst [createFetcherStore] = nanoquery()\n\n// user query\n// cache user\n// invalidate token\n// login\n// save token\n// called on update user key\nexport const $user = (\n $userKey: ReadableAtom<string>, // user key from host\n $userToken: ReadableAtom<string>, // sl user token\n transport: Transport,\n) => {\n const { queryKey, client } = transport.createPromiseClient(Users, { method: 'bypassAuth', params: [$userKey] })\n\n return createFetcherStore(queryKey, {\n fetcher: async (_, __, userKey: string) => {\n // if user token exist, try to validate and refresh user data\n // otherwise clear invalid login token\n // and relogin\n if ($userToken.get()) {\n try {\n const response = await client.me({})\n\n return {\n ...response,\n meta: {\n jwt: $userToken.get(),\n },\n }\n } catch (err) {\n console.log('invalid token, relogin...')\n }\n }\n\n return client.bypassAuth({\n userKey,\n schema: 'streamlayer',\n })\n },\n })\n}\n\nexport const $userSettings = (\n $userToken: ReadableAtom<string>, // sl user token\n transport: Transport,\n) => {\n const { client, queryKey } = transport.createPromiseClient(Client, { method: 'get', params: [$userToken] })\n\n return createFetcherStore(queryKey, {\n fetcher: async () => {\n const data = await client.get({})\n\n return data.data?.attributes\n },\n })\n}\n"],"names":["nanoquery","Users","Client","createFetcherStore","$user","$userKey","$userToken","transport","queryKey","client","createPromiseClient","method","params","fetcher","_","__","userKey","get","response","me","meta","jwt","err","console","log","bypassAuth","schema","$userSettings","data","attributes"],"mappings":"AAAA,SAASA,SAAS,QAAQ,oBAAmB;AAE7C,SAASC,KAAK,QAAQ,4CAA2C;AACjE,SAASC,MAAM,QAAQ,0DAAyD;AAIhF,MAAM,CAACC,mBAAmB,GAAGH;AAE7B,aAAa;AACb,aAAa;AACb,mBAAmB;AACnB,QAAQ;AACR,aAAa;AACb,4BAA4B;AAC5B,OAAO,MAAMI,QAAQ,CACnBC,UACAC,YACAC;IAEA,MAAM,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGF,UAAUG,mBAAmB,CAACT,OAAO;QAAEU,QAAQ;QAAcC,QAAQ;YAACP;SAAS;IAAC;IAE7G,OAAOF,mBAAmBK,UAAU;QAClCK,SAAS,OAAOC,GAAGC,IAAIC;YACrB,6DAA6D;YAC7D,sCAAsC;YACtC,cAAc;YACd,IAAIV,WAAWW,GAAG,IAAI;gBACpB,IAAI;oBACF,MAAMC,WAAW,MAAMT,OAAOU,EAAE,CAAC,CAAC;oBAElC,OAAO;wBACL,GAAGD,QAAQ;wBACXE,MAAM;4BACJC,KAAKf,WAAWW,GAAG;wBACrB;oBACF;gBACF,EAAE,OAAOK,KAAK;oBACZC,QAAQC,GAAG,CAAC;gBACd;YACF;YAEA,OAAOf,OAAOgB,UAAU,CAAC;gBACvBT;gBACAU,QAAQ;YACV;QACF;IACF;AACF,EAAC;AAED,OAAO,MAAMC,gBAAgB,CAC3BrB,YACAC;IAEA,MAAM,EAAEE,MAAM,EAAED,QAAQ,EAAE,GAAGD,UAAUG,mBAAmB,CAACR,QAAQ;QAAES,QAAQ;QAAOC,QAAQ;YAACN;SAAW;IAAC;IAEzG,OAAOH,mBAAmBK,UAAU;QAClCK,SAAS;YACP,MAAMe,OAAO,MAAMnB,OAAOQ,GAAG,CAAC,CAAC;YAE/B,OAAOW,KAAKA,IAAI,EAAEC;QACpB;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../../../../packages/sdk-web-api/src/grpc/queries/user.ts"],"sourcesContent":["import { ReadableAtom } from 'nanostores'\nimport { Users } from '@streamlayer/sl-eslib/users/users_connect'\nimport type { BypassAuthRequest, BypassAuthResponse } from '@streamlayer/sl-eslib/users/users_pb'\nimport { Client } from '@streamlayer/sl-eslib/sdkSettings/client/client_connect'\nimport { PlainMessage } from '@bufbuild/protobuf'\n\nimport { Transport } from '../transport'\n\n// user query\n// cache user\n// invalidate token\n// login\n// save token\n// called on update user key\nexport const $user = ($userToken: ReadableAtom<string>, transport: Transport) => {\n const { queryKey, client } = transport.createPromiseClient(Users, { method: 'me', params: [$userToken] })\n\n return transport.nanoquery.createFetcherStore(queryKey, {\n fetcher: () => client.me({}),\n })\n}\n\nexport const $bypassLogin = (transport: Transport) => {\n const { client, queryKeyStr } = transport.createPromiseClient(Users, { method: 'bypassAuth' })\n\n return transport.nanoquery.createMutatorStore<PlainMessage<BypassAuthRequest>, PlainMessage<BypassAuthResponse>>(\n async ({ data: { userKey, schema, init }, getCacheUpdater }) => {\n const [updateCache] = getCacheUpdater(queryKeyStr)\n const user = await client.bypassAuth({ userKey, schema, init })\n\n updateCache(user)\n\n return user\n },\n )\n}\n\nexport const bypassAuth = (transport: Transport, params: { userKey?: string; schema?: string; init?: boolean }) => {\n const { client } = transport.createPromiseClient(Users, { method: 'bypassAuth' })\n\n return client.bypassAuth(params)\n}\n\nexport const $userSettings = (\n $userToken: ReadableAtom<string>, // sl user token\n transport: Transport,\n) => {\n const { client, queryKey } = transport.createPromiseClient(Client, { method: 'get', params: [$userToken] })\n\n return transport.nanoquery.createFetcherStore(queryKey, {\n fetcher: async () => {\n const data = await client.get({})\n\n return data.data?.attributes\n },\n })\n}\n\nexport const register = (transport: Transport, phone: string) => {\n const { client } = transport.createPromiseClient(Users, { method: 'register' })\n\n return client.register({ id: phone })\n}\n"],"names":["Users","Client","$user","$userToken","transport","queryKey","client","createPromiseClient","method","params","nanoquery","createFetcherStore","fetcher","me","$bypassLogin","queryKeyStr","createMutatorStore","data","userKey","schema","init","getCacheUpdater","updateCache","user","bypassAuth","$userSettings","get","attributes","register","phone","id"],"mappings":"AACA,SAASA,KAAK,QAAQ,4CAA2C;AAEjE,SAASC,MAAM,QAAQ,0DAAyD;AAKhF,aAAa;AACb,aAAa;AACb,mBAAmB;AACnB,QAAQ;AACR,aAAa;AACb,4BAA4B;AAC5B,OAAO,MAAMC,QAAQ,CAACC,YAAkCC;IACtD,MAAM,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGF,UAAUG,mBAAmB,CAACP,OAAO;QAAEQ,QAAQ;QAAMC,QAAQ;YAACN;SAAW;IAAC;IAEvG,OAAOC,UAAUM,SAAS,CAACC,kBAAkB,CAACN,UAAU;QACtDO,SAAS,IAAMN,OAAOO,EAAE,CAAC,CAAC;IAC5B;AACF,EAAC;AAED,OAAO,MAAMC,eAAe,CAACV;IAC3B,MAAM,EAAEE,MAAM,EAAES,WAAW,EAAE,GAAGX,UAAUG,mBAAmB,CAACP,OAAO;QAAEQ,QAAQ;IAAa;IAE5F,OAAOJ,UAAUM,SAAS,CAACM,kBAAkB,CAC3C,OAAO,EAAEC,MAAM,EAAEC,OAAO,EAAEC,MAAM,EAAEC,IAAI,EAAE,EAAEC,eAAe,EAAE;QACzD,MAAM,CAACC,YAAY,GAAGD,gBAAgBN;QACtC,MAAMQ,OAAO,MAAMjB,OAAOkB,UAAU,CAAC;YAAEN;YAASC;YAAQC;QAAK;QAE7DE,YAAYC;QAEZ,OAAOA;IACT;AAEJ,EAAC;AAED,OAAO,MAAMC,aAAa,CAACpB,WAAsBK;IAC/C,MAAM,EAAEH,MAAM,EAAE,GAAGF,UAAUG,mBAAmB,CAACP,OAAO;QAAEQ,QAAQ;IAAa;IAE/E,OAAOF,OAAOkB,UAAU,CAACf;AAC3B,EAAC;AAED,OAAO,MAAMgB,gBAAgB,CAC3BtB,YACAC;IAEA,MAAM,EAAEE,MAAM,EAAED,QAAQ,EAAE,GAAGD,UAAUG,mBAAmB,CAACN,QAAQ;QAAEO,QAAQ;QAAOC,QAAQ;YAACN;SAAW;IAAC;IAEzG,OAAOC,UAAUM,SAAS,CAACC,kBAAkB,CAACN,UAAU;QACtDO,SAAS;YACP,MAAMK,OAAO,MAAMX,OAAOoB,GAAG,CAAC,CAAC;YAE/B,OAAOT,KAAKA,IAAI,EAAEU;QACpB;IACF;AACF,EAAC;AAED,OAAO,MAAMC,WAAW,CAACxB,WAAsByB;IAC7C,MAAM,EAAEvB,MAAM,EAAE,GAAGF,UAAUG,mBAAmB,CAACP,OAAO;QAAEQ,QAAQ;IAAW;IAE7E,OAAOF,OAAOsB,QAAQ,CAAC;QAAEE,IAAID;IAAM;AACrC,EAAC"}
@@ -3,6 +3,7 @@ import { Interceptor, PromiseClient, UnaryRequest, StreamRequest } from '@bufbui
3
3
  import type { ServiceType } from '@bufbuild/protobuf';
4
4
  import { createGrpcWebTransport } from '@bufbuild/connect-web';
5
5
  import type { KeyInput } from '@nanostores/query';
6
+ import { nanoquery } from '@nanostores/query';
6
7
  type KnownHeaders = {
7
8
  authorization?: string;
8
9
  sdk?: string;
@@ -15,11 +16,18 @@ declare global {
15
16
  __GRPC_DEVTOOLS_EXTENSION__?: () => import('@bufbuild/connect').Interceptor;
16
17
  }
17
18
  }
19
+ type NanoqueryReturnType = ReturnType<typeof nanoquery>;
20
+ type NanoqueryObjectType = {
21
+ createFetcherStore: NanoqueryReturnType[0];
22
+ createMutatorStore: NanoqueryReturnType[1];
23
+ utils: NanoqueryReturnType[2];
24
+ };
18
25
  /**
19
26
  * transport wrapper, initialize grpc transport, store headers and connect interceptors
20
27
  */
21
28
  export declare class Transport {
22
29
  readonly transport: ReturnType<typeof createGrpcWebTransport>;
30
+ readonly nanoquery: NanoqueryObjectType;
23
31
  protected interceptors: Interceptor[];
24
32
  private readonly $headers;
25
33
  private clients;
@@ -33,6 +41,7 @@ export declare class Transport {
33
41
  }) => {
34
42
  client: PromiseClient<T>;
35
43
  queryKey: ((string | number) | import("nanostores").ReadableAtom<void | (string | number)>)[];
44
+ queryKeyStr: string;
36
45
  };
37
46
  setSdkKey: (sdkKey: string) => void;
38
47
  setAuth: (token: string) => void;
@@ -2,9 +2,7 @@ import { MapStore, createMapStore } from '@streamlayer/sdk-web-interfaces';
2
2
  import { createRouterTransport } from '@connectrpc/connect';
3
3
  import { createPromiseClient } from '@bufbuild/connect';
4
4
  import { createGrpcWebTransport } from '@bufbuild/connect-web';
5
- const initialStore = {
6
- sdk: process.env.SDK_KEY
7
- };
5
+ import { nanoquery } from '@nanostores/query';
8
6
  /**
9
7
  * transport wrapper, initialize grpc transport, store headers and connect interceptors
10
8
  */ export class Transport {
@@ -37,7 +35,8 @@ const initialStore = {
37
35
  ];
38
36
  return {
39
37
  client,
40
- queryKey
38
+ queryKey,
39
+ queryKeyStr: queryKey.toString()
41
40
  };
42
41
  };
43
42
  this.setSdkKey = (sdkKey)=>{
@@ -80,11 +79,17 @@ const initialStore = {
80
79
  });
81
80
  }
82
81
  };
83
- this.$headers = new MapStore(createMapStore(initialStore));
82
+ this.$headers = new MapStore(createMapStore({}));
84
83
  this.initInterceptors();
85
84
  this.clients = new Map();
85
+ const [createFetcherStore, createMutatorStore, utils] = nanoquery();
86
+ this.nanoquery = {
87
+ createFetcherStore,
88
+ createMutatorStore,
89
+ utils
90
+ };
86
91
  this.transport = createGrpcWebTransport({
87
- baseUrl: process.env.GRPC_HOST,
92
+ baseUrl: process.env.NX_GRPC_HOST || 'https://grpc-web.next.streamlayer.io:443',
88
93
  interceptors: this.interceptors,
89
94
  useBinaryFormat: true
90
95
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../packages/sdk-web-api/src/grpc/transport.ts"],"sourcesContent":["import { MapStore, createMapStore } from '@streamlayer/sdk-web-interfaces'\n\nimport { createRouterTransport, ConnectRouter } from '@connectrpc/connect'\nimport { Interceptor, createPromiseClient, PromiseClient, UnaryRequest, StreamRequest } from '@bufbuild/connect'\nimport type { ServiceType } from '@bufbuild/protobuf'\nimport { createGrpcWebTransport } from '@bufbuild/connect-web'\nimport type { KeyInput } from '@nanostores/query'\n\ntype KnownHeaders = {\n authorization?: string\n sdk?: string\n} & Record<string, string>\n\nconst initialStore: KnownHeaders = {\n sdk: process.env.SDK_KEY,\n}\n\nexport type GrpcTransport = Transport['transport']\n\ntype ReservedHeaders = 'sdk' | 'authorization'\ntype ExcludeReservedHeaders<T> = ReservedHeaders extends T ? never : T & T extends ReservedHeaders ? never : T\n\ndeclare global {\n interface Window {\n __GRPC_DEVTOOLS_EXTENSION__?: () => import('@bufbuild/connect').Interceptor\n }\n}\n\n/**\n * transport wrapper, initialize grpc transport, store headers and connect interceptors\n */\nexport class Transport {\n public readonly transport: ReturnType<typeof createGrpcWebTransport>\n protected interceptors: Interceptor[] = []\n private readonly $headers: MapStore<KnownHeaders>\n private clients: Map<keyof ServiceType['methods'], PromiseClient<ServiceType>>\n\n constructor() {\n this.$headers = new MapStore<KnownHeaders>(createMapStore(initialStore))\n this.initInterceptors()\n this.clients = new Map()\n\n this.transport = createGrpcWebTransport({\n baseUrl: process.env.GRPC_HOST,\n interceptors: this.interceptors,\n useBinaryFormat: true,\n })\n }\n\n registerInterceptor = (interceptor: Interceptor) => {\n this.interceptors.push(interceptor)\n }\n\n removeInterceptor = (interceptor: Interceptor) => {\n this.interceptors = this.interceptors.filter((i) => i !== interceptor)\n }\n\n getClient = <T extends ServiceType>(service: T): PromiseClient<T> => {\n const serviceName = service.typeName\n\n if (this.clients.has(serviceName)) {\n return this.clients.get(serviceName) as PromiseClient<T>\n }\n\n const client = createPromiseClient(service, this.transport)\n\n this.clients.set(serviceName, client)\n\n return client\n }\n\n createPromiseClient = <T extends ServiceType>(\n service: T,\n { params = [], method }: { params?: KeyInput; method: keyof T['methods'] },\n ) => {\n const client = this.getClient(service)\n\n const methodName = service.methods[method].name\n const queryKey = [\n service.typeName,\n methodName.charAt(0).toLowerCase() + methodName.slice(1),\n ...(Array.isArray(params) ? params : [params]),\n ]\n\n return { client, queryKey }\n }\n\n setSdkKey = (sdkKey: string) => {\n this.$headers.setValue('sdk', sdkKey)\n }\n\n setAuth = (token: string) => {\n this.$headers.setValue('authorization', token)\n }\n\n setHeader = <T extends keyof KnownHeaders = string>(name: ExcludeReservedHeaders<T>, value: string) =>\n this.$headers.setValue<string>(name, value)\n\n getHeader = (name: keyof KnownHeaders) => this.$headers.getValue(name)\n\n getHeaders = () => this.$headers.getValues()\n\n initInterceptors = () => {\n if (this.interceptors.length !== 0) {\n return\n }\n\n const auth: Interceptor = (next) => async (req) => {\n const headers = this.$headers.getValues()\n\n for (const header in headers) {\n req.header.set(header, headers[header])\n }\n try {\n return await next(req)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.log({ err }, 'catch err') // logout and something like this\n\n throw err\n }\n }\n\n this.interceptors.push(auth)\n\n if (window.__GRPC_DEVTOOLS_EXTENSION__) {\n this.interceptors.push(window.__GRPC_DEVTOOLS_EXTENSION__())\n } else {\n window.addEventListener('grpc_devtools_loaded', () => {\n if (window.__GRPC_DEVTOOLS_EXTENSION__) {\n this.interceptors.push(window.__GRPC_DEVTOOLS_EXTENSION__())\n }\n })\n }\n }\n}\n\nexport class MockTransport extends Transport {\n public declare transport: ReturnType<typeof createRouterTransport>\n public calls: Array<UnaryRequest | StreamRequest>\n\n constructor(transport: (router: ConnectRouter) => void) {\n super()\n\n this.calls = []\n this.interceptors.push((next) => (req) => {\n this.calls.push(req)\n\n return next(req)\n })\n this.transport = createRouterTransport(transport, {\n transport: {\n interceptors: this.interceptors,\n },\n })\n }\n}\n"],"names":["MapStore","createMapStore","createRouterTransport","createPromiseClient","createGrpcWebTransport","initialStore","sdk","process","env","SDK_KEY","Transport","constructor","interceptors","registerInterceptor","interceptor","push","removeInterceptor","filter","i","getClient","service","serviceName","typeName","clients","has","get","client","transport","set","params","method","methodName","methods","name","queryKey","charAt","toLowerCase","slice","Array","isArray","setSdkKey","sdkKey","$headers","setValue","setAuth","token","setHeader","value","getHeader","getValue","getHeaders","getValues","initInterceptors","length","auth","next","req","headers","header","err","console","log","window","__GRPC_DEVTOOLS_EXTENSION__","addEventListener","Map","baseUrl","GRPC_HOST","useBinaryFormat","MockTransport","calls"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../packages/sdk-web-api/src/grpc/transport.ts"],"sourcesContent":["import { MapStore, createMapStore } from '@streamlayer/sdk-web-interfaces'\n\nimport { createRouterTransport, ConnectRouter } from '@connectrpc/connect'\nimport { Interceptor, createPromiseClient, PromiseClient, UnaryRequest, StreamRequest } from '@bufbuild/connect'\nimport type { ServiceType } from '@bufbuild/protobuf'\nimport { createGrpcWebTransport } from '@bufbuild/connect-web'\nimport type { KeyInput } from '@nanostores/query'\nimport { nanoquery } from '@nanostores/query'\n\ntype KnownHeaders = {\n authorization?: string\n sdk?: string\n} & Record<string, string>\n\nexport type GrpcTransport = Transport['transport']\n\ntype ReservedHeaders = 'sdk' | 'authorization'\ntype ExcludeReservedHeaders<T> = ReservedHeaders extends T ? never : T & T extends ReservedHeaders ? never : T\n\ndeclare global {\n interface Window {\n __GRPC_DEVTOOLS_EXTENSION__?: () => import('@bufbuild/connect').Interceptor\n }\n}\ntype NanoqueryReturnType = ReturnType<typeof nanoquery>\ntype NanoqueryObjectType = {\n createFetcherStore: NanoqueryReturnType[0]\n createMutatorStore: NanoqueryReturnType[1]\n utils: NanoqueryReturnType[2]\n}\n/**\n * transport wrapper, initialize grpc transport, store headers and connect interceptors\n */\nexport class Transport {\n public readonly transport: ReturnType<typeof createGrpcWebTransport>\n public readonly nanoquery: NanoqueryObjectType\n\n protected interceptors: Interceptor[] = []\n private readonly $headers: MapStore<KnownHeaders>\n private clients: Map<keyof ServiceType['methods'], PromiseClient<ServiceType>>\n\n constructor() {\n this.$headers = new MapStore<KnownHeaders>(createMapStore({}))\n this.initInterceptors()\n this.clients = new Map()\n const [createFetcherStore, createMutatorStore, utils] = nanoquery()\n\n this.nanoquery = { createFetcherStore, createMutatorStore, utils }\n\n this.transport = createGrpcWebTransport({\n baseUrl: process.env.NX_GRPC_HOST || 'https://grpc-web.next.streamlayer.io:443',\n interceptors: this.interceptors,\n useBinaryFormat: true,\n })\n }\n\n registerInterceptor = (interceptor: Interceptor) => {\n this.interceptors.push(interceptor)\n }\n\n removeInterceptor = (interceptor: Interceptor) => {\n this.interceptors = this.interceptors.filter((i) => i !== interceptor)\n }\n\n getClient = <T extends ServiceType>(service: T): PromiseClient<T> => {\n const serviceName = service.typeName\n\n if (this.clients.has(serviceName)) {\n return this.clients.get(serviceName) as PromiseClient<T>\n }\n\n const client = createPromiseClient(service, this.transport)\n\n this.clients.set(serviceName, client)\n\n return client\n }\n\n createPromiseClient = <T extends ServiceType>(\n service: T,\n { params = [], method }: { params?: KeyInput; method: keyof T['methods'] },\n ) => {\n const client = this.getClient(service)\n\n const methodName = service.methods[method].name\n const queryKey = [\n service.typeName,\n methodName.charAt(0).toLowerCase() + methodName.slice(1),\n ...(Array.isArray(params) ? params : [params]),\n ]\n\n return { client, queryKey, queryKeyStr: queryKey.toString() }\n }\n\n setSdkKey = (sdkKey: string) => {\n this.$headers.setValue('sdk', sdkKey)\n }\n\n setAuth = (token: string) => {\n this.$headers.setValue('authorization', token)\n }\n\n setHeader = <T extends keyof KnownHeaders = string>(name: ExcludeReservedHeaders<T>, value: string) =>\n this.$headers.setValue<string>(name, value)\n\n getHeader = (name: keyof KnownHeaders) => this.$headers.getValue(name)\n\n getHeaders = () => this.$headers.getValues()\n\n initInterceptors = () => {\n if (this.interceptors.length !== 0) {\n return\n }\n\n const auth: Interceptor = (next) => async (req) => {\n const headers = this.$headers.getValues()\n\n for (const header in headers) {\n req.header.set(header, headers[header])\n }\n try {\n return await next(req)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.log({ err }, 'catch err') // logout and something like this\n\n throw err\n }\n }\n\n this.interceptors.push(auth)\n\n if (window.__GRPC_DEVTOOLS_EXTENSION__) {\n this.interceptors.push(window.__GRPC_DEVTOOLS_EXTENSION__())\n } else {\n window.addEventListener('grpc_devtools_loaded', () => {\n if (window.__GRPC_DEVTOOLS_EXTENSION__) {\n this.interceptors.push(window.__GRPC_DEVTOOLS_EXTENSION__())\n }\n })\n }\n }\n}\n\nexport class MockTransport extends Transport {\n public declare transport: ReturnType<typeof createRouterTransport>\n public calls: Array<UnaryRequest | StreamRequest>\n\n constructor(transport: (router: ConnectRouter) => void) {\n super()\n\n this.calls = []\n this.interceptors.push((next) => (req) => {\n this.calls.push(req)\n\n return next(req)\n })\n this.transport = createRouterTransport(transport, {\n transport: {\n interceptors: this.interceptors,\n },\n })\n }\n}\n"],"names":["MapStore","createMapStore","createRouterTransport","createPromiseClient","createGrpcWebTransport","nanoquery","Transport","constructor","interceptors","registerInterceptor","interceptor","push","removeInterceptor","filter","i","getClient","service","serviceName","typeName","clients","has","get","client","transport","set","params","method","methodName","methods","name","queryKey","charAt","toLowerCase","slice","Array","isArray","queryKeyStr","toString","setSdkKey","sdkKey","$headers","setValue","setAuth","token","setHeader","value","getHeader","getValue","getHeaders","getValues","initInterceptors","length","auth","next","req","headers","header","err","console","log","window","__GRPC_DEVTOOLS_EXTENSION__","addEventListener","Map","createFetcherStore","createMutatorStore","utils","baseUrl","process","env","NX_GRPC_HOST","useBinaryFormat","MockTransport","calls"],"mappings":"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"}