@adeeliore/p2p-core 0.1.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/API_REFERENCE.md +164 -0
- package/CHANGELOG.md +13 -0
- package/LICENSE +12 -0
- package/README.md +164 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/rtc/PeerConnectionManager.d.ts +34 -0
- package/dist/rtc/PeerConnectionManager.d.ts.map +1 -0
- package/dist/rtc/PeerConnectionManager.js +231 -0
- package/dist/rtc/constants.d.ts +15 -0
- package/dist/rtc/constants.d.ts.map +1 -0
- package/dist/rtc/constants.js +65 -0
- package/dist/rtc/defaults.d.ts +13 -0
- package/dist/rtc/defaults.d.ts.map +1 -0
- package/dist/rtc/defaults.js +15 -0
- package/dist/rtc/index.d.ts +6 -0
- package/dist/rtc/index.d.ts.map +1 -0
- package/dist/rtc/index.js +21 -0
- package/dist/rtc/native.d.ts +11 -0
- package/dist/rtc/native.d.ts.map +1 -0
- package/dist/rtc/native.js +31 -0
- package/dist/rtc/options.d.ts +6 -0
- package/dist/rtc/options.d.ts.map +1 -0
- package/dist/rtc/options.js +22 -0
- package/dist/rtc/payloadParsers.d.ts +4 -0
- package/dist/rtc/payloadParsers.d.ts.map +1 -0
- package/dist/rtc/payloadParsers.js +33 -0
- package/dist/rtc/runtime.d.ts +22 -0
- package/dist/rtc/runtime.d.ts.map +1 -0
- package/dist/rtc/runtime.js +25 -0
- package/dist/rtc/types.d.ts +56 -0
- package/dist/rtc/types.d.ts.map +1 -0
- package/dist/rtc/types.js +2 -0
- package/dist/session/P2PSession.d.ts +10 -0
- package/dist/session/P2PSession.d.ts.map +1 -0
- package/dist/session/P2PSession.js +285 -0
- package/dist/session/constants.d.ts +4 -0
- package/dist/session/constants.d.ts.map +1 -0
- package/dist/session/constants.js +6 -0
- package/dist/session/index.d.ts +3 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +18 -0
- package/dist/session/runtimeSupport.d.ts +36 -0
- package/dist/session/runtimeSupport.d.ts.map +1 -0
- package/dist/session/runtimeSupport.js +144 -0
- package/dist/session/serverMessageHandlers.d.ts +21 -0
- package/dist/session/serverMessageHandlers.d.ts.map +1 -0
- package/dist/session/serverMessageHandlers.js +30 -0
- package/dist/session/types.d.ts +195 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +2 -0
- package/dist/signaling/SignalingClient.d.ts +39 -0
- package/dist/signaling/SignalingClient.d.ts.map +1 -0
- package/dist/signaling/SignalingClient.js +130 -0
- package/dist/signaling/constants.d.ts +14 -0
- package/dist/signaling/constants.d.ts.map +1 -0
- package/dist/signaling/constants.js +20 -0
- package/dist/signaling/index.d.ts +5 -0
- package/dist/signaling/index.d.ts.map +1 -0
- package/dist/signaling/index.js +20 -0
- package/dist/signaling/provider.d.ts +56 -0
- package/dist/signaling/provider.d.ts.map +1 -0
- package/dist/signaling/provider.js +87 -0
- package/dist/signaling/types.d.ts +62 -0
- package/dist/signaling/types.d.ts.map +1 -0
- package/dist/signaling/types.js +2 -0
- package/dist/sync/constants.d.ts +10 -0
- package/dist/sync/constants.d.ts.map +1 -0
- package/dist/sync/constants.js +12 -0
- package/dist/sync/engine.d.ts +13 -0
- package/dist/sync/engine.d.ts.map +1 -0
- package/dist/sync/engine.js +137 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +19 -0
- package/dist/sync/types.d.ts +61 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +2 -0
- package/package.json +46 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const SYNC_NAMESPACE = "__p2p_core_sync__";
|
|
2
|
+
export declare const SYNC_VERSION = 1;
|
|
3
|
+
export declare const SYNC_STRATEGY: {
|
|
4
|
+
readonly EVENTS: "events";
|
|
5
|
+
readonly PULL_ON_CONNECT: "pull-on-connect";
|
|
6
|
+
readonly PUSH_TO_NEW_PEER: "push-to-new-peer";
|
|
7
|
+
readonly SNAPSHOT_AND_LIVE: "snapshot-and-live";
|
|
8
|
+
};
|
|
9
|
+
export declare const DEFAULT_SYNC_STRATEGY: "events";
|
|
10
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/sync/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,sBAAsB,CAAC;AAClD,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAEX,eAAO,MAAM,qBAAqB,UAAuB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_SYNC_STRATEGY = exports.SYNC_STRATEGY = exports.SYNC_VERSION = exports.SYNC_NAMESPACE = void 0;
|
|
4
|
+
exports.SYNC_NAMESPACE = '__p2p_core_sync__';
|
|
5
|
+
exports.SYNC_VERSION = 1;
|
|
6
|
+
exports.SYNC_STRATEGY = {
|
|
7
|
+
EVENTS: 'events',
|
|
8
|
+
PULL_ON_CONNECT: 'pull-on-connect',
|
|
9
|
+
PUSH_TO_NEW_PEER: 'push-to-new-peer',
|
|
10
|
+
SNAPSHOT_AND_LIVE: 'snapshot-and-live',
|
|
11
|
+
};
|
|
12
|
+
exports.DEFAULT_SYNC_STRATEGY = exports.SYNC_STRATEGY.EVENTS;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { P2PSession } from '../session';
|
|
2
|
+
import { P2PSyncEngine } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a pluggable state synchronization engine on top of an existing
|
|
5
|
+
* `P2PSession`.
|
|
6
|
+
*
|
|
7
|
+
* The sync engine adds:
|
|
8
|
+
* - domain-level event sync
|
|
9
|
+
* - snapshot request/response flow
|
|
10
|
+
* - built-in sync strategies
|
|
11
|
+
*/
|
|
12
|
+
export declare function createP2PSyncEngine(session: P2PSession): P2PSyncEngine;
|
|
13
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/sync/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAA8D,aAAa,EAAgB,MAAM,SAAS,CAAC;AAgIlH;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,aAAa,CAEtE"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createP2PSyncEngine = createP2PSyncEngine;
|
|
4
|
+
const constants_1 = require("./constants");
|
|
5
|
+
class SessionSyncEngine {
|
|
6
|
+
constructor(session) {
|
|
7
|
+
this.domains = new Map();
|
|
8
|
+
this.unsubscribers = [];
|
|
9
|
+
this.session = session;
|
|
10
|
+
this.unsubscribers.push(session.on('peerMessage', ({ peerId, message }) => {
|
|
11
|
+
this.handlePeerMessage(peerId, message);
|
|
12
|
+
}), session.on('peerDataOpen', ({ peerId, joinKind }) => {
|
|
13
|
+
this.handlePeerDataOpen(peerId, joinKind);
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
registerDomain(registration) {
|
|
17
|
+
var _a;
|
|
18
|
+
this.domains.set(registration.domain, {
|
|
19
|
+
strategy: (_a = registration.strategy) !== null && _a !== void 0 ? _a : constants_1.DEFAULT_SYNC_STRATEGY,
|
|
20
|
+
registration: registration,
|
|
21
|
+
});
|
|
22
|
+
return () => {
|
|
23
|
+
this.domains.delete(registration.domain);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
sendEvent(domain, payload, options) {
|
|
27
|
+
var _a, _b;
|
|
28
|
+
const envelope = this.createEnvelope(domain, 'event', payload);
|
|
29
|
+
const encoded = JSON.stringify(envelope);
|
|
30
|
+
const targetPeerId = (_a = options === null || options === void 0 ? void 0 : options.targetPeerId) === null || _a === void 0 ? void 0 : _a.trim();
|
|
31
|
+
const peerIds = targetPeerId ? [targetPeerId] : (_b = options === null || options === void 0 ? void 0 : options.peerIds) !== null && _b !== void 0 ? _b : undefined;
|
|
32
|
+
return this.session.broadcast(encoded, peerIds);
|
|
33
|
+
}
|
|
34
|
+
requestSnapshot(domain, targetPeerId) {
|
|
35
|
+
const envelope = this.createEnvelope(domain, 'snapshotRequest', { scope: 'full' });
|
|
36
|
+
return this.session.sendTo(targetPeerId, JSON.stringify(envelope));
|
|
37
|
+
}
|
|
38
|
+
destroy() {
|
|
39
|
+
this.unsubscribers.splice(0).forEach((unsubscribe) => unsubscribe());
|
|
40
|
+
this.domains.clear();
|
|
41
|
+
}
|
|
42
|
+
handlePeerMessage(peerId, message) {
|
|
43
|
+
var _a, _b, _c, _d;
|
|
44
|
+
const decoded = decodeSyncEnvelope(message);
|
|
45
|
+
if (!decoded) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const registered = this.domains.get(decoded.domain);
|
|
49
|
+
if (!registered) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const context = {
|
|
53
|
+
peerId,
|
|
54
|
+
senderId: decoded.senderId,
|
|
55
|
+
session: this.session,
|
|
56
|
+
};
|
|
57
|
+
if (decoded.kind === 'event') {
|
|
58
|
+
(_b = (_a = registered.registration).applyEvent) === null || _b === void 0 ? void 0 : _b.call(_a, decoded.payload, context);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (decoded.kind === 'snapshotRequest') {
|
|
62
|
+
if (!registered.registration.getSnapshot) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const snapshot = registered.registration.getSnapshot({ session: this.session });
|
|
66
|
+
const snapshotEnvelope = this.createEnvelope(decoded.domain, 'snapshotState', snapshot);
|
|
67
|
+
this.session.sendTo(peerId, JSON.stringify(snapshotEnvelope));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (decoded.kind === 'snapshotState') {
|
|
71
|
+
(_d = (_c = registered.registration).applySnapshot) === null || _d === void 0 ? void 0 : _d.call(_c, decoded.payload, context);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
handlePeerDataOpen(peerId, joinKind) {
|
|
75
|
+
this.domains.forEach(({ registration, strategy }, domain) => {
|
|
76
|
+
if (joinKind === 'existing' && shouldPullSnapshot(strategy)) {
|
|
77
|
+
this.requestSnapshot(domain, peerId);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (joinKind === 'new' && shouldPushSnapshot(strategy) && registration.getSnapshot) {
|
|
81
|
+
const snapshot = registration.getSnapshot({ session: this.session });
|
|
82
|
+
const snapshotEnvelope = this.createEnvelope(domain, 'snapshotState', snapshot);
|
|
83
|
+
this.session.sendTo(peerId, JSON.stringify(snapshotEnvelope));
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
createEnvelope(domain, kind, payload) {
|
|
88
|
+
return {
|
|
89
|
+
namespace: constants_1.SYNC_NAMESPACE,
|
|
90
|
+
version: constants_1.SYNC_VERSION,
|
|
91
|
+
domain,
|
|
92
|
+
kind,
|
|
93
|
+
id: `${domain}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
94
|
+
ts: Date.now(),
|
|
95
|
+
senderId: this.session.getLocalPeerId(),
|
|
96
|
+
payload,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Creates a pluggable state synchronization engine on top of an existing
|
|
102
|
+
* `P2PSession`.
|
|
103
|
+
*
|
|
104
|
+
* The sync engine adds:
|
|
105
|
+
* - domain-level event sync
|
|
106
|
+
* - snapshot request/response flow
|
|
107
|
+
* - built-in sync strategies
|
|
108
|
+
*/
|
|
109
|
+
function createP2PSyncEngine(session) {
|
|
110
|
+
return new SessionSyncEngine(session);
|
|
111
|
+
}
|
|
112
|
+
function decodeSyncEnvelope(message) {
|
|
113
|
+
let parsed;
|
|
114
|
+
try {
|
|
115
|
+
parsed = JSON.parse(message);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
const candidate = parsed;
|
|
124
|
+
if (candidate.namespace !== constants_1.SYNC_NAMESPACE ||
|
|
125
|
+
candidate.version !== constants_1.SYNC_VERSION ||
|
|
126
|
+
typeof candidate.domain !== 'string' ||
|
|
127
|
+
(candidate.kind !== 'event' && candidate.kind !== 'snapshotRequest' && candidate.kind !== 'snapshotState')) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
return candidate;
|
|
131
|
+
}
|
|
132
|
+
function shouldPullSnapshot(strategy) {
|
|
133
|
+
return strategy === constants_1.SYNC_STRATEGY.PULL_ON_CONNECT || strategy === constants_1.SYNC_STRATEGY.SNAPSHOT_AND_LIVE;
|
|
134
|
+
}
|
|
135
|
+
function shouldPushSnapshot(strategy) {
|
|
136
|
+
return strategy === constants_1.SYNC_STRATEGY.PUSH_TO_NEW_PEER || strategy === constants_1.SYNC_STRATEGY.SNAPSHOT_AND_LIVE;
|
|
137
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./constants"), exports);
|
|
18
|
+
__exportStar(require("./engine"), exports);
|
|
19
|
+
__exportStar(require("./types"), exports);
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { P2PSession, PeerJoinKind } from '../session';
|
|
2
|
+
/**
|
|
3
|
+
* Built-in synchronization strategies for a registered sync domain.
|
|
4
|
+
*/
|
|
5
|
+
export type SyncStrategy = 'events' | 'pull-on-connect' | 'push-to-new-peer' | 'snapshot-and-live';
|
|
6
|
+
/**
|
|
7
|
+
* Internal sync transport envelope carried over the session DataChannel.
|
|
8
|
+
*/
|
|
9
|
+
export interface SyncEnvelope<TPayload = unknown> {
|
|
10
|
+
namespace: '__p2p_core_sync__';
|
|
11
|
+
version: 1;
|
|
12
|
+
domain: string;
|
|
13
|
+
kind: 'event' | 'snapshotRequest' | 'snapshotState';
|
|
14
|
+
id: string;
|
|
15
|
+
ts: number;
|
|
16
|
+
senderId: string | null;
|
|
17
|
+
payload: TPayload;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Context passed to sync event handlers.
|
|
21
|
+
*/
|
|
22
|
+
export interface SyncEventContext {
|
|
23
|
+
peerId: string;
|
|
24
|
+
senderId: string | null;
|
|
25
|
+
session: P2PSession;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Context passed to snapshot handlers.
|
|
29
|
+
*/
|
|
30
|
+
export interface SyncSnapshotContext extends SyncEventContext {
|
|
31
|
+
joinKind?: PeerJoinKind;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Registration contract for a state synchronization domain.
|
|
35
|
+
*/
|
|
36
|
+
export interface SyncDomainRegistration<TEvent = unknown, TSnapshot = unknown> {
|
|
37
|
+
domain: string;
|
|
38
|
+
strategy?: SyncStrategy;
|
|
39
|
+
getSnapshot?: (context: {
|
|
40
|
+
session: P2PSession;
|
|
41
|
+
}) => TSnapshot;
|
|
42
|
+
applySnapshot?: (snapshot: TSnapshot, context: SyncSnapshotContext) => void;
|
|
43
|
+
applyEvent?: (event: TEvent, context: SyncEventContext) => void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Optional routing options for outbound sync events.
|
|
47
|
+
*/
|
|
48
|
+
export interface SyncEventSendOptions {
|
|
49
|
+
targetPeerId?: string;
|
|
50
|
+
peerIds?: string[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Pluggable synchronization engine attached to a `P2PSession`.
|
|
54
|
+
*/
|
|
55
|
+
export interface P2PSyncEngine {
|
|
56
|
+
registerDomain: <TEvent = unknown, TSnapshot = unknown>(registration: SyncDomainRegistration<TEvent, TSnapshot>) => () => void;
|
|
57
|
+
sendEvent: <TEvent = unknown>(domain: string, payload: TEvent, options?: SyncEventSendOptions) => number;
|
|
58
|
+
requestSnapshot: (domain: string, targetPeerId: string) => boolean;
|
|
59
|
+
destroy: () => void;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAEnG;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,QAAQ,GAAG,OAAO;IAC5C,SAAS,EAAE,mBAAmB,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,eAAe,CAAC;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,QAAQ,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,UAAU,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD,QAAQ,CAAC,EAAE,YAAY,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,MAAM,GAAG,OAAO,EAAE,SAAS,GAAG,OAAO;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,UAAU,CAAA;KAAE,KAAK,SAAS,CAAC;IAC9D,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACnE;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,cAAc,EAAE,CAAC,MAAM,GAAG,OAAO,EAAE,SAAS,GAAG,OAAO,EAClD,YAAY,EAAE,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,KACtD,MAAM,IAAI,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,GAAG,OAAO,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,oBAAoB,KAC7B,MAAM,CAAC;IACZ,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;IACnE,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@adeeliore/p2p-core",
|
|
3
|
+
"description": "Reusable P2P session runtime for React Native apps built on WebSocket signaling and WebRTC DataChannels.",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"license": "0BSD",
|
|
6
|
+
"private": false,
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"react-native": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"sideEffects": false,
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
"API_REFERENCE.md",
|
|
15
|
+
"CHANGELOG.md",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"react-native": "./dist/index.js",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"p2p",
|
|
27
|
+
"webrtc",
|
|
28
|
+
"react-native",
|
|
29
|
+
"signaling",
|
|
30
|
+
"datachannel",
|
|
31
|
+
"collaboration"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "node ../../node_modules/typescript/lib/tsc.js -p tsconfig.build.json",
|
|
35
|
+
"typecheck": "node ../../node_modules/typescript/lib/tsc.js -p tsconfig.json --noEmit",
|
|
36
|
+
"test": "npm run build && node --test tests/**/*.test.cjs",
|
|
37
|
+
"prepublishOnly": "npm run build"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"peerDependencies": {
|
|
43
|
+
"react-native": "*",
|
|
44
|
+
"react-native-webrtc": "^124.0.7"
|
|
45
|
+
}
|
|
46
|
+
}
|