@canton-network/core-splice-provider 0.17.0 → 0.18.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.
@@ -1 +1 @@
1
- {"version":3,"file":"SpliceProviderHttp.d.ts","sourceRoot":"","sources":["../src/SpliceProviderHttp.ts"],"names":[],"mappings":"AAGA,OAAO,EAGH,cAAc,EAEjB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAcrD,qBAAa,kBAAmB,SAAQ,kBAAkB;IAmClD,OAAO,CAAC,GAAG;IAlCf,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO,CAAC,UAAU;gBA+BN,GAAG,EAAE,GAAG,EAChB,YAAY,CAAC,EAAE,MAAM;IAuCZ,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;CAe1E"}
1
+ {"version":3,"file":"SpliceProviderHttp.d.ts","sourceRoot":"","sources":["../src/SpliceProviderHttp.ts"],"names":[],"mappings":"AAGA,OAAO,EAGH,cAAc,EAEjB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAarD,qBAAa,kBAAmB,SAAQ,kBAAkB;IAmClD,OAAO,CAAC,GAAG;IAlCf,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO,CAAC,UAAU;gBA+BN,GAAG,EAAE,GAAG,EAChB,YAAY,CAAC,EAAE,MAAM;IAuCZ,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;CAO1E"}
package/dist/index.cjs CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  var coreTypes = require('@canton-network/core-types');
4
4
  var socket_ioClient = require('socket.io-client');
5
- var coreWalletUiComponents = require('@canton-network/core-wallet-ui-components');
6
5
 
7
6
  var __defProp = Object.defineProperty;
8
7
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -91,15 +90,7 @@ var SpliceProviderHttp = class extends SpliceProviderBase {
91
90
  async request({ method, params }) {
92
91
  const response = await this.transport.submit({ method, params });
93
92
  if ("error" in response) throw new Error(response.error.message);
94
- const result = response.result;
95
- if (method === "prepareExecute") {
96
- const { userUrl } = result;
97
- if (!userUrl) {
98
- throw new Error("No userUrl provided in response");
99
- }
100
- coreWalletUiComponents.popupHref(userUrl);
101
- }
102
- return result;
93
+ return response.result;
103
94
  }
104
95
  };
105
96
  var SpliceProviderWindow = class extends SpliceProviderBase {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SpliceProvider.ts","../src/SpliceProviderHttp.ts","../src/SpliceProviderWindow.ts","../src/index.ts"],"names":["HttpTransport","isSpliceMessageEvent","WalletEvent","io","popupHref","WindowTransport","ProviderType"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestPayload } from '@canton-network/core-types'\n\nexport type EventListener<T> = (...args: T[]) => void\n\nexport interface SpliceProvider {\n request<T>(args: RequestPayload): Promise<T>\n on<T>(event: string, listener: EventListener<T>): SpliceProvider\n emit<T>(event: string, ...args: T[]): boolean\n removeListener<T>(\n event: string,\n listenerToRemove: EventListener<T>\n ): SpliceProvider\n}\n\nexport abstract class SpliceProviderBase implements SpliceProvider {\n listeners: { [event: string]: EventListener<unknown>[] }\n\n constructor() {\n this.listeners = {} // Event listeners\n }\n\n abstract request<T>(args: RequestPayload): Promise<T>\n\n // Event handling\n public on<T>(event: string, listener: EventListener<T>): SpliceProvider {\n if (!this.listeners[event]) {\n this.listeners[event] = []\n }\n const listeners = this.listeners[event] as EventListener<T>[]\n listeners.push(listener)\n\n return this\n }\n\n public emit<T>(event: string, ...args: T[]): boolean {\n if (this.listeners[event]) {\n this.listeners[event].forEach((listener) => listener(...args))\n return true\n }\n return false\n }\n\n public removeListener<T>(\n event: string,\n listenerToRemove: EventListener<T>\n ): SpliceProvider {\n if (!this.listeners[event]) return this\n\n this.listeners[event] = this.listeners[event].filter(\n (listener) => listener !== listenerToRemove\n )\n\n return this\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n HttpTransport,\n isSpliceMessageEvent,\n RequestPayload,\n WalletEvent,\n} from '@canton-network/core-types'\nimport { SpliceProviderBase } from './SpliceProvider'\nimport { io, Socket } from 'socket.io-client'\nimport { popupHref } from '@canton-network/core-wallet-ui-components'\n\n// Maintain a global socket instance in-memory to avoid multiple connections\n// per SpliceProviderHttp instance.\ntype GatewaySocket = {\n socket: Socket\n url: string\n token: string\n} | null\n\nlet connection: GatewaySocket = null\n\nexport class SpliceProviderHttp extends SpliceProviderBase {\n private sessionToken?: string\n private transport: HttpTransport\n\n private openSocket(url: URL, token: string): void {\n // Assumes the socket URI is accessed directly on the host w/o the API path.\n const socketUri = url.origin\n\n // Reconnect if the URL or token has changed\n if (\n connection &&\n (token !== connection.token || socketUri !== connection.url)\n ) {\n connection.socket.disconnect()\n connection = null\n }\n\n if (!connection) {\n connection = {\n token,\n url: socketUri,\n socket: io(socketUri, {\n auth: {\n token: `Bearer ${token}`,\n },\n }),\n }\n\n connection.socket.onAny((event, ...args) => {\n this.emit(event, ...args)\n })\n }\n }\n\n constructor(\n private url: URL,\n sessionToken?: string\n ) {\n super()\n\n if (sessionToken) {\n this.sessionToken = sessionToken\n this.openSocket(url, sessionToken)\n }\n\n this.transport = new HttpTransport(url, sessionToken)\n\n // Listen for the auth success event sent from the WK UI popup to the SDK running in the parent window.\n window.addEventListener('message', async (event) => {\n if (!isSpliceMessageEvent(event)) return\n\n if (\n event.data.type === WalletEvent.SPLICE_WALLET_IDP_AUTH_SUCCESS\n ) {\n this.sessionToken = event.data.token\n this.transport = new HttpTransport(url, this.sessionToken)\n this.openSocket(this.url, event.data.token)\n\n // We requery the status explicitly here, as it's not guaranteed that the socket will be open & authenticated\n // before the `onConnected` event is fired from the `addSession` RPC call. The dappApi.StatusResult and\n // dappApi.OnConnectedEvent are mapped manually to avoid dependency.\n this.request({ method: 'status' })\n .then((status) => {\n this.emit('onConnected', status)\n })\n .catch((err) => {\n console.error(\n 'Error requesting status after auth:',\n err\n )\n })\n }\n })\n }\n\n public async request<T>({ method, params }: RequestPayload): Promise<T> {\n const response = await this.transport.submit({ method, params })\n\n if ('error' in response) throw new Error(response.error.message)\n\n const result = response.result as T\n if (method === 'prepareExecute') {\n const { userUrl } = result as { userUrl?: string }\n if (!userUrl) {\n throw new Error('No userUrl provided in response')\n }\n popupHref(userUrl)\n }\n return result\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestPayload, WindowTransport } from '@canton-network/core-types'\nimport { SpliceProviderBase } from './SpliceProvider.js'\n\nexport class SpliceProviderWindow extends SpliceProviderBase {\n private transport: WindowTransport\n\n constructor() {\n super()\n this.transport = new WindowTransport(window)\n }\n\n public async request<T>({ method, params }: RequestPayload): Promise<T> {\n const response = await this.transport.submit({ method, params })\n return response.result as T\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SpliceProvider } from './SpliceProvider'\n\ndeclare global {\n interface Window {\n canton?: SpliceProvider | undefined\n }\n}\n\nexport enum ProviderType {\n WINDOW,\n HTTP,\n}\n\nexport function injectSpliceProvider(provider: SpliceProvider): SpliceProvider {\n // Check if the provider is already injected\n if (window.canton !== undefined) return window.canton\n\n // Inject the SpliceProvider instance\n window.canton = provider\n\n console.log('Splice provider injected successfully.')\n return window.canton\n}\n\nexport * from './SpliceProvider'\nexport * from './SpliceProviderHttp'\nexport * from './SpliceProviderWindow'\n"]}
1
+ {"version":3,"sources":["../src/SpliceProvider.ts","../src/SpliceProviderHttp.ts","../src/SpliceProviderWindow.ts","../src/index.ts"],"names":["HttpTransport","isSpliceMessageEvent","WalletEvent","io","WindowTransport","ProviderType"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestPayload } from '@canton-network/core-types'\n\nexport type EventListener<T> = (...args: T[]) => void\n\nexport interface SpliceProvider {\n request<T>(args: RequestPayload): Promise<T>\n on<T>(event: string, listener: EventListener<T>): SpliceProvider\n emit<T>(event: string, ...args: T[]): boolean\n removeListener<T>(\n event: string,\n listenerToRemove: EventListener<T>\n ): SpliceProvider\n}\n\nexport abstract class SpliceProviderBase implements SpliceProvider {\n listeners: { [event: string]: EventListener<unknown>[] }\n\n constructor() {\n this.listeners = {} // Event listeners\n }\n\n abstract request<T>(args: RequestPayload): Promise<T>\n\n // Event handling\n public on<T>(event: string, listener: EventListener<T>): SpliceProvider {\n if (!this.listeners[event]) {\n this.listeners[event] = []\n }\n const listeners = this.listeners[event] as EventListener<T>[]\n listeners.push(listener)\n\n return this\n }\n\n public emit<T>(event: string, ...args: T[]): boolean {\n if (this.listeners[event]) {\n this.listeners[event].forEach((listener) => listener(...args))\n return true\n }\n return false\n }\n\n public removeListener<T>(\n event: string,\n listenerToRemove: EventListener<T>\n ): SpliceProvider {\n if (!this.listeners[event]) return this\n\n this.listeners[event] = this.listeners[event].filter(\n (listener) => listener !== listenerToRemove\n )\n\n return this\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n HttpTransport,\n isSpliceMessageEvent,\n RequestPayload,\n WalletEvent,\n} from '@canton-network/core-types'\nimport { SpliceProviderBase } from './SpliceProvider'\nimport { io, Socket } from 'socket.io-client'\n\n// Maintain a global socket instance in-memory to avoid multiple connections\n// per SpliceProviderHttp instance.\ntype GatewaySocket = {\n socket: Socket\n url: string\n token: string\n} | null\n\nlet connection: GatewaySocket = null\n\nexport class SpliceProviderHttp extends SpliceProviderBase {\n private sessionToken?: string\n private transport: HttpTransport\n\n private openSocket(url: URL, token: string): void {\n // Assumes the socket URI is accessed directly on the host w/o the API path.\n const socketUri = url.origin\n\n // Reconnect if the URL or token has changed\n if (\n connection &&\n (token !== connection.token || socketUri !== connection.url)\n ) {\n connection.socket.disconnect()\n connection = null\n }\n\n if (!connection) {\n connection = {\n token,\n url: socketUri,\n socket: io(socketUri, {\n auth: {\n token: `Bearer ${token}`,\n },\n }),\n }\n\n connection.socket.onAny((event, ...args) => {\n this.emit(event, ...args)\n })\n }\n }\n\n constructor(\n private url: URL,\n sessionToken?: string\n ) {\n super()\n\n if (sessionToken) {\n this.sessionToken = sessionToken\n this.openSocket(url, sessionToken)\n }\n\n this.transport = new HttpTransport(url, sessionToken)\n\n // Listen for the auth success event sent from the WK UI popup to the SDK running in the parent window.\n window.addEventListener('message', async (event) => {\n if (!isSpliceMessageEvent(event)) return\n\n if (\n event.data.type === WalletEvent.SPLICE_WALLET_IDP_AUTH_SUCCESS\n ) {\n this.sessionToken = event.data.token\n this.transport = new HttpTransport(url, this.sessionToken)\n this.openSocket(this.url, event.data.token)\n\n // We requery the status explicitly here, as it's not guaranteed that the socket will be open & authenticated\n // before the `onConnected` event is fired from the `addSession` RPC call. The dappApi.StatusResult and\n // dappApi.OnConnectedEvent are mapped manually to avoid dependency.\n this.request({ method: 'status' })\n .then((status) => {\n this.emit('onConnected', status)\n })\n .catch((err) => {\n console.error(\n 'Error requesting status after auth:',\n err\n )\n })\n }\n })\n }\n\n public async request<T>({ method, params }: RequestPayload): Promise<T> {\n const response = await this.transport.submit({ method, params })\n\n if ('error' in response) throw new Error(response.error.message)\n\n return response.result as T\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestPayload, WindowTransport } from '@canton-network/core-types'\nimport { SpliceProviderBase } from './SpliceProvider.js'\n\nexport class SpliceProviderWindow extends SpliceProviderBase {\n private transport: WindowTransport\n\n constructor() {\n super()\n this.transport = new WindowTransport(window)\n }\n\n public async request<T>({ method, params }: RequestPayload): Promise<T> {\n const response = await this.transport.submit({ method, params })\n return response.result as T\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SpliceProvider } from './SpliceProvider'\n\ndeclare global {\n interface Window {\n canton?: SpliceProvider | undefined\n }\n}\n\nexport enum ProviderType {\n WINDOW,\n HTTP,\n}\n\nexport function injectSpliceProvider(provider: SpliceProvider): SpliceProvider {\n // Check if the provider is already injected\n if (window.canton !== undefined) return window.canton\n\n // Inject the SpliceProvider instance\n window.canton = provider\n\n console.log('Splice provider injected successfully.')\n return window.canton\n}\n\nexport * from './SpliceProvider'\nexport * from './SpliceProviderHttp'\nexport * from './SpliceProviderWindow'\n"]}
package/dist/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { HttpTransport, isSpliceMessageEvent, WalletEvent, WindowTransport } from '@canton-network/core-types';
2
2
  import { io } from 'socket.io-client';
3
- import { popupHref } from '@canton-network/core-wallet-ui-components';
4
3
 
5
4
  var __defProp = Object.defineProperty;
6
5
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -89,15 +88,7 @@ var SpliceProviderHttp = class extends SpliceProviderBase {
89
88
  async request({ method, params }) {
90
89
  const response = await this.transport.submit({ method, params });
91
90
  if ("error" in response) throw new Error(response.error.message);
92
- const result = response.result;
93
- if (method === "prepareExecute") {
94
- const { userUrl } = result;
95
- if (!userUrl) {
96
- throw new Error("No userUrl provided in response");
97
- }
98
- popupHref(userUrl);
99
- }
100
- return result;
91
+ return response.result;
101
92
  }
102
93
  };
103
94
  var SpliceProviderWindow = class extends SpliceProviderBase {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SpliceProvider.ts","../src/SpliceProviderHttp.ts","../src/SpliceProviderWindow.ts","../src/index.ts"],"names":["ProviderType"],"mappings":"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","file":"index.js","sourcesContent":["// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestPayload } from '@canton-network/core-types'\n\nexport type EventListener<T> = (...args: T[]) => void\n\nexport interface SpliceProvider {\n request<T>(args: RequestPayload): Promise<T>\n on<T>(event: string, listener: EventListener<T>): SpliceProvider\n emit<T>(event: string, ...args: T[]): boolean\n removeListener<T>(\n event: string,\n listenerToRemove: EventListener<T>\n ): SpliceProvider\n}\n\nexport abstract class SpliceProviderBase implements SpliceProvider {\n listeners: { [event: string]: EventListener<unknown>[] }\n\n constructor() {\n this.listeners = {} // Event listeners\n }\n\n abstract request<T>(args: RequestPayload): Promise<T>\n\n // Event handling\n public on<T>(event: string, listener: EventListener<T>): SpliceProvider {\n if (!this.listeners[event]) {\n this.listeners[event] = []\n }\n const listeners = this.listeners[event] as EventListener<T>[]\n listeners.push(listener)\n\n return this\n }\n\n public emit<T>(event: string, ...args: T[]): boolean {\n if (this.listeners[event]) {\n this.listeners[event].forEach((listener) => listener(...args))\n return true\n }\n return false\n }\n\n public removeListener<T>(\n event: string,\n listenerToRemove: EventListener<T>\n ): SpliceProvider {\n if (!this.listeners[event]) return this\n\n this.listeners[event] = this.listeners[event].filter(\n (listener) => listener !== listenerToRemove\n )\n\n return this\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n HttpTransport,\n isSpliceMessageEvent,\n RequestPayload,\n WalletEvent,\n} from '@canton-network/core-types'\nimport { SpliceProviderBase } from './SpliceProvider'\nimport { io, Socket } from 'socket.io-client'\nimport { popupHref } from '@canton-network/core-wallet-ui-components'\n\n// Maintain a global socket instance in-memory to avoid multiple connections\n// per SpliceProviderHttp instance.\ntype GatewaySocket = {\n socket: Socket\n url: string\n token: string\n} | null\n\nlet connection: GatewaySocket = null\n\nexport class SpliceProviderHttp extends SpliceProviderBase {\n private sessionToken?: string\n private transport: HttpTransport\n\n private openSocket(url: URL, token: string): void {\n // Assumes the socket URI is accessed directly on the host w/o the API path.\n const socketUri = url.origin\n\n // Reconnect if the URL or token has changed\n if (\n connection &&\n (token !== connection.token || socketUri !== connection.url)\n ) {\n connection.socket.disconnect()\n connection = null\n }\n\n if (!connection) {\n connection = {\n token,\n url: socketUri,\n socket: io(socketUri, {\n auth: {\n token: `Bearer ${token}`,\n },\n }),\n }\n\n connection.socket.onAny((event, ...args) => {\n this.emit(event, ...args)\n })\n }\n }\n\n constructor(\n private url: URL,\n sessionToken?: string\n ) {\n super()\n\n if (sessionToken) {\n this.sessionToken = sessionToken\n this.openSocket(url, sessionToken)\n }\n\n this.transport = new HttpTransport(url, sessionToken)\n\n // Listen for the auth success event sent from the WK UI popup to the SDK running in the parent window.\n window.addEventListener('message', async (event) => {\n if (!isSpliceMessageEvent(event)) return\n\n if (\n event.data.type === WalletEvent.SPLICE_WALLET_IDP_AUTH_SUCCESS\n ) {\n this.sessionToken = event.data.token\n this.transport = new HttpTransport(url, this.sessionToken)\n this.openSocket(this.url, event.data.token)\n\n // We requery the status explicitly here, as it's not guaranteed that the socket will be open & authenticated\n // before the `onConnected` event is fired from the `addSession` RPC call. The dappApi.StatusResult and\n // dappApi.OnConnectedEvent are mapped manually to avoid dependency.\n this.request({ method: 'status' })\n .then((status) => {\n this.emit('onConnected', status)\n })\n .catch((err) => {\n console.error(\n 'Error requesting status after auth:',\n err\n )\n })\n }\n })\n }\n\n public async request<T>({ method, params }: RequestPayload): Promise<T> {\n const response = await this.transport.submit({ method, params })\n\n if ('error' in response) throw new Error(response.error.message)\n\n const result = response.result as T\n if (method === 'prepareExecute') {\n const { userUrl } = result as { userUrl?: string }\n if (!userUrl) {\n throw new Error('No userUrl provided in response')\n }\n popupHref(userUrl)\n }\n return result\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestPayload, WindowTransport } from '@canton-network/core-types'\nimport { SpliceProviderBase } from './SpliceProvider.js'\n\nexport class SpliceProviderWindow extends SpliceProviderBase {\n private transport: WindowTransport\n\n constructor() {\n super()\n this.transport = new WindowTransport(window)\n }\n\n public async request<T>({ method, params }: RequestPayload): Promise<T> {\n const response = await this.transport.submit({ method, params })\n return response.result as T\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SpliceProvider } from './SpliceProvider'\n\ndeclare global {\n interface Window {\n canton?: SpliceProvider | undefined\n }\n}\n\nexport enum ProviderType {\n WINDOW,\n HTTP,\n}\n\nexport function injectSpliceProvider(provider: SpliceProvider): SpliceProvider {\n // Check if the provider is already injected\n if (window.canton !== undefined) return window.canton\n\n // Inject the SpliceProvider instance\n window.canton = provider\n\n console.log('Splice provider injected successfully.')\n return window.canton\n}\n\nexport * from './SpliceProvider'\nexport * from './SpliceProviderHttp'\nexport * from './SpliceProviderWindow'\n"]}
1
+ {"version":3,"sources":["../src/SpliceProvider.ts","../src/SpliceProviderHttp.ts","../src/SpliceProviderWindow.ts","../src/index.ts"],"names":["ProviderType"],"mappings":"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","file":"index.js","sourcesContent":["// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestPayload } from '@canton-network/core-types'\n\nexport type EventListener<T> = (...args: T[]) => void\n\nexport interface SpliceProvider {\n request<T>(args: RequestPayload): Promise<T>\n on<T>(event: string, listener: EventListener<T>): SpliceProvider\n emit<T>(event: string, ...args: T[]): boolean\n removeListener<T>(\n event: string,\n listenerToRemove: EventListener<T>\n ): SpliceProvider\n}\n\nexport abstract class SpliceProviderBase implements SpliceProvider {\n listeners: { [event: string]: EventListener<unknown>[] }\n\n constructor() {\n this.listeners = {} // Event listeners\n }\n\n abstract request<T>(args: RequestPayload): Promise<T>\n\n // Event handling\n public on<T>(event: string, listener: EventListener<T>): SpliceProvider {\n if (!this.listeners[event]) {\n this.listeners[event] = []\n }\n const listeners = this.listeners[event] as EventListener<T>[]\n listeners.push(listener)\n\n return this\n }\n\n public emit<T>(event: string, ...args: T[]): boolean {\n if (this.listeners[event]) {\n this.listeners[event].forEach((listener) => listener(...args))\n return true\n }\n return false\n }\n\n public removeListener<T>(\n event: string,\n listenerToRemove: EventListener<T>\n ): SpliceProvider {\n if (!this.listeners[event]) return this\n\n this.listeners[event] = this.listeners[event].filter(\n (listener) => listener !== listenerToRemove\n )\n\n return this\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n HttpTransport,\n isSpliceMessageEvent,\n RequestPayload,\n WalletEvent,\n} from '@canton-network/core-types'\nimport { SpliceProviderBase } from './SpliceProvider'\nimport { io, Socket } from 'socket.io-client'\n\n// Maintain a global socket instance in-memory to avoid multiple connections\n// per SpliceProviderHttp instance.\ntype GatewaySocket = {\n socket: Socket\n url: string\n token: string\n} | null\n\nlet connection: GatewaySocket = null\n\nexport class SpliceProviderHttp extends SpliceProviderBase {\n private sessionToken?: string\n private transport: HttpTransport\n\n private openSocket(url: URL, token: string): void {\n // Assumes the socket URI is accessed directly on the host w/o the API path.\n const socketUri = url.origin\n\n // Reconnect if the URL or token has changed\n if (\n connection &&\n (token !== connection.token || socketUri !== connection.url)\n ) {\n connection.socket.disconnect()\n connection = null\n }\n\n if (!connection) {\n connection = {\n token,\n url: socketUri,\n socket: io(socketUri, {\n auth: {\n token: `Bearer ${token}`,\n },\n }),\n }\n\n connection.socket.onAny((event, ...args) => {\n this.emit(event, ...args)\n })\n }\n }\n\n constructor(\n private url: URL,\n sessionToken?: string\n ) {\n super()\n\n if (sessionToken) {\n this.sessionToken = sessionToken\n this.openSocket(url, sessionToken)\n }\n\n this.transport = new HttpTransport(url, sessionToken)\n\n // Listen for the auth success event sent from the WK UI popup to the SDK running in the parent window.\n window.addEventListener('message', async (event) => {\n if (!isSpliceMessageEvent(event)) return\n\n if (\n event.data.type === WalletEvent.SPLICE_WALLET_IDP_AUTH_SUCCESS\n ) {\n this.sessionToken = event.data.token\n this.transport = new HttpTransport(url, this.sessionToken)\n this.openSocket(this.url, event.data.token)\n\n // We requery the status explicitly here, as it's not guaranteed that the socket will be open & authenticated\n // before the `onConnected` event is fired from the `addSession` RPC call. The dappApi.StatusResult and\n // dappApi.OnConnectedEvent are mapped manually to avoid dependency.\n this.request({ method: 'status' })\n .then((status) => {\n this.emit('onConnected', status)\n })\n .catch((err) => {\n console.error(\n 'Error requesting status after auth:',\n err\n )\n })\n }\n })\n }\n\n public async request<T>({ method, params }: RequestPayload): Promise<T> {\n const response = await this.transport.submit({ method, params })\n\n if ('error' in response) throw new Error(response.error.message)\n\n return response.result as T\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestPayload, WindowTransport } from '@canton-network/core-types'\nimport { SpliceProviderBase } from './SpliceProvider.js'\n\nexport class SpliceProviderWindow extends SpliceProviderBase {\n private transport: WindowTransport\n\n constructor() {\n super()\n this.transport = new WindowTransport(window)\n }\n\n public async request<T>({ method, params }: RequestPayload): Promise<T> {\n const response = await this.transport.submit({ method, params })\n return response.result as T\n }\n}\n","// Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SpliceProvider } from './SpliceProvider'\n\ndeclare global {\n interface Window {\n canton?: SpliceProvider | undefined\n }\n}\n\nexport enum ProviderType {\n WINDOW,\n HTTP,\n}\n\nexport function injectSpliceProvider(provider: SpliceProvider): SpliceProvider {\n // Check if the provider is already injected\n if (window.canton !== undefined) return window.canton\n\n // Inject the SpliceProvider instance\n window.canton = provider\n\n console.log('Splice provider injected successfully.')\n return window.canton\n}\n\nexport * from './SpliceProvider'\nexport * from './SpliceProviderHttp'\nexport * from './SpliceProviderWindow'\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canton-network/core-splice-provider",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "type": "module",
5
5
  "description": "A JavaScript Splice Provider API (EIP-1193 compliant).",
6
6
  "license": "Apache-2.0",
@@ -28,8 +28,8 @@
28
28
  "typescript": "^5.9.3"
29
29
  },
30
30
  "dependencies": {
31
- "@canton-network/core-types": "^0.14.0",
32
- "@canton-network/core-wallet-ui-components": "^0.17.0",
31
+ "@canton-network/core-types": "^0.15.0",
32
+ "@canton-network/core-wallet-ui-components": "^0.18.0",
33
33
  "socket.io-client": "^4.8.1"
34
34
  },
35
35
  "files": [