@varco/client 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.
Files changed (42) hide show
  1. package/README.md +52 -0
  2. package/dist/client.d.ts +2 -0
  3. package/dist/client.js +302 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/consumer-client.d.ts +2 -0
  6. package/dist/consumer-client.js +19 -0
  7. package/dist/consumer-client.js.map +1 -0
  8. package/dist/domain-helpers.d.ts +12 -0
  9. package/dist/domain-helpers.js +83 -0
  10. package/dist/domain-helpers.js.map +1 -0
  11. package/dist/encoding.d.ts +4 -0
  12. package/dist/encoding.js +32 -0
  13. package/dist/encoding.js.map +1 -0
  14. package/dist/hass-like.d.ts +7 -0
  15. package/dist/hass-like.js +13 -0
  16. package/dist/hass-like.js.map +1 -0
  17. package/dist/identity.d.ts +11 -0
  18. package/dist/identity.js +96 -0
  19. package/dist/identity.js.map +1 -0
  20. package/dist/index.d.ts +9 -0
  21. package/dist/index.js +8 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/local-client.d.ts +2 -0
  24. package/dist/local-client.js +90 -0
  25. package/dist/local-client.js.map +1 -0
  26. package/dist/manifest-helpers.d.ts +94 -0
  27. package/dist/manifest-helpers.js +105 -0
  28. package/dist/manifest-helpers.js.map +1 -0
  29. package/dist/memory-storage.d.ts +7 -0
  30. package/dist/memory-storage.js +7 -0
  31. package/dist/memory-storage.js.map +1 -0
  32. package/dist/transport-noble.d.ts +34 -0
  33. package/dist/transport-noble.js +257 -0
  34. package/dist/transport-noble.js.map +1 -0
  35. package/dist/transport.d.ts +29 -0
  36. package/dist/transport.js +195 -0
  37. package/dist/transport.js.map +1 -0
  38. package/dist/types.d.ts +185 -0
  39. package/dist/types.js +2 -0
  40. package/dist/types.js.map +1 -0
  41. package/dist/varco-client.js +5139 -0
  42. package/package.json +54 -0
@@ -0,0 +1,96 @@
1
+ import { ed25519 } from "@noble/curves/ed25519";
2
+ import { sha256 } from "@noble/hashes/sha2";
3
+ import { b64urlDecode, b64urlEncode, canonicalJson, utf8 } from "./encoding.js";
4
+ import { MemoryStorage } from "./memory-storage.js";
5
+ const STORAGE_KEY = "varco.consumerIdentity.v1";
6
+ const DB_NAME = "varco-client";
7
+ const DB_STORE = "keys";
8
+ const DB_KEY = "consumerIdentity.v1";
9
+ function nobleIdentity(keys) {
10
+ return {
11
+ publicKey: keys.publicKey,
12
+ sign: async (message) => b64urlEncode(ed25519.sign(message, b64urlDecode(keys.privateKey))),
13
+ };
14
+ }
15
+ function createNobleIdentity(storage) {
16
+ const privateBytes = ed25519.utils.randomSecretKey();
17
+ const keys = { privateKey: b64urlEncode(privateBytes), publicKey: b64urlEncode(ed25519.getPublicKey(privateBytes)) };
18
+ storage.setItem(STORAGE_KEY, JSON.stringify(keys));
19
+ return nobleIdentity(keys);
20
+ }
21
+ function idbRequest(request) {
22
+ return new Promise((resolve, reject) => {
23
+ request.onsuccess = () => resolve(request.result);
24
+ request.onerror = () => reject(request.error);
25
+ });
26
+ }
27
+ function openKeyDb() {
28
+ const request = indexedDB.open(DB_NAME, 1);
29
+ request.onupgradeneeded = () => request.result.createObjectStore(DB_STORE);
30
+ return idbRequest(request);
31
+ }
32
+ async function loadOrCreateWebCryptoIdentity() {
33
+ if (!globalThis.indexedDB || !globalThis.crypto?.subtle)
34
+ return null;
35
+ try {
36
+ const db = await openKeyDb();
37
+ let pair = await idbRequest(db.transaction(DB_STORE, "readonly").objectStore(DB_STORE).get(DB_KEY));
38
+ if (!pair) {
39
+ pair = (await crypto.subtle.generateKey({ name: "Ed25519" }, false, ["sign", "verify"]));
40
+ await idbRequest(db.transaction(DB_STORE, "readwrite").objectStore(DB_STORE).put(pair, DB_KEY));
41
+ }
42
+ const publicBytes = new Uint8Array(await crypto.subtle.exportKey("raw", pair.publicKey));
43
+ db.close();
44
+ const privateKey = pair.privateKey;
45
+ return {
46
+ publicKey: b64urlEncode(publicBytes),
47
+ sign: async (message) => b64urlEncode(new Uint8Array(await crypto.subtle.sign("Ed25519", privateKey, message))),
48
+ };
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ export function loadIdentitySync(storage) {
55
+ const legacyStorage = storage ?? globalThis.localStorage;
56
+ const existing = legacyStorage?.getItem(STORAGE_KEY);
57
+ if (existing)
58
+ return nobleIdentity(JSON.parse(existing));
59
+ if (storage)
60
+ return createNobleIdentity(storage);
61
+ return null;
62
+ }
63
+ export async function loadOrCreateIdentity(storage) {
64
+ const sync = loadIdentitySync(storage);
65
+ if (sync)
66
+ return sync;
67
+ const hardened = await loadOrCreateWebCryptoIdentity();
68
+ if (hardened)
69
+ return hardened;
70
+ return createNobleIdentity(globalThis.localStorage ?? new MemoryStorage());
71
+ }
72
+ export function accessRequestBytes(nonce, manifest) {
73
+ const digest = sha256(utf8(canonicalJson(manifest)));
74
+ const prefix = utf8("varco-access-request-v1\0" + nonce + "\0");
75
+ const out = new Uint8Array(prefix.length + digest.length);
76
+ out.set(prefix);
77
+ out.set(digest, prefix.length);
78
+ return out;
79
+ }
80
+ export function signAccessRequest(identity, nonce, manifest) {
81
+ return identity.sign(accessRequestBytes(nonce, manifest));
82
+ }
83
+ export function signAuthenticate(identity, nonce, channelBinding) {
84
+ const prefix = utf8("varco-authenticate-v1\0" + nonce + "\0");
85
+ const binding = b64urlDecode(channelBinding);
86
+ const out = new Uint8Array(prefix.length + binding.length);
87
+ out.set(prefix);
88
+ out.set(binding, prefix.length);
89
+ return identity.sign(out);
90
+ }
91
+ export function randomId(bytes = 16) {
92
+ const data = new Uint8Array(bytes);
93
+ crypto.getRandomValues(data);
94
+ return b64urlEncode(data);
95
+ }
96
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export { createVarcoClient } from "./client.js";
2
+ export { createVarcoConsumerClient } from "./consumer-client.js";
3
+ export { createHassLikeClient } from "./hass-like.js";
4
+ export { MemoryStorage } from "./memory-storage.js";
5
+ export { closeError, envelopeLane } from "./transport.js";
6
+ export { NobleRelayTransport } from "./transport-noble.js";
7
+ export { buttonControl, cameraEntity, climateControl, coverControl, createManifest, fanControl, lightControl, lockControl, mediaPlayerControl, numberControl, readEntity, sceneControl, selectControl, switchControl } from "./manifest-helpers.js";
8
+ export type { ManifestBuilderOptions, ManifestPart } from "./manifest-helpers.js";
9
+ export type { AccessResult, HassFrontend, HassState, LocalHomeAssistantOptions, RelayConsumerOptions, StorageLike, VarcoClient, VarcoClientOptions, VarcoConsumerClient, VarcoConsumerClientOptions, VarcoConsumerTransportStatus, VarcoDomainHelpers, VarcoManifest, VarcoTransport, VarcoTransportStatus } from "./types.js";
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { createVarcoClient } from "./client.js";
2
+ export { createVarcoConsumerClient } from "./consumer-client.js";
3
+ export { createHassLikeClient } from "./hass-like.js";
4
+ export { MemoryStorage } from "./memory-storage.js";
5
+ export { closeError, envelopeLane } from "./transport.js";
6
+ export { NobleRelayTransport } from "./transport-noble.js";
7
+ export { buttonControl, cameraEntity, climateControl, coverControl, createManifest, fanControl, lightControl, lockControl, mediaPlayerControl, numberControl, readEntity, sceneControl, selectControl, switchControl } from "./manifest-helpers.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { HassFrontend, VarcoConsumerClient } from "./types.js";
2
+ export declare function createLocalHomeAssistantClient(hass: HassFrontend): VarcoConsumerClient;
@@ -0,0 +1,90 @@
1
+ import { attachDomainHelpers } from "./domain-helpers.js";
2
+ export function createLocalHomeAssistantClient(hass) {
3
+ let currentHass = hass;
4
+ let nextSubscriptionId = 1;
5
+ const subscriptions = new Map();
6
+ const client = {
7
+ consumerPublicKey: "local",
8
+ transportStatus: { mode: "home-assistant", detail: "using Home Assistant frontend session" },
9
+ async requestAccess() {
10
+ return { request_id: "local", pairing_code: "", status: "approved", mode: "home-assistant" };
11
+ },
12
+ async connect() { },
13
+ async getStates(entityIds) {
14
+ const states = {};
15
+ for (const entityId of entityIds)
16
+ states[entityId] = currentHass.states[entityId] ?? null;
17
+ return states;
18
+ },
19
+ async subscribeEntities(entityIds, cb) {
20
+ const subscriptionId = `local-${nextSubscriptionId++}`;
21
+ const states = snapshotStates(currentHass, entityIds);
22
+ subscriptions.set(subscriptionId, { entityIds: [...entityIds], cb, states });
23
+ cb({ type: "state_snapshot", subscription_id: subscriptionId, states });
24
+ return subscriptionId;
25
+ },
26
+ async unsubscribe(subscriptionId) {
27
+ subscriptions.delete(subscriptionId);
28
+ },
29
+ async queryHistory(entityIds, range = {}) {
30
+ const callWs = currentHass.callWS
31
+ ? (message) => currentHass.callWS(message)
32
+ : currentHass.connection?.sendMessagePromise
33
+ ? (message) => currentHass.connection.sendMessagePromise(message)
34
+ : undefined;
35
+ if (!callWs)
36
+ throw Object.assign(new Error("Local Home Assistant history websocket API is unavailable"), { code: "local-history-unavailable" });
37
+ try {
38
+ return await callWs({
39
+ type: "history/history_during_period",
40
+ entity_ids: entityIds,
41
+ ...range,
42
+ minimal_response: range.minimal_response ?? true,
43
+ });
44
+ }
45
+ catch (err) {
46
+ const message = err instanceof Error ? err.message : String(err);
47
+ throw Object.assign(new Error(`Local Home Assistant history is unavailable: ${message}`), { code: "local-history-unavailable", cause: err });
48
+ }
49
+ },
50
+ async cameraSnapshot() {
51
+ throw Object.assign(new Error("Local camera snapshots are unavailable"), { code: "local-camera-snapshot-unavailable" });
52
+ },
53
+ async callService(domain, service, data = {}) {
54
+ if (!currentHass.callService)
55
+ throw Object.assign(new Error("Local Home Assistant service API is unavailable"), { code: "local-service-unavailable" });
56
+ const { entity_id, pin: _pin, pins: _pins, ...serviceData } = data;
57
+ await currentHass.callService(domain, service, serviceData, entity_id ? { entity_id } : {});
58
+ },
59
+ async close() { },
60
+ updateHass(nextHass) {
61
+ currentHass = nextHass;
62
+ for (const [subscriptionId, subscription] of subscriptions) {
63
+ const nextStates = snapshotStates(currentHass, subscription.entityIds);
64
+ const delta = {};
65
+ for (const entityId of subscription.entityIds) {
66
+ if (!sameState(subscription.states[entityId], nextStates[entityId]))
67
+ delta[entityId] = nextStates[entityId];
68
+ }
69
+ subscription.states = nextStates;
70
+ if (Object.keys(delta).length)
71
+ subscription.cb({ type: "state_delta", subscription_id: subscriptionId, states: delta });
72
+ }
73
+ },
74
+ };
75
+ return attachDomainHelpers(client);
76
+ }
77
+ function snapshotStates(hass, entityIds) {
78
+ const states = {};
79
+ for (const entityId of entityIds)
80
+ states[entityId] = hass.states[entityId] ?? null;
81
+ return states;
82
+ }
83
+ function sameState(left, right) {
84
+ if (left === right)
85
+ return true;
86
+ if (left === null || right === null)
87
+ return false;
88
+ return JSON.stringify(left) === JSON.stringify(right);
89
+ }
90
+ //# sourceMappingURL=local-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-client.js","sourceRoot":"","sources":["../src/local-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import type { VarcoManifest } from "./types.js";
2
+ export type ManifestPart = {
3
+ read_entities?: string[];
4
+ subscriptions?: string[];
5
+ history?: string[];
6
+ camera_snapshots?: string[];
7
+ actions?: string[];
8
+ };
9
+ export type ManifestBuilderOptions = {
10
+ name: string;
11
+ icon?: string;
12
+ version?: string;
13
+ entities?: ManifestPart[];
14
+ };
15
+ export declare function createManifest(options: ManifestBuilderOptions): VarcoManifest;
16
+ export declare function readEntity(entityId: string, options?: {
17
+ subscribe?: boolean;
18
+ history?: boolean;
19
+ }): ManifestPart;
20
+ export declare function cameraEntity(entityId: string, options?: {
21
+ snapshot?: boolean;
22
+ subscribe?: boolean;
23
+ history?: boolean;
24
+ }): ManifestPart;
25
+ export declare function lightControl(entityId: string, options?: {
26
+ onOff?: boolean;
27
+ brightness?: boolean;
28
+ color?: boolean;
29
+ toggle?: boolean;
30
+ subscribe?: boolean;
31
+ history?: boolean;
32
+ }): ManifestPart;
33
+ export declare function switchControl(entityId: string, options?: {
34
+ toggle?: boolean;
35
+ subscribe?: boolean;
36
+ history?: boolean;
37
+ }): ManifestPart;
38
+ export declare function climateControl(entityId: string, options?: {
39
+ temperature?: boolean;
40
+ hvacMode?: boolean;
41
+ presetMode?: boolean;
42
+ fanMode?: boolean;
43
+ swingMode?: boolean;
44
+ humidity?: boolean;
45
+ onOff?: boolean;
46
+ subscribe?: boolean;
47
+ history?: boolean;
48
+ }): ManifestPart;
49
+ export declare function coverControl(entityId: string, options?: {
50
+ position?: boolean;
51
+ tilt?: boolean;
52
+ subscribe?: boolean;
53
+ history?: boolean;
54
+ }): ManifestPart;
55
+ export declare function fanControl(entityId: string, options?: {
56
+ percentage?: boolean;
57
+ presetMode?: boolean;
58
+ direction?: boolean;
59
+ oscillate?: boolean;
60
+ toggle?: boolean;
61
+ subscribe?: boolean;
62
+ history?: boolean;
63
+ }): ManifestPart;
64
+ export declare function lockControl(entityId: string, options?: {
65
+ unlock?: boolean;
66
+ open?: boolean;
67
+ subscribe?: boolean;
68
+ history?: boolean;
69
+ }): ManifestPart;
70
+ export declare function mediaPlayerControl(entityId: string, options?: {
71
+ power?: boolean;
72
+ volume?: boolean;
73
+ playback?: boolean;
74
+ source?: boolean;
75
+ playMedia?: boolean;
76
+ subscribe?: boolean;
77
+ history?: boolean;
78
+ }): ManifestPart;
79
+ export declare function buttonControl(entityId: string, options?: {
80
+ subscribe?: boolean;
81
+ history?: boolean;
82
+ }): ManifestPart;
83
+ export declare function sceneControl(entityId: string, options?: {
84
+ subscribe?: boolean;
85
+ history?: boolean;
86
+ }): ManifestPart;
87
+ export declare function numberControl(entityId: string, options?: {
88
+ subscribe?: boolean;
89
+ history?: boolean;
90
+ }): ManifestPart;
91
+ export declare function selectControl(entityId: string, options?: {
92
+ subscribe?: boolean;
93
+ history?: boolean;
94
+ }): ManifestPart;
@@ -0,0 +1,105 @@
1
+ export function createManifest(options) {
2
+ const manifest = {
3
+ name: options.name,
4
+ ...(options.icon ? { icon: options.icon } : {}),
5
+ version: options.version ?? "0.1.0",
6
+ read_entities: [],
7
+ subscriptions: [],
8
+ history: [],
9
+ camera_snapshots: [],
10
+ actions: [],
11
+ };
12
+ for (const part of options.entities ?? []) {
13
+ appendUnique(manifest.read_entities, part.read_entities ?? []);
14
+ appendUnique(manifest.subscriptions, part.subscriptions ?? []);
15
+ appendUnique(manifest.history, part.history ?? []);
16
+ appendUnique(manifest.camera_snapshots, part.camera_snapshots ?? []);
17
+ appendUnique(manifest.actions, part.actions ?? []);
18
+ }
19
+ return manifest;
20
+ }
21
+ export function readEntity(entityId, options = {}) {
22
+ return entityPart(entityId, [], { subscribe: options.subscribe ?? false, history: options.history });
23
+ }
24
+ export function cameraEntity(entityId, options = {}) {
25
+ return entityPart(entityId, [], { subscribe: options.subscribe ?? false, history: options.history, cameraSnapshot: options.snapshot ?? true });
26
+ }
27
+ export function lightControl(entityId, options = {}) {
28
+ const actions = ["turn_on", "turn_off"];
29
+ if (options.toggle)
30
+ actions.push("toggle");
31
+ return servicePart("light", entityId, actions, options);
32
+ }
33
+ export function switchControl(entityId, options = {}) {
34
+ return servicePart("switch", entityId, ["turn_on", "turn_off", ...(options.toggle ? ["toggle"] : [])], options);
35
+ }
36
+ export function climateControl(entityId, options = {}) {
37
+ return servicePart("climate", entityId, [
38
+ ...(options.temperature ? ["set_temperature"] : []),
39
+ ...(options.hvacMode ? ["set_hvac_mode"] : []),
40
+ ...(options.presetMode ? ["set_preset_mode"] : []),
41
+ ...(options.fanMode ? ["set_fan_mode"] : []),
42
+ ...(options.swingMode ? ["set_swing_mode"] : []),
43
+ ...(options.humidity ? ["set_humidity"] : []),
44
+ ...(options.onOff ? ["turn_on", "turn_off"] : []),
45
+ ], options);
46
+ }
47
+ export function coverControl(entityId, options = {}) {
48
+ return servicePart("cover", entityId, [
49
+ "open_cover", "close_cover", "stop_cover",
50
+ ...(options.position ? ["set_cover_position"] : []),
51
+ ...(options.tilt ? ["open_cover_tilt", "close_cover_tilt", "stop_cover_tilt", "set_cover_tilt_position"] : []),
52
+ ], options);
53
+ }
54
+ export function fanControl(entityId, options = {}) {
55
+ return servicePart("fan", entityId, [
56
+ "turn_on", "turn_off",
57
+ ...(options.toggle ? ["toggle"] : []),
58
+ ...(options.percentage ? ["set_percentage"] : []),
59
+ ...(options.presetMode ? ["set_preset_mode"] : []),
60
+ ...(options.direction ? ["set_direction"] : []),
61
+ ...(options.oscillate ? ["oscillate"] : []),
62
+ ], options);
63
+ }
64
+ export function lockControl(entityId, options = {}) {
65
+ return servicePart("lock", entityId, ["lock", ...(options.unlock ? ["unlock"] : []), ...(options.open ? ["open"] : [])], options);
66
+ }
67
+ export function mediaPlayerControl(entityId, options = {}) {
68
+ return servicePart("media_player", entityId, [
69
+ ...(options.power ? ["turn_on", "turn_off"] : []),
70
+ ...(options.volume ? ["volume_up", "volume_down", "volume_set", "volume_mute"] : []),
71
+ ...(options.playback ? ["media_play", "media_pause", "media_stop", "media_play_pause", "media_next_track", "media_previous_track", "media_seek"] : []),
72
+ ...(options.source ? ["select_source"] : []),
73
+ ...(options.playMedia ? ["play_media"] : []),
74
+ ], options);
75
+ }
76
+ export function buttonControl(entityId, options = {}) {
77
+ return servicePart("button", entityId, ["press"], options);
78
+ }
79
+ export function sceneControl(entityId, options = {}) {
80
+ return servicePart("scene", entityId, ["turn_on"], options);
81
+ }
82
+ export function numberControl(entityId, options = {}) {
83
+ return servicePart("number", entityId, ["set_value"], options);
84
+ }
85
+ export function selectControl(entityId, options = {}) {
86
+ return servicePart("select", entityId, ["select_option"], options);
87
+ }
88
+ function servicePart(domain, entityId, services, options = {}) {
89
+ return entityPart(entityId, services.map((service) => `${domain}.${service}@${entityId}`), { subscribe: options.subscribe ?? true, history: options.history });
90
+ }
91
+ function entityPart(entityId, actions, options = {}) {
92
+ return {
93
+ read_entities: [entityId],
94
+ subscriptions: options.subscribe ? [entityId] : [],
95
+ history: options.history ? [entityId] : [],
96
+ camera_snapshots: options.cameraSnapshot ? [entityId] : [],
97
+ actions,
98
+ };
99
+ }
100
+ function appendUnique(target, values) {
101
+ for (const value of values)
102
+ if (!target.includes(value))
103
+ target.push(value);
104
+ }
105
+ //# sourceMappingURL=manifest-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-helpers.js","sourceRoot":"","sources":["../src/manifest-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { StorageLike } from "./types.js";
2
+ export declare class MemoryStorage implements StorageLike {
3
+ private values;
4
+ getItem(key: string): string | null;
5
+ setItem(key: string, value: string): void;
6
+ removeItem(key: string): void;
7
+ }
@@ -0,0 +1,7 @@
1
+ export class MemoryStorage {
2
+ values = new Map();
3
+ getItem(key) { return this.values.get(key) ?? null; }
4
+ setItem(key, value) { this.values.set(key, value); }
5
+ removeItem(key) { this.values.delete(key); }
6
+ }
7
+ //# sourceMappingURL=memory-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-storage.js","sourceRoot":"","sources":["../src/memory-storage.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IAChB,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,OAAO,CAAC,GAAW,IAAmB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAW,EAAE,KAAa,IAAU,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1E,UAAU,CAAC,GAAW,IAAU,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC3D"}
@@ -0,0 +1,34 @@
1
+ import type { VarcoTransport } from "./types.js";
2
+ export type RandomBytes = (n: number) => Uint8Array;
3
+ export type NobleRelayTransportOptions = {
4
+ requestTimeoutMs?: number;
5
+ randomBytes?: RandomBytes;
6
+ };
7
+ export declare class NobleRelayTransport implements VarcoTransport {
8
+ private bridgeUrl;
9
+ private authorityId;
10
+ private ws;
11
+ private keys;
12
+ private sendNonce;
13
+ private recvNonce;
14
+ private pending;
15
+ private eventHandler;
16
+ private closeHandler;
17
+ private ready;
18
+ private closed;
19
+ private requestTimeoutMs;
20
+ private randomBytes;
21
+ constructor(bridgeUrl: string, authorityId: string, options?: NobleRelayTransportOptions);
22
+ onEvent(handler: (event: any) => void): void;
23
+ onClose(handler: () => void): void;
24
+ channelBinding(): Promise<string>;
25
+ request(message: Record<string, unknown>): Promise<any>;
26
+ close(): Promise<void>;
27
+ private failPending;
28
+ private ensureConnected;
29
+ private generatePrivateKey;
30
+ private connect;
31
+ private encrypt;
32
+ private decrypt;
33
+ private handleMessage;
34
+ }