@streamlayer/sdk-web-api 0.1.0 → 0.4.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,15 +1,12 @@
1
1
  {
2
2
  "name": "@streamlayer/sdk-web-api",
3
- "version": "0.1.0",
3
+ "version": "0.4.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
- "scripts": {
11
- "comp": "tsc --showConfig"
12
- },
13
10
  "dependencies": {
14
11
  "@bufbuild/connect": "*",
15
12
  "@bufbuild/connect-web": "*",
@@ -12,6 +12,9 @@ declare global {
12
12
  __GRPC_DEVTOOLS_EXTENSION__?: () => import('@bufbuild/connect').Interceptor;
13
13
  }
14
14
  }
15
+ /**
16
+ * transport wrapper, initialize grpc transport, store headers and connect interceptors
17
+ */
15
18
  export declare class Transport {
16
19
  readonly transport: ReturnType<typeof createGrpcWebTransport>;
17
20
  private interceptors;
@@ -1,9 +1,11 @@
1
1
  import { MapStore, createMapStore } from '@streamlayer/sdk-web-interfaces';
2
2
  import { createGrpcWebTransport } from '@bufbuild/connect-web';
3
3
  const initialStore = {
4
- sdk: process.env.SDK_KEY || '32033290f908e5630519b4b5ad2f4a9ef9c1722d20ea50b3047536d62be9ef25'
4
+ sdk: process.env.SDK_KEY
5
5
  };
6
- export class Transport {
6
+ /**
7
+ * transport wrapper, initialize grpc transport, store headers and connect interceptors
8
+ */ export class Transport {
7
9
  constructor(){
8
10
  this.interceptors = new Set();
9
11
  this.registerInterceptor = (interceptor)=>{
@@ -53,7 +55,7 @@ export class Transport {
53
55
  this.$headers = new MapStore(createMapStore(initialStore));
54
56
  this.initInterceptors();
55
57
  this.transport = createGrpcWebTransport({
56
- baseUrl: process.env.GRPC_HOST || 'https://grpc-web.next.streamlayer.io:443',
58
+ baseUrl: process.env.GRPC_HOST,
57
59
  interceptors: [
58
60
  ...this.interceptors.values()
59
61
  ],
@@ -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 { Interceptor } from '@bufbuild/connect'\nimport { createGrpcWebTransport } from '@bufbuild/connect-web'\n\ntype KnownHeaders = {\n authorization?: string\n sdk?: string\n} & Record<string, string>\n\nconst initialStore: KnownHeaders = {\n sdk:\n process.env.SDK_KEY ||\n '32033290f908e5630519b4b5ad2f4a9ef9c1722d20ea50b3047536d62be9ef25',\n}\n\nexport type GrpcTransport = Transport['transport']\n\ntype ReservedHeaders = 'sdk' | 'authorization'\ntype ExcludeReservedHeaders<T> = ReservedHeaders extends T\n ? never\n : T & T extends ReservedHeaders\n ? never\n : T\n\ndeclare global {\n interface Window {\n __GRPC_DEVTOOLS_EXTENSION__?: () => import('@bufbuild/connect').Interceptor\n }\n}\n\nexport class Transport {\n public readonly transport: ReturnType<typeof createGrpcWebTransport>\n private interceptors: Set<Interceptor> = new Set()\n private readonly $headers: MapStore<KnownHeaders>\n\n constructor() {\n this.$headers = new MapStore<KnownHeaders>(createMapStore(initialStore))\n this.initInterceptors()\n\n this.transport = createGrpcWebTransport({\n baseUrl:\n process.env.GRPC_HOST || 'https://grpc-web.next.streamlayer.io:443',\n interceptors: [...this.interceptors.values()],\n useBinaryFormat: true,\n })\n }\n\n registerInterceptor = (interceptor: Interceptor) => {\n this.interceptors.add(interceptor)\n }\n\n removeInterceptor = (interceptor: Interceptor) => {\n this.interceptors.delete(interceptor)\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>(\n name: ExcludeReservedHeaders<T>,\n 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.size !== 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\n try {\n return await next(req)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.log('catch err') // logout and something like this\n\n throw err\n }\n }\n\n this.interceptors.add(auth)\n\n if (window.__GRPC_DEVTOOLS_EXTENSION__) {\n this.interceptors.add(window.__GRPC_DEVTOOLS_EXTENSION__())\n } else {\n window.addEventListener('grpc_devtools_loaded', () => {\n if (window.__GRPC_DEVTOOLS_EXTENSION__) {\n this.interceptors.add(window.__GRPC_DEVTOOLS_EXTENSION__())\n }\n })\n }\n }\n}\n"],"names":["MapStore","createMapStore","createGrpcWebTransport","initialStore","sdk","process","env","SDK_KEY","Transport","constructor","interceptors","Set","registerInterceptor","interceptor","add","removeInterceptor","delete","setSdkKey","sdkKey","$headers","setValue","setAuth","token","setHeader","name","value","getHeader","getValue","getHeaders","getValues","initInterceptors","size","auth","next","req","headers","header","set","err","console","log","window","__GRPC_DEVTOOLS_EXTENSION__","addEventListener","transport","baseUrl","GRPC_HOST","values","useBinaryFormat"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,cAAc,QAAQ,kCAAiC;AAG1E,SAASC,sBAAsB,QAAQ,wBAAuB;AAO9D,MAAMC,eAA6B;IACjCC,KACEC,QAAQC,GAAG,CAACC,OAAO,IACnB;AACJ;AAiBA,OAAO,MAAMC;IAKXC,aAAc;aAHNC,eAAiC,IAAIC;aAe7CC,sBAAsB,CAACC;YACrB,IAAI,CAACH,YAAY,CAACI,GAAG,CAACD;QACxB;aAEAE,oBAAoB,CAACF;YACnB,IAAI,CAACH,YAAY,CAACM,MAAM,CAACH;QAC3B;aAEAI,YAAY,CAACC;YACX,IAAI,CAACC,QAAQ,CAACC,QAAQ,CAAC,OAAOF;QAChC;aAEAG,UAAU,CAACC;YACT,IAAI,CAACH,QAAQ,CAACC,QAAQ,CAAC,iBAAiBE;QAC1C;aAEAC,YAAY,CACVC,MACAC,QACG,IAAI,CAACN,QAAQ,CAACC,QAAQ,CAASI,MAAMC;aAE1CC,YAAY,CAACF,OAA6B,IAAI,CAACL,QAAQ,CAACQ,QAAQ,CAACH;aAEjEI,aAAa,IAAM,IAAI,CAACT,QAAQ,CAACU,SAAS;aAE1CC,mBAAmB;YACjB,IAAI,IAAI,CAACpB,YAAY,CAACqB,IAAI,KAAK,GAAG;gBAChC;YACF;YAEA,MAAMC,OAAoB,CAACC,OAAS,OAAOC;oBACzC,MAAMC,UAAU,IAAI,CAAChB,QAAQ,CAACU,SAAS;oBAEvC,IAAK,MAAMO,UAAUD,QAAS;wBAC5BD,IAAIE,MAAM,CAACC,GAAG,CAACD,QAAQD,OAAO,CAACC,OAAO;oBACxC;oBAEA,IAAI;wBACF,OAAO,MAAMH,KAAKC;oBACpB,EAAE,OAAOI,KAAK;wBACZ,sCAAsC;wBACtCC,QAAQC,GAAG,CAAC,aAAa,iCAAiC;;wBAE1D,MAAMF;oBACR;gBACF;YAEA,IAAI,CAAC5B,YAAY,CAACI,GAAG,CAACkB;YAEtB,IAAIS,OAAOC,2BAA2B,EAAE;gBACtC,IAAI,CAAChC,YAAY,CAACI,GAAG,CAAC2B,OAAOC,2BAA2B;YAC1D,OAAO;gBACLD,OAAOE,gBAAgB,CAAC,wBAAwB;oBAC9C,IAAIF,OAAOC,2BAA2B,EAAE;wBACtC,IAAI,CAAChC,YAAY,CAACI,GAAG,CAAC2B,OAAOC,2BAA2B;oBAC1D;gBACF;YACF;QACF;QArEE,IAAI,CAACvB,QAAQ,GAAG,IAAInB,SAAuBC,eAAeE;QAC1D,IAAI,CAAC2B,gBAAgB;QAErB,IAAI,CAACc,SAAS,GAAG1C,uBAAuB;YACtC2C,SACExC,QAAQC,GAAG,CAACwC,SAAS,IAAI;YAC3BpC,cAAc;mBAAI,IAAI,CAACA,YAAY,CAACqC,MAAM;aAAG;YAC7CC,iBAAiB;QACnB;IACF;AA6DF"}
1
+ {"version":3,"sources":["../../../../../packages/sdk-web-api/src/grpc/transport.ts"],"sourcesContent":["import { MapStore, createMapStore } from '@streamlayer/sdk-web-interfaces'\n\nimport { Interceptor } from '@bufbuild/connect'\nimport { createGrpcWebTransport } from '@bufbuild/connect-web'\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\n ? never\n : T & T extends ReservedHeaders\n ? never\n : 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 private interceptors: Set<Interceptor> = new Set()\n private readonly $headers: MapStore<KnownHeaders>\n\n constructor() {\n this.$headers = new MapStore<KnownHeaders>(createMapStore(initialStore))\n this.initInterceptors()\n\n this.transport = createGrpcWebTransport({\n baseUrl:\n process.env.GRPC_HOST,\n interceptors: [...this.interceptors.values()],\n useBinaryFormat: true,\n })\n }\n\n registerInterceptor = (interceptor: Interceptor) => {\n this.interceptors.add(interceptor)\n }\n\n removeInterceptor = (interceptor: Interceptor) => {\n this.interceptors.delete(interceptor)\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>(\n name: ExcludeReservedHeaders<T>,\n 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.size !== 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\n try {\n return await next(req)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.log('catch err') // logout and something like this\n\n throw err\n }\n }\n\n this.interceptors.add(auth)\n\n if (window.__GRPC_DEVTOOLS_EXTENSION__) {\n this.interceptors.add(window.__GRPC_DEVTOOLS_EXTENSION__())\n } else {\n window.addEventListener('grpc_devtools_loaded', () => {\n if (window.__GRPC_DEVTOOLS_EXTENSION__) {\n this.interceptors.add(window.__GRPC_DEVTOOLS_EXTENSION__())\n }\n })\n }\n }\n}\n"],"names":["MapStore","createMapStore","createGrpcWebTransport","initialStore","sdk","process","env","SDK_KEY","Transport","constructor","interceptors","Set","registerInterceptor","interceptor","add","removeInterceptor","delete","setSdkKey","sdkKey","$headers","setValue","setAuth","token","setHeader","name","value","getHeader","getValue","getHeaders","getValues","initInterceptors","size","auth","next","req","headers","header","set","err","console","log","window","__GRPC_DEVTOOLS_EXTENSION__","addEventListener","transport","baseUrl","GRPC_HOST","values","useBinaryFormat"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,cAAc,QAAQ,kCAAiC;AAG1E,SAASC,sBAAsB,QAAQ,wBAAuB;AAO9D,MAAMC,eAA6B;IACjCC,KAAKC,QAAQC,GAAG,CAACC,OAAO;AAC1B;AAiBA;;CAEC,GACD,OAAO,MAAMC;IAKXC,aAAc;aAHNC,eAAiC,IAAIC;aAe7CC,sBAAsB,CAACC;YACrB,IAAI,CAACH,YAAY,CAACI,GAAG,CAACD;QACxB;aAEAE,oBAAoB,CAACF;YACnB,IAAI,CAACH,YAAY,CAACM,MAAM,CAACH;QAC3B;aAEAI,YAAY,CAACC;YACX,IAAI,CAACC,QAAQ,CAACC,QAAQ,CAAC,OAAOF;QAChC;aAEAG,UAAU,CAACC;YACT,IAAI,CAACH,QAAQ,CAACC,QAAQ,CAAC,iBAAiBE;QAC1C;aAEAC,YAAY,CACVC,MACAC,QACG,IAAI,CAACN,QAAQ,CAACC,QAAQ,CAASI,MAAMC;aAE1CC,YAAY,CAACF,OAA6B,IAAI,CAACL,QAAQ,CAACQ,QAAQ,CAACH;aAEjEI,aAAa,IAAM,IAAI,CAACT,QAAQ,CAACU,SAAS;aAE1CC,mBAAmB;YACjB,IAAI,IAAI,CAACpB,YAAY,CAACqB,IAAI,KAAK,GAAG;gBAChC;YACF;YAEA,MAAMC,OAAoB,CAACC,OAAS,OAAOC;oBACzC,MAAMC,UAAU,IAAI,CAAChB,QAAQ,CAACU,SAAS;oBAEvC,IAAK,MAAMO,UAAUD,QAAS;wBAC5BD,IAAIE,MAAM,CAACC,GAAG,CAACD,QAAQD,OAAO,CAACC,OAAO;oBACxC;oBAEA,IAAI;wBACF,OAAO,MAAMH,KAAKC;oBACpB,EAAE,OAAOI,KAAK;wBACZ,sCAAsC;wBACtCC,QAAQC,GAAG,CAAC,aAAa,iCAAiC;;wBAE1D,MAAMF;oBACR;gBACF;YAEA,IAAI,CAAC5B,YAAY,CAACI,GAAG,CAACkB;YAEtB,IAAIS,OAAOC,2BAA2B,EAAE;gBACtC,IAAI,CAAChC,YAAY,CAACI,GAAG,CAAC2B,OAAOC,2BAA2B;YAC1D,OAAO;gBACLD,OAAOE,gBAAgB,CAAC,wBAAwB;oBAC9C,IAAIF,OAAOC,2BAA2B,EAAE;wBACtC,IAAI,CAAChC,YAAY,CAACI,GAAG,CAAC2B,OAAOC,2BAA2B;oBAC1D;gBACF;YACF;QACF;QArEE,IAAI,CAACvB,QAAQ,GAAG,IAAInB,SAAuBC,eAAeE;QAC1D,IAAI,CAAC2B,gBAAgB;QAErB,IAAI,CAACc,SAAS,GAAG1C,uBAAuB;YACtC2C,SACExC,QAAQC,GAAG,CAACwC,SAAS;YACvBpC,cAAc;mBAAI,IAAI,CAACA,YAAY,CAACqC,MAAM;aAAG;YAC7CC,iBAAiB;QACnB;IACF;AA6DF"}
@@ -0,0 +1,46 @@
1
+ import { Transport } from './transport';
2
+ describe('Transport', ()=>{
3
+ let transport;
4
+ beforeAll(()=>{
5
+ transport = new Transport();
6
+ });
7
+ it('should initialize with default values', ()=>{
8
+ expect(transport).toBeDefined();
9
+ expect(transport.transport).toBeDefined();
10
+ });
11
+ it('should set SDK key', ()=>{
12
+ const sdkKey = 'new-sdk-key';
13
+ transport.setSdkKey(sdkKey);
14
+ const headers = transport.getHeaders();
15
+ expect(headers.sdk).toEqual(sdkKey);
16
+ });
17
+ it('should set authorization token', ()=>{
18
+ const authToken = 'my-auth-token';
19
+ transport.setAuth(authToken);
20
+ const headers = transport.getHeaders();
21
+ expect(headers.authorization).toEqual(authToken);
22
+ });
23
+ it('should set custom header', ()=>{
24
+ const headerName = 'custom-header';
25
+ const headerValue = 'custom-value';
26
+ transport.setHeader(headerName, headerValue);
27
+ const headers = transport.getHeaders();
28
+ expect(headers[headerName]).toEqual(headerValue);
29
+ });
30
+ it('should get a specific header', ()=>{
31
+ const headerName = 'custom-header';
32
+ const headerValue = 'custom-value';
33
+ transport.setHeader(headerName, headerValue);
34
+ const retrievedValue = transport.getHeader(headerName);
35
+ expect(retrievedValue).toEqual(headerValue);
36
+ });
37
+ it('should remove an interceptor', ()=>{
38
+ const interceptor = (req)=>req;
39
+ transport.registerInterceptor(interceptor);
40
+ transport.removeInterceptor(interceptor);
41
+ const interceptors = Array.from(transport['interceptors']);
42
+ expect(interceptors).not.toContain(interceptor);
43
+ });
44
+ });
45
+
46
+ //# sourceMappingURL=transport.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../packages/sdk-web-api/src/grpc/transport.test.ts"],"sourcesContent":["import { Transport } from './transport';\n\ndescribe('Transport', () => {\n let transport: Transport;\n\n beforeAll(() => {\n transport = new Transport();\n });\n\n it('should initialize with default values', () => {\n expect(transport).toBeDefined();\n expect(transport.transport).toBeDefined();\n });\n\n it('should set SDK key', () => {\n const sdkKey = 'new-sdk-key';\n\n transport.setSdkKey(sdkKey);\n const headers = transport.getHeaders();\n\n expect(headers.sdk).toEqual(sdkKey);\n });\n\n it('should set authorization token', () => {\n const authToken = 'my-auth-token';\n\n transport.setAuth(authToken);\n const headers = transport.getHeaders();\n\n expect(headers.authorization).toEqual(authToken);\n });\n\n it('should set custom header', () => {\n const headerName = 'custom-header';\n const headerValue = 'custom-value';\n\n transport.setHeader(headerName, headerValue);\n const headers = transport.getHeaders();\n\n expect(headers[headerName]).toEqual(headerValue);\n });\n\n it('should get a specific header', () => {\n const headerName = 'custom-header';\n const headerValue = 'custom-value';\n\n transport.setHeader(headerName, headerValue);\n const retrievedValue = transport.getHeader(headerName);\n\n expect(retrievedValue).toEqual(headerValue);\n });\n\n it('should remove an interceptor', () => {\n const interceptor = (req) => req;\n\n transport.registerInterceptor(interceptor);\n transport.removeInterceptor(interceptor);\n const interceptors = Array.from(transport['interceptors']);\n\n expect(interceptors).not.toContain(interceptor);\n });\n});\n"],"names":["Transport","describe","transport","beforeAll","it","expect","toBeDefined","sdkKey","setSdkKey","headers","getHeaders","sdk","toEqual","authToken","setAuth","authorization","headerName","headerValue","setHeader","retrievedValue","getHeader","interceptor","req","registerInterceptor","removeInterceptor","interceptors","Array","from","not","toContain"],"mappings":"AAAA,SAASA,SAAS,QAAQ,cAAc;AAExCC,SAAS,aAAa;IACpB,IAAIC;IAEJC,UAAU;QACRD,YAAY,IAAIF;IAClB;IAEAI,GAAG,yCAAyC;QAC1CC,OAAOH,WAAWI,WAAW;QAC7BD,OAAOH,UAAUA,SAAS,EAAEI,WAAW;IACzC;IAEAF,GAAG,sBAAsB;QACvB,MAAMG,SAAS;QAEfL,UAAUM,SAAS,CAACD;QACpB,MAAME,UAAUP,UAAUQ,UAAU;QAEpCL,OAAOI,QAAQE,GAAG,EAAEC,OAAO,CAACL;IAC9B;IAEAH,GAAG,kCAAkC;QACnC,MAAMS,YAAY;QAElBX,UAAUY,OAAO,CAACD;QAClB,MAAMJ,UAAUP,UAAUQ,UAAU;QAEpCL,OAAOI,QAAQM,aAAa,EAAEH,OAAO,CAACC;IACxC;IAEAT,GAAG,4BAA4B;QAC7B,MAAMY,aAAa;QACnB,MAAMC,cAAc;QAEpBf,UAAUgB,SAAS,CAACF,YAAYC;QAChC,MAAMR,UAAUP,UAAUQ,UAAU;QAEpCL,OAAOI,OAAO,CAACO,WAAW,EAAEJ,OAAO,CAACK;IACtC;IAEAb,GAAG,gCAAgC;QACjC,MAAMY,aAAa;QACnB,MAAMC,cAAc;QAEpBf,UAAUgB,SAAS,CAACF,YAAYC;QAChC,MAAME,iBAAiBjB,UAAUkB,SAAS,CAACJ;QAE3CX,OAAOc,gBAAgBP,OAAO,CAACK;IACjC;IAEAb,GAAG,gCAAgC;QACjC,MAAMiB,cAAc,CAACC,MAAQA;QAE7BpB,UAAUqB,mBAAmB,CAACF;QAC9BnB,UAAUsB,iBAAiB,CAACH;QAC5B,MAAMI,eAAeC,MAAMC,IAAI,CAACzB,SAAS,CAAC,eAAe;QAEzDG,OAAOoB,cAAcG,GAAG,CAACC,SAAS,CAACR;IACrC;AACF"}
@@ -0,0 +1,7 @@
1
+ describe('My Test Suite', ()=>{
2
+ it('should pass this test', ()=>{
3
+ expect(true);
4
+ });
5
+ });
6
+
7
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../packages/sdk-web-api/src/index.test.ts"],"sourcesContent":["describe('My Test Suite', () => {\n it('should pass this test', () => {\n expect(true)\n });\n});\n"],"names":["describe","it","expect"],"mappings":"AAAAA,SAAS,iBAAiB;IACxBC,GAAG,yBAAyB;QAC1BC,OAAO;IACT;AACF"}