@pellux/goodvibes-sdk 0.18.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/README.md +32 -0
- package/dist/auth.d.ts +30 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +81 -0
- package/dist/browser.d.ts +8 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +45 -0
- package/dist/client.d.ts +37 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +90 -0
- package/dist/expo.d.ts +5 -0
- package/dist/expo.d.ts.map +1 -0
- package/dist/expo.js +4 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/node.d.ts +5 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +26 -0
- package/dist/react-native.d.ts +14 -0
- package/dist/react-native.d.ts.map +1 -0
- package/dist/react-native.js +54 -0
- package/dist/web.d.ts +6 -0
- package/dist/web.d.ts.map +1 -0
- package/dist/web.js +4 -0
- package/package.json +69 -0
package/README.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# @pellux/goodvibes-sdk
|
|
2
|
+
|
|
3
|
+
Umbrella GoodVibes SDK with Node, browser, web UI, React Native, and Expo integration helpers.
|
|
4
|
+
|
|
5
|
+
Install:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @pellux/goodvibes-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Entry points:
|
|
12
|
+
- `@pellux/goodvibes-sdk`
|
|
13
|
+
- `@pellux/goodvibes-sdk/node`
|
|
14
|
+
- `@pellux/goodvibes-sdk/browser`
|
|
15
|
+
- `@pellux/goodvibes-sdk/web`
|
|
16
|
+
- `@pellux/goodvibes-sdk/react-native`
|
|
17
|
+
- `@pellux/goodvibes-sdk/expo`
|
|
18
|
+
|
|
19
|
+
Example:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { createNodeGoodVibesSdk } from '@pellux/goodvibes-sdk/node';
|
|
23
|
+
|
|
24
|
+
const sdk = createNodeGoodVibesSdk({
|
|
25
|
+
baseUrl: 'http://127.0.0.1:3210',
|
|
26
|
+
authToken: process.env.GOODVIBES_TOKEN ?? null,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
console.log(await sdk.operator.control.snapshot());
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Use this package when you want the main consumer-facing GoodVibes TypeScript SDK rather than lower-level pieces.
|
package/dist/auth.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { OperatorMethodInput, OperatorMethodOutput } from '@pellux/goodvibes-contracts';
|
|
2
|
+
import type { AuthTokenResolver } from '@pellux/goodvibes-transport-http';
|
|
3
|
+
import type { OperatorSdk } from '@pellux/goodvibes-operator-sdk';
|
|
4
|
+
export type GoodVibesCurrentAuth = OperatorMethodOutput<'control.auth.current'>;
|
|
5
|
+
export type GoodVibesLoginInput = OperatorMethodInput<'control.auth.login'>;
|
|
6
|
+
export type GoodVibesLoginOutput = OperatorMethodOutput<'control.auth.login'>;
|
|
7
|
+
export interface GoodVibesTokenStore {
|
|
8
|
+
getToken(): Promise<string | null>;
|
|
9
|
+
setToken(token: string | null): Promise<void>;
|
|
10
|
+
clearToken(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export interface BrowserTokenStoreOptions {
|
|
13
|
+
readonly key?: string;
|
|
14
|
+
readonly storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>;
|
|
15
|
+
}
|
|
16
|
+
export interface GoodVibesAuthLoginOptions {
|
|
17
|
+
readonly persistToken?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface GoodVibesAuthClient {
|
|
20
|
+
readonly writable: boolean;
|
|
21
|
+
current(): Promise<GoodVibesCurrentAuth>;
|
|
22
|
+
login(input: GoodVibesLoginInput, options?: GoodVibesAuthLoginOptions): Promise<GoodVibesLoginOutput>;
|
|
23
|
+
getToken(): Promise<string | null>;
|
|
24
|
+
setToken(token: string | null): Promise<void>;
|
|
25
|
+
clearToken(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
export declare function createMemoryTokenStore(initialToken?: string | null): GoodVibesTokenStore;
|
|
28
|
+
export declare function createBrowserTokenStore(options?: BrowserTokenStoreOptions): GoodVibesTokenStore;
|
|
29
|
+
export declare function createGoodVibesAuthClient(operator: OperatorSdk, tokenStore: GoodVibesTokenStore | null, getAuthToken?: AuthTokenResolver): GoodVibesAuthClient;
|
|
30
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;AAChF,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzC,KAAK,CAAC,KAAK,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtG,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAYD,wBAAgB,sBAAsB,CAAC,YAAY,GAAE,MAAM,GAAG,IAAW,GAAG,mBAAmB,CAa9F;AAED,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,wBAA6B,GAAG,mBAAmB,CAmBnG;AAwBD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,mBAAmB,GAAG,IAAI,EACtC,YAAY,CAAC,EAAE,iBAAiB,GAC/B,mBAAmB,CA0BrB"}
|
package/dist/auth.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { ConfigurationError } from '@pellux/goodvibes-errors';
|
|
2
|
+
function requireStorage(storage) {
|
|
3
|
+
const resolved = storage ?? globalThis.localStorage;
|
|
4
|
+
if (!resolved) {
|
|
5
|
+
throw new ConfigurationError('Browser token storage is unavailable. Pass BrowserTokenStoreOptions.storage or use createMemoryTokenStore().');
|
|
6
|
+
}
|
|
7
|
+
return resolved;
|
|
8
|
+
}
|
|
9
|
+
export function createMemoryTokenStore(initialToken = null) {
|
|
10
|
+
let token = initialToken;
|
|
11
|
+
return {
|
|
12
|
+
async getToken() {
|
|
13
|
+
return token;
|
|
14
|
+
},
|
|
15
|
+
async setToken(nextToken) {
|
|
16
|
+
token = nextToken;
|
|
17
|
+
},
|
|
18
|
+
async clearToken() {
|
|
19
|
+
token = null;
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function createBrowserTokenStore(options = {}) {
|
|
24
|
+
const storage = requireStorage(options.storage);
|
|
25
|
+
const key = options.key?.trim() || 'goodvibes.token';
|
|
26
|
+
return {
|
|
27
|
+
async getToken() {
|
|
28
|
+
const value = storage.getItem(key);
|
|
29
|
+
return value && value.trim() ? value : null;
|
|
30
|
+
},
|
|
31
|
+
async setToken(token) {
|
|
32
|
+
if (!token) {
|
|
33
|
+
storage.removeItem(key);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
storage.setItem(key, token);
|
|
37
|
+
},
|
|
38
|
+
async clearToken() {
|
|
39
|
+
storage.removeItem(key);
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async function readToken(tokenStore, getAuthToken) {
|
|
44
|
+
if (tokenStore) {
|
|
45
|
+
return await tokenStore.getToken();
|
|
46
|
+
}
|
|
47
|
+
if (getAuthToken) {
|
|
48
|
+
return (await getAuthToken()) ?? null;
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
function assertWritableTokenStore(tokenStore) {
|
|
53
|
+
if (!tokenStore) {
|
|
54
|
+
throw new ConfigurationError('This SDK instance uses a read-only auth token resolver. Pass tokenStore to enable token persistence and mutation.');
|
|
55
|
+
}
|
|
56
|
+
return tokenStore;
|
|
57
|
+
}
|
|
58
|
+
export function createGoodVibesAuthClient(operator, tokenStore, getAuthToken) {
|
|
59
|
+
return {
|
|
60
|
+
writable: tokenStore !== null,
|
|
61
|
+
async current() {
|
|
62
|
+
return await operator.control.auth.current();
|
|
63
|
+
},
|
|
64
|
+
async login(input, options = {}) {
|
|
65
|
+
const result = await operator.control.auth.login(input);
|
|
66
|
+
if ((options.persistToken ?? true) && tokenStore) {
|
|
67
|
+
await tokenStore.setToken(result.token);
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
},
|
|
71
|
+
async getToken() {
|
|
72
|
+
return await readToken(tokenStore, getAuthToken);
|
|
73
|
+
},
|
|
74
|
+
async setToken(token) {
|
|
75
|
+
await assertWritableTokenStore(tokenStore).setToken(token);
|
|
76
|
+
},
|
|
77
|
+
async clearToken() {
|
|
78
|
+
await assertWritableTokenStore(tokenStore).clearToken();
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type GoodVibesSdkOptions, type GoodVibesSdk } from './client.js';
|
|
2
|
+
export interface BrowserGoodVibesSdkOptions extends Omit<GoodVibesSdkOptions, 'baseUrl' | 'fetch' | 'WebSocketImpl'> {
|
|
3
|
+
readonly baseUrl?: string;
|
|
4
|
+
readonly fetch?: typeof fetch;
|
|
5
|
+
readonly WebSocketImpl?: typeof WebSocket;
|
|
6
|
+
}
|
|
7
|
+
export declare function createBrowserGoodVibesSdk(options?: BrowserGoodVibesSdkOptions): GoodVibesSdk;
|
|
8
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,0BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,OAAO,GAAG,eAAe,CAAC;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;CAC3C;AAaD,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,0BAA+B,GACvC,YAAY,CAiCd"}
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ConfigurationError } from '@pellux/goodvibes-errors';
|
|
2
|
+
import { createGoodVibesSdk, } from './client.js';
|
|
3
|
+
function resolveBrowserBaseUrl(baseUrl) {
|
|
4
|
+
const explicit = baseUrl?.trim();
|
|
5
|
+
if (explicit)
|
|
6
|
+
return explicit;
|
|
7
|
+
if (typeof globalThis.location?.origin === 'string' && globalThis.location.origin.trim()) {
|
|
8
|
+
return globalThis.location.origin.trim();
|
|
9
|
+
}
|
|
10
|
+
throw new ConfigurationError('Browser baseUrl is required when location.origin is unavailable.');
|
|
11
|
+
}
|
|
12
|
+
export function createBrowserGoodVibesSdk(options = {}) {
|
|
13
|
+
return createGoodVibesSdk({
|
|
14
|
+
baseUrl: resolveBrowserBaseUrl(options.baseUrl),
|
|
15
|
+
authToken: options.authToken ?? null,
|
|
16
|
+
...(options.retry ? { retry: options.retry } : {
|
|
17
|
+
retry: {
|
|
18
|
+
maxAttempts: 3,
|
|
19
|
+
baseDelayMs: 200,
|
|
20
|
+
maxDelayMs: 1_500,
|
|
21
|
+
},
|
|
22
|
+
}),
|
|
23
|
+
realtime: {
|
|
24
|
+
sseReconnect: {
|
|
25
|
+
enabled: true,
|
|
26
|
+
baseDelayMs: 500,
|
|
27
|
+
maxDelayMs: 5_000,
|
|
28
|
+
...(options.realtime?.sseReconnect ?? {}),
|
|
29
|
+
},
|
|
30
|
+
webSocketReconnect: {
|
|
31
|
+
enabled: true,
|
|
32
|
+
baseDelayMs: 500,
|
|
33
|
+
maxDelayMs: 5_000,
|
|
34
|
+
...(options.realtime?.webSocketReconnect ?? {}),
|
|
35
|
+
},
|
|
36
|
+
...(options.realtime ?? {}),
|
|
37
|
+
},
|
|
38
|
+
...(options.getAuthToken ? { getAuthToken: options.getAuthToken } : {}),
|
|
39
|
+
...(options.tokenStore ? { tokenStore: options.tokenStore } : {}),
|
|
40
|
+
...(options.headers ? { headers: options.headers } : {}),
|
|
41
|
+
...(options.getHeaders ? { getHeaders: options.getHeaders } : {}),
|
|
42
|
+
...(options.fetch ? { fetch: options.fetch } : {}),
|
|
43
|
+
...(options.WebSocketImpl ? { WebSocketImpl: options.WebSocketImpl } : {}),
|
|
44
|
+
});
|
|
45
|
+
}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type OperatorSdk } from '@pellux/goodvibes-operator-sdk';
|
|
2
|
+
import { type PeerSdk } from '@pellux/goodvibes-peer-sdk';
|
|
3
|
+
import type { AuthTokenResolver, HeaderResolver, HttpRetryPolicy, StreamReconnectPolicy } from '@pellux/goodvibes-transport-http';
|
|
4
|
+
import { type RemoteRuntimeEvents } from '@pellux/goodvibes-transport-realtime';
|
|
5
|
+
import { type GoodVibesAuthClient, type GoodVibesTokenStore } from './auth.js';
|
|
6
|
+
export interface RuntimeEventRecord {
|
|
7
|
+
readonly type: string;
|
|
8
|
+
}
|
|
9
|
+
export interface GoodVibesSdkOptions {
|
|
10
|
+
readonly baseUrl: string;
|
|
11
|
+
readonly authToken?: string | null;
|
|
12
|
+
readonly getAuthToken?: AuthTokenResolver;
|
|
13
|
+
readonly tokenStore?: GoodVibesTokenStore;
|
|
14
|
+
readonly fetch?: typeof fetch;
|
|
15
|
+
readonly headers?: HeadersInit;
|
|
16
|
+
readonly getHeaders?: HeaderResolver;
|
|
17
|
+
readonly retry?: HttpRetryPolicy;
|
|
18
|
+
readonly WebSocketImpl?: typeof WebSocket;
|
|
19
|
+
readonly realtime?: GoodVibesRealtimeOptions;
|
|
20
|
+
}
|
|
21
|
+
export interface GoodVibesRealtimeOptions {
|
|
22
|
+
readonly sseReconnect?: StreamReconnectPolicy;
|
|
23
|
+
readonly webSocketReconnect?: StreamReconnectPolicy;
|
|
24
|
+
readonly onError?: (error: unknown) => void;
|
|
25
|
+
}
|
|
26
|
+
export interface GoodVibesRealtime {
|
|
27
|
+
viaSse(): RemoteRuntimeEvents<RuntimeEventRecord>;
|
|
28
|
+
viaWebSocket(webSocketImpl?: typeof WebSocket): RemoteRuntimeEvents<RuntimeEventRecord>;
|
|
29
|
+
}
|
|
30
|
+
export interface GoodVibesSdk {
|
|
31
|
+
readonly operator: OperatorSdk;
|
|
32
|
+
readonly peer: PeerSdk;
|
|
33
|
+
readonly auth: GoodVibesAuthClient;
|
|
34
|
+
readonly realtime: GoodVibesRealtime;
|
|
35
|
+
}
|
|
36
|
+
export declare function createGoodVibesSdk(options: GoodVibesSdkOptions): GoodVibesSdk;
|
|
37
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEL,KAAK,OAAO,EAEb,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,qBAAqB,EACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;CAC9C;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAClD,YAAY,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;CACzF;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;AA4DD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,mBAAmB,GAC3B,YAAY,CA6Cd"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ConfigurationError } from '@pellux/goodvibes-errors';
|
|
2
|
+
import { createOperatorSdk, } from '@pellux/goodvibes-operator-sdk';
|
|
3
|
+
import { createPeerSdk, } from '@pellux/goodvibes-peer-sdk';
|
|
4
|
+
import { createEventSourceConnector, createRemoteRuntimeEvents, createWebSocketConnector, } from '@pellux/goodvibes-transport-realtime';
|
|
5
|
+
import { createGoodVibesAuthClient, createMemoryTokenStore, } from './auth.js';
|
|
6
|
+
function requireBaseUrl(baseUrl) {
|
|
7
|
+
const normalized = baseUrl.trim();
|
|
8
|
+
if (!normalized) {
|
|
9
|
+
throw new ConfigurationError('GoodVibes baseUrl is required');
|
|
10
|
+
}
|
|
11
|
+
return normalized;
|
|
12
|
+
}
|
|
13
|
+
function requireFetchImplementation(fetchImpl) {
|
|
14
|
+
const resolved = fetchImpl ?? globalThis.fetch;
|
|
15
|
+
if (typeof resolved !== 'function') {
|
|
16
|
+
throw new ConfigurationError('Fetch implementation is required. Pass options.fetch or use a runtime that provides global fetch.');
|
|
17
|
+
}
|
|
18
|
+
return resolved;
|
|
19
|
+
}
|
|
20
|
+
function requireWebSocketImplementation(webSocketImpl) {
|
|
21
|
+
const resolved = webSocketImpl ?? globalThis.WebSocket;
|
|
22
|
+
if (typeof resolved !== 'function') {
|
|
23
|
+
throw new ConfigurationError('WebSocket implementation is required. Pass options.WebSocketImpl or use a runtime that provides global WebSocket.');
|
|
24
|
+
}
|
|
25
|
+
return resolved;
|
|
26
|
+
}
|
|
27
|
+
function createOperatorOptions(options) {
|
|
28
|
+
const getAuthToken = options.tokenStore
|
|
29
|
+
? () => options.tokenStore.getToken()
|
|
30
|
+
: options.getAuthToken;
|
|
31
|
+
return {
|
|
32
|
+
baseUrl: requireBaseUrl(options.baseUrl),
|
|
33
|
+
authToken: options.authToken ?? null,
|
|
34
|
+
...(getAuthToken ? { getAuthToken } : {}),
|
|
35
|
+
...(options.fetch ? { fetch: options.fetch } : {}),
|
|
36
|
+
...(options.headers ? { headers: options.headers } : {}),
|
|
37
|
+
...(options.getHeaders ? { getHeaders: options.getHeaders } : {}),
|
|
38
|
+
...(options.retry ? { retry: options.retry } : {}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function createPeerOptions(options) {
|
|
42
|
+
const getAuthToken = options.tokenStore
|
|
43
|
+
? () => options.tokenStore.getToken()
|
|
44
|
+
: options.getAuthToken;
|
|
45
|
+
return {
|
|
46
|
+
baseUrl: requireBaseUrl(options.baseUrl),
|
|
47
|
+
authToken: options.authToken ?? null,
|
|
48
|
+
...(getAuthToken ? { getAuthToken } : {}),
|
|
49
|
+
...(options.fetch ? { fetch: options.fetch } : {}),
|
|
50
|
+
...(options.headers ? { headers: options.headers } : {}),
|
|
51
|
+
...(options.getHeaders ? { getHeaders: options.getHeaders } : {}),
|
|
52
|
+
...(options.retry ? { retry: options.retry } : {}),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function createGoodVibesSdk(options) {
|
|
56
|
+
const baseUrl = requireBaseUrl(options.baseUrl);
|
|
57
|
+
const tokenStore = options.tokenStore ?? (options.getAuthToken ? null : createMemoryTokenStore(options.authToken ?? null));
|
|
58
|
+
const authToken = options.authToken ?? null;
|
|
59
|
+
const getAuthToken = tokenStore
|
|
60
|
+
? () => tokenStore.getToken()
|
|
61
|
+
: options.getAuthToken;
|
|
62
|
+
const fetchImpl = () => requireFetchImplementation(options.fetch);
|
|
63
|
+
const operator = createOperatorSdk(createOperatorOptions({
|
|
64
|
+
...options,
|
|
65
|
+
tokenStore: tokenStore ?? undefined,
|
|
66
|
+
}));
|
|
67
|
+
const peer = createPeerSdk(createPeerOptions({
|
|
68
|
+
...options,
|
|
69
|
+
tokenStore: tokenStore ?? undefined,
|
|
70
|
+
}));
|
|
71
|
+
return {
|
|
72
|
+
operator,
|
|
73
|
+
peer,
|
|
74
|
+
auth: createGoodVibesAuthClient(operator, tokenStore, getAuthToken),
|
|
75
|
+
realtime: {
|
|
76
|
+
viaSse() {
|
|
77
|
+
return createRemoteRuntimeEvents(createEventSourceConnector(baseUrl, getAuthToken ?? authToken, fetchImpl(), {
|
|
78
|
+
reconnect: options.realtime?.sseReconnect,
|
|
79
|
+
onError: options.realtime?.onError,
|
|
80
|
+
}));
|
|
81
|
+
},
|
|
82
|
+
viaWebSocket(webSocketImpl) {
|
|
83
|
+
return createRemoteRuntimeEvents(createWebSocketConnector(baseUrl, getAuthToken ?? authToken, requireWebSocketImplementation(webSocketImpl ?? options.WebSocketImpl), {
|
|
84
|
+
reconnect: options.realtime?.webSocketReconnect,
|
|
85
|
+
onError: options.realtime?.onError,
|
|
86
|
+
}));
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
package/dist/expo.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ReactNativeGoodVibesSdk, type ReactNativeGoodVibesSdkOptions } from './react-native.js';
|
|
2
|
+
export interface ExpoGoodVibesSdkOptions extends ReactNativeGoodVibesSdkOptions {
|
|
3
|
+
}
|
|
4
|
+
export declare function createExpoGoodVibesSdk(options: ExpoGoodVibesSdkOptions): ReactNativeGoodVibesSdk;
|
|
5
|
+
//# sourceMappingURL=expo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../src/expo.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACpC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,uBAAwB,SAAQ,8BAA8B;CAAG;AAElF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,uBAAuB,CAEhG"}
|
package/dist/expo.js
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type { GoodVibesRealtime, GoodVibesSdk, GoodVibesRealtimeOptions, GoodVibesSdkOptions, } from './client.js';
|
|
2
|
+
export { createGoodVibesSdk } from './client.js';
|
|
3
|
+
export type { BrowserTokenStoreOptions, GoodVibesAuthClient, GoodVibesAuthLoginOptions, GoodVibesCurrentAuth, GoodVibesLoginInput, GoodVibesLoginOutput, GoodVibesTokenStore, } from './auth.js';
|
|
4
|
+
export { createBrowserTokenStore, createGoodVibesAuthClient, createMemoryTokenStore, } from './auth.js';
|
|
5
|
+
export type { BrowserGoodVibesSdkOptions } from './browser.js';
|
|
6
|
+
export { createBrowserGoodVibesSdk } from './browser.js';
|
|
7
|
+
export type { WebGoodVibesSdkOptions } from './web.js';
|
|
8
|
+
export { createWebGoodVibesSdk } from './web.js';
|
|
9
|
+
export type { NodeGoodVibesSdkOptions } from './node.js';
|
|
10
|
+
export { createNodeGoodVibesSdk } from './node.js';
|
|
11
|
+
export type { ReactNativeGoodVibesRealtime, ReactNativeGoodVibesSdk, ReactNativeGoodVibesSdkOptions, } from './react-native.js';
|
|
12
|
+
export { createReactNativeGoodVibesSdk } from './react-native.js';
|
|
13
|
+
export type { ExpoGoodVibesSdkOptions } from './expo.js';
|
|
14
|
+
export { createExpoGoodVibesSdk } from './expo.js';
|
|
15
|
+
export * from '@pellux/goodvibes-contracts';
|
|
16
|
+
export * from '@pellux/goodvibes-daemon-sdk';
|
|
17
|
+
export * from '@pellux/goodvibes-errors';
|
|
18
|
+
export * from '@pellux/goodvibes-transport-core';
|
|
19
|
+
export * from '@pellux/goodvibes-transport-direct';
|
|
20
|
+
export * from '@pellux/goodvibes-transport-http';
|
|
21
|
+
export * from '@pellux/goodvibes-transport-realtime';
|
|
22
|
+
export * from '@pellux/goodvibes-operator-sdk';
|
|
23
|
+
export * from '@pellux/goodvibes-peer-sdk';
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EACV,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,YAAY,EACV,4BAA4B,EAC5B,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { createGoodVibesSdk } from './client.js';
|
|
2
|
+
export { createBrowserTokenStore, createGoodVibesAuthClient, createMemoryTokenStore, } from './auth.js';
|
|
3
|
+
export { createBrowserGoodVibesSdk } from './browser.js';
|
|
4
|
+
export { createWebGoodVibesSdk } from './web.js';
|
|
5
|
+
export { createNodeGoodVibesSdk } from './node.js';
|
|
6
|
+
export { createReactNativeGoodVibesSdk } from './react-native.js';
|
|
7
|
+
export { createExpoGoodVibesSdk } from './expo.js';
|
|
8
|
+
export * from '@pellux/goodvibes-contracts';
|
|
9
|
+
export * from '@pellux/goodvibes-daemon-sdk';
|
|
10
|
+
export * from '@pellux/goodvibes-errors';
|
|
11
|
+
export * from '@pellux/goodvibes-transport-core';
|
|
12
|
+
export * from '@pellux/goodvibes-transport-direct';
|
|
13
|
+
export * from '@pellux/goodvibes-transport-http';
|
|
14
|
+
export * from '@pellux/goodvibes-transport-realtime';
|
|
15
|
+
export * from '@pellux/goodvibes-operator-sdk';
|
|
16
|
+
export * from '@pellux/goodvibes-peer-sdk';
|
package/dist/node.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type GoodVibesSdkOptions, type GoodVibesSdk } from './client.js';
|
|
2
|
+
export interface NodeGoodVibesSdkOptions extends GoodVibesSdkOptions {
|
|
3
|
+
}
|
|
4
|
+
export declare function createNodeGoodVibesSdk(options: NodeGoodVibesSdkOptions): GoodVibesSdk;
|
|
5
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;CAAG;AAEvE,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,YAAY,CAwBd"}
|
package/dist/node.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createGoodVibesSdk, } from './client.js';
|
|
2
|
+
export function createNodeGoodVibesSdk(options) {
|
|
3
|
+
return createGoodVibesSdk({
|
|
4
|
+
...options,
|
|
5
|
+
retry: options.retry ?? {
|
|
6
|
+
maxAttempts: 3,
|
|
7
|
+
baseDelayMs: 200,
|
|
8
|
+
maxDelayMs: 2_000,
|
|
9
|
+
},
|
|
10
|
+
realtime: {
|
|
11
|
+
sseReconnect: {
|
|
12
|
+
enabled: true,
|
|
13
|
+
baseDelayMs: 500,
|
|
14
|
+
maxDelayMs: 5_000,
|
|
15
|
+
...(options.realtime?.sseReconnect ?? {}),
|
|
16
|
+
},
|
|
17
|
+
webSocketReconnect: {
|
|
18
|
+
enabled: true,
|
|
19
|
+
baseDelayMs: 500,
|
|
20
|
+
maxDelayMs: 5_000,
|
|
21
|
+
...(options.realtime?.webSocketReconnect ?? {}),
|
|
22
|
+
},
|
|
23
|
+
...(options.realtime ?? {}),
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type RemoteRuntimeEvents } from '@pellux/goodvibes-transport-realtime';
|
|
2
|
+
import { type GoodVibesSdkOptions, type GoodVibesSdk, type RuntimeEventRecord } from './client.js';
|
|
3
|
+
export interface ReactNativeGoodVibesSdkOptions extends Omit<GoodVibesSdkOptions, 'WebSocketImpl'> {
|
|
4
|
+
readonly WebSocketImpl?: typeof WebSocket;
|
|
5
|
+
}
|
|
6
|
+
export interface ReactNativeGoodVibesRealtime {
|
|
7
|
+
runtime(): RemoteRuntimeEvents<RuntimeEventRecord>;
|
|
8
|
+
viaWebSocket(webSocketImpl?: typeof WebSocket): RemoteRuntimeEvents<RuntimeEventRecord>;
|
|
9
|
+
}
|
|
10
|
+
export type ReactNativeGoodVibesSdk = Omit<GoodVibesSdk, 'realtime'> & {
|
|
11
|
+
readonly realtime: ReactNativeGoodVibesRealtime;
|
|
12
|
+
};
|
|
13
|
+
export declare function createReactNativeGoodVibesSdk(options: ReactNativeGoodVibesSdkOptions): ReactNativeGoodVibesSdk;
|
|
14
|
+
//# sourceMappingURL=react-native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-native.d.ts","sourceRoot":"","sources":["../src/react-native.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,8BACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IACnD,YAAY,CAAC,aAAa,CAAC,EAAE,OAAO,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;CACzF;AAED,MAAM,MAAM,uBAAuB,GACjC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG;IAC/B,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;CACjD,CAAC;AAYJ,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,8BAA8B,GACtC,uBAAuB,CA0DzB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ConfigurationError } from '@pellux/goodvibes-errors';
|
|
2
|
+
import { createRemoteRuntimeEvents, createWebSocketConnector, } from '@pellux/goodvibes-transport-realtime';
|
|
3
|
+
import { createGoodVibesSdk, } from './client.js';
|
|
4
|
+
function requireReactNativeWebSocket(webSocketImpl) {
|
|
5
|
+
const resolved = webSocketImpl ?? globalThis.WebSocket;
|
|
6
|
+
if (typeof resolved !== 'function') {
|
|
7
|
+
throw new ConfigurationError('React Native realtime requires a WebSocket implementation. Pass options.WebSocketImpl or use a runtime that provides global WebSocket.');
|
|
8
|
+
}
|
|
9
|
+
return resolved;
|
|
10
|
+
}
|
|
11
|
+
export function createReactNativeGoodVibesSdk(options) {
|
|
12
|
+
const base = createGoodVibesSdk({
|
|
13
|
+
...options,
|
|
14
|
+
retry: options.retry ?? {
|
|
15
|
+
maxAttempts: 3,
|
|
16
|
+
baseDelayMs: 250,
|
|
17
|
+
maxDelayMs: 2_000,
|
|
18
|
+
},
|
|
19
|
+
realtime: {
|
|
20
|
+
sseReconnect: {
|
|
21
|
+
enabled: true,
|
|
22
|
+
baseDelayMs: 500,
|
|
23
|
+
maxDelayMs: 5_000,
|
|
24
|
+
...(options.realtime?.sseReconnect ?? {}),
|
|
25
|
+
},
|
|
26
|
+
webSocketReconnect: {
|
|
27
|
+
enabled: true,
|
|
28
|
+
baseDelayMs: 500,
|
|
29
|
+
maxDelayMs: 5_000,
|
|
30
|
+
...(options.realtime?.webSocketReconnect ?? {}),
|
|
31
|
+
},
|
|
32
|
+
...(options.realtime ?? {}),
|
|
33
|
+
},
|
|
34
|
+
WebSocketImpl: options.WebSocketImpl ?? globalThis.WebSocket,
|
|
35
|
+
});
|
|
36
|
+
const getAuthToken = () => base.auth.getToken();
|
|
37
|
+
return {
|
|
38
|
+
...base,
|
|
39
|
+
realtime: {
|
|
40
|
+
runtime() {
|
|
41
|
+
return createRemoteRuntimeEvents(createWebSocketConnector(options.baseUrl, getAuthToken, requireReactNativeWebSocket(options.WebSocketImpl), {
|
|
42
|
+
reconnect: options.realtime?.webSocketReconnect,
|
|
43
|
+
onError: options.realtime?.onError,
|
|
44
|
+
}));
|
|
45
|
+
},
|
|
46
|
+
viaWebSocket(webSocketImpl) {
|
|
47
|
+
return createRemoteRuntimeEvents(createWebSocketConnector(options.baseUrl, getAuthToken, requireReactNativeWebSocket(webSocketImpl ?? options.WebSocketImpl), {
|
|
48
|
+
reconnect: options.realtime?.webSocketReconnect,
|
|
49
|
+
onError: options.realtime?.onError,
|
|
50
|
+
}));
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
package/dist/web.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type BrowserGoodVibesSdkOptions } from './browser.js';
|
|
2
|
+
import type { GoodVibesSdk } from './client.js';
|
|
3
|
+
export interface WebGoodVibesSdkOptions extends BrowserGoodVibesSdkOptions {
|
|
4
|
+
}
|
|
5
|
+
export declare function createWebGoodVibesSdk(options?: WebGoodVibesSdkOptions): GoodVibesSdk;
|
|
6
|
+
//# sourceMappingURL=web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;CAAG;AAE7E,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,YAAY,CAExF"}
|
package/dist/web.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pellux/goodvibes-sdk",
|
|
3
|
+
"version": "0.18.3",
|
|
4
|
+
"description": "Umbrella GoodVibes SDK with operator, peer, daemon, transport, and runtime-specific integration layers.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./browser": {
|
|
14
|
+
"types": "./dist/browser.d.ts",
|
|
15
|
+
"import": "./dist/browser.js"
|
|
16
|
+
},
|
|
17
|
+
"./web": {
|
|
18
|
+
"types": "./dist/web.d.ts",
|
|
19
|
+
"import": "./dist/web.js"
|
|
20
|
+
},
|
|
21
|
+
"./node": {
|
|
22
|
+
"types": "./dist/node.d.ts",
|
|
23
|
+
"import": "./dist/node.js"
|
|
24
|
+
},
|
|
25
|
+
"./react-native": {
|
|
26
|
+
"types": "./dist/react-native.d.ts",
|
|
27
|
+
"import": "./dist/react-native.js"
|
|
28
|
+
},
|
|
29
|
+
"./expo": {
|
|
30
|
+
"types": "./dist/expo.d.ts",
|
|
31
|
+
"import": "./dist/expo.js"
|
|
32
|
+
},
|
|
33
|
+
"./package.json": "./package.json"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist"
|
|
37
|
+
],
|
|
38
|
+
"sideEffects": false,
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "git+https://github.com/mgd34msu/goodvibes-sdk.git"
|
|
43
|
+
},
|
|
44
|
+
"bugs": {
|
|
45
|
+
"url": "https://github.com/mgd34msu/goodvibes-sdk/issues"
|
|
46
|
+
},
|
|
47
|
+
"homepage": "https://github.com/mgd34msu/goodvibes-sdk",
|
|
48
|
+
"keywords": [
|
|
49
|
+
"goodvibes",
|
|
50
|
+
"sdk",
|
|
51
|
+
"browser",
|
|
52
|
+
"react-native",
|
|
53
|
+
"control-plane"
|
|
54
|
+
],
|
|
55
|
+
"publishConfig": {
|
|
56
|
+
"access": "public"
|
|
57
|
+
},
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"@pellux/goodvibes-contracts": "0.18.3",
|
|
60
|
+
"@pellux/goodvibes-daemon-sdk": "0.18.3",
|
|
61
|
+
"@pellux/goodvibes-errors": "0.18.3",
|
|
62
|
+
"@pellux/goodvibes-operator-sdk": "0.18.3",
|
|
63
|
+
"@pellux/goodvibes-peer-sdk": "0.18.3",
|
|
64
|
+
"@pellux/goodvibes-transport-core": "0.18.3",
|
|
65
|
+
"@pellux/goodvibes-transport-direct": "0.18.3",
|
|
66
|
+
"@pellux/goodvibes-transport-http": "0.18.3",
|
|
67
|
+
"@pellux/goodvibes-transport-realtime": "0.18.3"
|
|
68
|
+
}
|
|
69
|
+
}
|