@canton-network/core-splice-provider 0.23.1 → 0.25.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/dist/DappAsyncProvider.d.ts +14 -0
- package/dist/DappAsyncProvider.d.ts.map +1 -0
- package/dist/DappProvider.d.ts +10 -0
- package/dist/DappProvider.d.ts.map +1 -0
- package/dist/index.cjs +27 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -21
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +30 -0
- package/dist/provider.d.ts.map +1 -0
- package/package.json +5 -5
- package/dist/SpliceProvider.d.ts +0 -19
- package/dist/SpliceProvider.d.ts.map +0 -1
- package/dist/SpliceProviderHttp.d.ts +0 -13
- package/dist/SpliceProviderHttp.d.ts.map +0 -1
- package/dist/SpliceProviderWindow.d.ts +0 -8
- package/dist/SpliceProviderWindow.d.ts.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RpcTypes as DappAsyncRpcTypes } from '@canton-network/core-wallet-dapp-remote-rpc-client';
|
|
2
|
+
import { AbstractProvider } from './provider';
|
|
3
|
+
import { RequestArgs } from '@canton-network/core-types';
|
|
4
|
+
export declare class DappAsyncProvider extends AbstractProvider<DappAsyncRpcTypes> {
|
|
5
|
+
private url;
|
|
6
|
+
private sessionToken?;
|
|
7
|
+
private client;
|
|
8
|
+
private status?;
|
|
9
|
+
private createClient;
|
|
10
|
+
private openSSE;
|
|
11
|
+
constructor(url: URL, sessionToken?: string);
|
|
12
|
+
request<M extends keyof DappAsyncRpcTypes>(args: RequestArgs<DappAsyncRpcTypes, M>): Promise<DappAsyncRpcTypes[M]['result']>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=DappAsyncProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DappAsyncProvider.d.ts","sourceRoot":"","sources":["../src/DappAsyncProvider.ts"],"names":[],"mappings":"AAGA,OAAyC,EACrC,QAAQ,IAAI,iBAAiB,EAEhC,MAAM,oDAAoD,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE7C,OAAO,EAEH,WAAW,EAEd,MAAM,4BAA4B,CAAA;AAqBnC,qBAAa,iBAAkB,SAAQ,gBAAgB,CAAC,iBAAiB,CAAC;IA8DlE,OAAO,CAAC,GAAG;IA7Df,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAAC,CAAqB;IAEpC,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,OAAO;gBAkDH,GAAG,EAAE,GAAG,EAChB,YAAY,CAAC,EAAE,MAAM;IA8CZ,OAAO,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAClD,IAAI,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC,GACxC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;CAG7C"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RpcTypes as DappRpcTypes } from '@canton-network/core-wallet-dapp-rpc-client';
|
|
2
|
+
import { AbstractProvider } from './provider';
|
|
3
|
+
import { RequestArgs } from '@canton-network/core-types';
|
|
4
|
+
import { RpcTransport } from '@canton-network/core-rpc-transport';
|
|
5
|
+
export declare class DappProvider extends AbstractProvider<DappRpcTypes> {
|
|
6
|
+
private client;
|
|
7
|
+
constructor(transport?: RpcTransport);
|
|
8
|
+
request<M extends keyof DappRpcTypes>(args: RequestArgs<DappRpcTypes, M>): Promise<DappRpcTypes[M]['result']>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=DappProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DappProvider.d.ts","sourceRoot":"","sources":["../src/DappProvider.ts"],"names":[],"mappings":"AAGA,OAAmC,EAC/B,QAAQ,IAAI,YAAY,EAC3B,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EACH,YAAY,EAEf,MAAM,oCAAoC,CAAA;AAE3C,qBAAa,YAAa,SAAQ,gBAAgB,CAAC,YAAY,CAAC;IAC5D,OAAO,CAAC,MAAM,CAA4B;gBAE9B,SAAS,CAAC,EAAE,YAAY;IAOvB,OAAO,CAAC,CAAC,SAAS,MAAM,YAAY,EAC7C,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,GACnC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;CAGxC"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var coreTypes = require('@canton-network/core-types');
|
|
4
|
-
var coreRpcTransport = require('@canton-network/core-rpc-transport');
|
|
5
3
|
var SpliceWalletJSONRPCDAppAPI = require('@canton-network/core-wallet-dapp-rpc-client');
|
|
4
|
+
var coreRpcTransport = require('@canton-network/core-rpc-transport');
|
|
5
|
+
var SpliceWalletJSONRPCRemoteDAppAPI = require('@canton-network/core-wallet-dapp-remote-rpc-client');
|
|
6
|
+
var coreTypes = require('@canton-network/core-types');
|
|
6
7
|
|
|
7
8
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
9
|
|
|
9
10
|
var SpliceWalletJSONRPCDAppAPI__default = /*#__PURE__*/_interopDefault(SpliceWalletJSONRPCDAppAPI);
|
|
11
|
+
var SpliceWalletJSONRPCRemoteDAppAPI__default = /*#__PURE__*/_interopDefault(SpliceWalletJSONRPCRemoteDAppAPI);
|
|
10
12
|
|
|
11
13
|
var __defProp = Object.defineProperty;
|
|
12
14
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
15
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
14
16
|
|
|
15
|
-
// src/
|
|
16
|
-
var
|
|
17
|
+
// src/provider.ts
|
|
18
|
+
var AbstractProvider = class {
|
|
17
19
|
constructor() {
|
|
18
20
|
__publicField(this, "listeners");
|
|
19
21
|
this.listeners = {};
|
|
@@ -42,6 +44,18 @@ var SpliceProviderBase = class {
|
|
|
42
44
|
return this;
|
|
43
45
|
}
|
|
44
46
|
};
|
|
47
|
+
var DappProvider = class extends AbstractProvider {
|
|
48
|
+
constructor(transport) {
|
|
49
|
+
super();
|
|
50
|
+
__publicField(this, "client");
|
|
51
|
+
this.client = new SpliceWalletJSONRPCDAppAPI__default.default(
|
|
52
|
+
transport ?? new coreRpcTransport.WindowTransport(window)
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
async request(args) {
|
|
56
|
+
return await this.client.request(args);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
45
59
|
var connection = null;
|
|
46
60
|
function parseSSEData(data) {
|
|
47
61
|
try {
|
|
@@ -51,7 +65,7 @@ function parseSSEData(data) {
|
|
|
51
65
|
return [data];
|
|
52
66
|
}
|
|
53
67
|
}
|
|
54
|
-
var
|
|
68
|
+
var DappAsyncProvider = class extends AbstractProvider {
|
|
55
69
|
constructor(url, sessionToken) {
|
|
56
70
|
super();
|
|
57
71
|
this.url = url;
|
|
@@ -85,7 +99,7 @@ var SpliceProviderHttp = class extends SpliceProviderBase {
|
|
|
85
99
|
}
|
|
86
100
|
createClient(sessionToken) {
|
|
87
101
|
const transport = new coreRpcTransport.HttpTransport(this.url, sessionToken);
|
|
88
|
-
return new
|
|
102
|
+
return new SpliceWalletJSONRPCRemoteDAppAPI__default.default(transport);
|
|
89
103
|
}
|
|
90
104
|
openSSE(url, token) {
|
|
91
105
|
const sseUrl = new URL("events", url.toString().replace(/\/?$/, "/"));
|
|
@@ -122,19 +136,8 @@ var SpliceProviderHttp = class extends SpliceProviderBase {
|
|
|
122
136
|
};
|
|
123
137
|
}
|
|
124
138
|
}
|
|
125
|
-
async request(
|
|
126
|
-
return await this.client.request(
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
var SpliceProviderWindow = class extends SpliceProviderBase {
|
|
130
|
-
constructor() {
|
|
131
|
-
super();
|
|
132
|
-
__publicField(this, "client");
|
|
133
|
-
const transport = new coreRpcTransport.WindowTransport(window);
|
|
134
|
-
this.client = new SpliceWalletJSONRPCDAppAPI__default.default(transport);
|
|
135
|
-
}
|
|
136
|
-
async request({ method, params }) {
|
|
137
|
-
return await this.client.request(method, params);
|
|
139
|
+
async request(args) {
|
|
140
|
+
return await this.client.request(args);
|
|
138
141
|
}
|
|
139
142
|
};
|
|
140
143
|
|
|
@@ -144,17 +147,17 @@ var ProviderType = /* @__PURE__ */ ((ProviderType2) => {
|
|
|
144
147
|
ProviderType2[ProviderType2["HTTP"] = 1] = "HTTP";
|
|
145
148
|
return ProviderType2;
|
|
146
149
|
})(ProviderType || {});
|
|
147
|
-
function
|
|
150
|
+
function injectProvider(provider) {
|
|
148
151
|
if (window.canton !== void 0) return window.canton;
|
|
149
152
|
window.canton = provider;
|
|
150
153
|
console.log("Splice provider injected successfully.");
|
|
151
154
|
return window.canton;
|
|
152
155
|
}
|
|
153
156
|
|
|
157
|
+
exports.AbstractProvider = AbstractProvider;
|
|
158
|
+
exports.DappAsyncProvider = DappAsyncProvider;
|
|
159
|
+
exports.DappProvider = DappProvider;
|
|
154
160
|
exports.ProviderType = ProviderType;
|
|
155
|
-
exports.
|
|
156
|
-
exports.SpliceProviderHttp = SpliceProviderHttp;
|
|
157
|
-
exports.SpliceProviderWindow = SpliceProviderWindow;
|
|
158
|
-
exports.injectSpliceProvider = injectSpliceProvider;
|
|
161
|
+
exports.injectProvider = injectProvider;
|
|
159
162
|
//# sourceMappingURL=index.cjs.map
|
|
160
163
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SpliceProvider.ts","../src/SpliceProviderHttp.ts","../src/SpliceProviderWindow.ts","../src/index.ts"],"names":["isSpliceMessageEvent","WalletEvent","HttpTransport","SpliceWalletJSONRPCDAppAPI","WindowTransport","ProviderType"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) 2025-2026 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-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n isSpliceMessageEvent,\n RequestPayload,\n WalletEvent,\n} from '@canton-network/core-types'\nimport { HttpTransport } from '@canton-network/core-rpc-transport'\nimport SpliceWalletJSONRPCDAppAPI, {\n Session,\n StatusEvent,\n} from '@canton-network/core-wallet-dapp-rpc-client'\nimport { SpliceProviderBase } from './SpliceProvider'\n\n// Maintain a global SSE connection in-memory to avoid multiple connections\n// per SpliceProviderHttp instance.\ntype GatewaySSE = {\n url: string\n token: string\n eventSource: EventSource\n} | null\n\nlet connection: GatewaySSE = null\n\nfunction parseSSEData(data: string): unknown[] {\n try {\n const parsed = JSON.parse(data)\n return Array.isArray(parsed) ? parsed : [parsed]\n } catch {\n return [data]\n }\n}\n\nexport class SpliceProviderHttp extends SpliceProviderBase {\n private sessionToken?: string\n private client: SpliceWalletJSONRPCDAppAPI\n private status?: Session | undefined\n\n private createClient(sessionToken?: string): SpliceWalletJSONRPCDAppAPI {\n const transport = new HttpTransport(this.url, sessionToken)\n return new SpliceWalletJSONRPCDAppAPI(transport)\n }\n\n private openSSE(url: URL, token: string): void {\n const sseUrl = new URL('events', url.toString().replace(/\\/?$/, '/'))\n sseUrl.searchParams.set('token', token)\n const sseUrlString = sseUrl.toString()\n\n // Reconnect if the URL or token has changed\n if (\n connection &&\n (token !== connection.token || sseUrlString !== connection.url)\n ) {\n connection.eventSource.close()\n connection = null\n }\n\n if (!connection) {\n const eventSource = new EventSource(sseUrlString)\n\n eventSource.onmessage = (event) =>\n this.emit('message', ...parseSSEData(event.data))\n\n const emitEvent = (name: string) => (event: MessageEvent) =>\n this.emit(name, ...parseSSEData(event.data))\n\n eventSource.addEventListener(\n 'accountsChanged',\n emitEvent('accountsChanged')\n )\n eventSource.addEventListener(\n 'statusChanged',\n emitEvent('statusChanged')\n )\n eventSource.addEventListener('connected', emitEvent('connected'))\n eventSource.addEventListener('txChanged', emitEvent('txChanged'))\n\n eventSource.onerror = () => {\n if (connection?.url === sseUrlString) {\n connection.eventSource.close()\n connection = null\n }\n }\n\n connection = {\n eventSource,\n url: sseUrlString,\n token,\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.openSSE(url, sessionToken)\n }\n\n this.client = this.createClient(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.client = this.createClient(this.sessionToken)\n this.openSSE(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 `statusChanged` event is fired from the `addSession` RPC call. The dappApi.StatusResult and\n // dappApi.StatusEvent are mapped manually to avoid dependency.\n this.request<StatusEvent>({ method: 'status' })\n .then((status) => {\n //for some reason comparing the objects directly dosent work as intended\n if (\n JSON.stringify(status.session) !==\n JSON.stringify(this.status)\n ) {\n this.emit('statusChanged', status)\n this.status = status.session\n }\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 return (await (\n this.client.request as (\n method: string,\n params?: RequestPayload['params']\n ) => Promise<unknown>\n )(method, params)) as T\n }\n}\n","// Copyright (c) 2025-2026 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'\nimport { WindowTransport } from '@canton-network/core-rpc-transport'\nimport SpliceWalletJSONRPCDAppAPI from '@canton-network/core-wallet-dapp-rpc-client'\nimport { SpliceProviderBase } from './SpliceProvider.js'\n\nexport class SpliceProviderWindow extends SpliceProviderBase {\n private client: SpliceWalletJSONRPCDAppAPI\n\n constructor() {\n super()\n const transport = new WindowTransport(window)\n this.client = new SpliceWalletJSONRPCDAppAPI(transport)\n }\n\n public async request<T>({ method, params }: RequestPayload): Promise<T> {\n return (await (\n this.client.request as (\n method: string,\n params?: RequestPayload['params']\n ) => Promise<unknown>\n )(method, params)) as T\n }\n}\n","// Copyright (c) 2025-2026 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/provider.ts","../src/DappProvider.ts","../src/DappAsyncProvider.ts","../src/index.ts"],"names":["SpliceWalletJSONRPCDAppAPI","WindowTransport","isSpliceMessageEvent","WalletEvent","HttpTransport","SpliceWalletJSONRPCRemoteDAppAPI","ProviderType"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestArgs, UnknownRpcTypes } from '@canton-network/core-types'\n\nexport type EventListener<T> = (...args: T[]) => void\n\n/**\n * The Provider interface is generic over a type `T` that defines a mapping between supported methods\n * and their corresponding request and response types. The request method takes an argument of type RequestArgs<T, M>,\n * where `M` is a key of `T` representing the method being called.\n *\n * The type of the params body for a method `M` is derived from T[M]['params']\n * The type of the result of calling a method `M` is derived from T[M]['result']\n */\nexport interface Provider<T extends UnknownRpcTypes> {\n request<M extends keyof T>(args: RequestArgs<T, M>): Promise<T[M]['result']>\n\n on<E>(event: string, listener: EventListener<E>): Provider<T>\n emit<E>(event: string, ...args: E[]): boolean\n removeListener<E>(\n event: string,\n listenerToRemove: EventListener<E>\n ): Provider<T>\n}\n\n/**\n * An abstract base class for Providers that implements the event handling logic. It maintains a mapping of event names to arrays of listeners and provides methods to register, emit, and remove listeners. The request method is left abstract for subclasses to implement according to their specific RPC transport mechanism.\n */\nexport abstract class AbstractProvider<\n T extends UnknownRpcTypes,\n> implements Provider<T> {\n listeners: { [event: string]: EventListener<unknown>[] }\n\n constructor() {\n this.listeners = {} // Event listeners\n }\n\n abstract request<M extends keyof T>(\n args: RequestArgs<T, M>\n ): Promise<T[M]['result']>\n\n // Event handling\n public on<E>(event: string, listener: EventListener<E>): Provider<T> {\n if (!this.listeners[event]) {\n this.listeners[event] = []\n }\n const listeners = this.listeners[event] as EventListener<E>[]\n listeners.push(listener)\n\n return this\n }\n\n public emit<E>(event: string, ...args: E[]): 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<E>(\n event: string,\n listenerToRemove: EventListener<E>\n ): Provider<T> {\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-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport SpliceWalletJSONRPCDAppAPI, {\n RpcTypes as DappRpcTypes,\n} from '@canton-network/core-wallet-dapp-rpc-client'\nimport { AbstractProvider } from './provider'\nimport { RequestArgs } from '@canton-network/core-types'\nimport {\n RpcTransport,\n WindowTransport,\n} from '@canton-network/core-rpc-transport'\n\nexport class DappProvider extends AbstractProvider<DappRpcTypes> {\n private client: SpliceWalletJSONRPCDAppAPI\n\n constructor(transport?: RpcTransport) {\n super()\n this.client = new SpliceWalletJSONRPCDAppAPI(\n transport ?? new WindowTransport(window)\n )\n }\n\n public async request<M extends keyof DappRpcTypes>(\n args: RequestArgs<DappRpcTypes, M>\n ): Promise<DappRpcTypes[M]['result']> {\n return await this.client.request<M>(args)\n }\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport SpliceWalletJSONRPCRemoteDAppAPI, {\n RpcTypes as DappAsyncRpcTypes,\n Session,\n} from '@canton-network/core-wallet-dapp-remote-rpc-client'\nimport { AbstractProvider } from './provider'\nimport { HttpTransport } from '@canton-network/core-rpc-transport'\nimport {\n isSpliceMessageEvent,\n RequestArgs,\n WalletEvent,\n} from '@canton-network/core-types'\n\n// Maintain a global SSE connection in-memory to avoid multiple connections\n// per DappAsyncProvider instance.\ntype GatewaySSE = {\n url: string\n token: string\n eventSource: EventSource\n} | null\n\nlet connection: GatewaySSE = null\n\nfunction parseSSEData(data: string): unknown[] {\n try {\n const parsed = JSON.parse(data)\n return Array.isArray(parsed) ? parsed : [parsed]\n } catch {\n return [data]\n }\n}\n\nexport class DappAsyncProvider extends AbstractProvider<DappAsyncRpcTypes> {\n private sessionToken?: string\n private client: SpliceWalletJSONRPCRemoteDAppAPI\n private status?: Session | undefined\n\n private createClient(\n sessionToken?: string\n ): SpliceWalletJSONRPCRemoteDAppAPI {\n const transport = new HttpTransport(this.url, sessionToken)\n return new SpliceWalletJSONRPCRemoteDAppAPI(transport)\n }\n\n private openSSE(url: URL, token: string): void {\n const sseUrl = new URL('events', url.toString().replace(/\\/?$/, '/'))\n sseUrl.searchParams.set('token', token)\n const sseUrlString = sseUrl.toString()\n\n // Reconnect if the URL or token has changed\n if (\n connection &&\n (token !== connection.token || sseUrlString !== connection.url)\n ) {\n connection.eventSource.close()\n connection = null\n }\n\n if (!connection) {\n const eventSource = new EventSource(sseUrlString)\n\n eventSource.onmessage = (event) =>\n this.emit('message', ...parseSSEData(event.data))\n\n const emitEvent = (name: string) => (event: MessageEvent) =>\n this.emit(name, ...parseSSEData(event.data))\n\n eventSource.addEventListener(\n 'accountsChanged',\n emitEvent('accountsChanged')\n )\n eventSource.addEventListener(\n 'statusChanged',\n emitEvent('statusChanged')\n )\n eventSource.addEventListener('connected', emitEvent('connected'))\n eventSource.addEventListener('txChanged', emitEvent('txChanged'))\n\n eventSource.onerror = () => {\n if (connection?.url === sseUrlString) {\n connection.eventSource.close()\n connection = null\n }\n }\n\n connection = {\n eventSource,\n url: sseUrlString,\n token,\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.openSSE(url, sessionToken)\n }\n\n this.client = this.createClient(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.client = this.createClient(this.sessionToken)\n this.openSSE(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 `statusChanged` event is fired from the `addSession` RPC call. The dappApi.StatusResult and\n // dappApi.StatusEvent are mapped manually to avoid dependency.\n this.request({ method: 'status' })\n .then((status) => {\n //for some reason comparing the objects directly dosent work as intended\n if (\n JSON.stringify(status.session) !==\n JSON.stringify(this.status)\n ) {\n this.emit('statusChanged', status)\n this.status = status.session\n }\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<M extends keyof DappAsyncRpcTypes>(\n args: RequestArgs<DappAsyncRpcTypes, M>\n ): Promise<DappAsyncRpcTypes[M]['result']> {\n return await this.client.request<M>(args)\n }\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RpcTypes } from '@canton-network/core-wallet-dapp-rpc-client'\nimport { Provider } from './provider'\n\ntype DappProviderInterface = Provider<RpcTypes>\n\ndeclare global {\n interface Window {\n // we assume that we will always use a full DappProvider in the browser context\n canton?: DappProviderInterface | undefined\n }\n}\n\nexport enum ProviderType {\n WINDOW,\n HTTP,\n}\n\nexport function injectProvider(\n provider: DappProviderInterface\n): DappProviderInterface {\n // Check if the provider is already injected\n if (window.canton !== undefined) return window.canton\n\n // Inject the Provider instance\n window.canton = provider\n\n console.log('Splice provider injected successfully.')\n return window.canton\n}\n\nexport * from './provider'\nexport * from './DappProvider'\nexport * from './DappAsyncProvider'\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RpcTypes } from '@canton-network/core-wallet-dapp-rpc-client';
|
|
2
|
+
import { Provider } from './provider';
|
|
3
|
+
type DappProviderInterface = Provider<RpcTypes>;
|
|
2
4
|
declare global {
|
|
3
5
|
interface Window {
|
|
4
|
-
canton?:
|
|
6
|
+
canton?: DappProviderInterface | undefined;
|
|
5
7
|
}
|
|
6
8
|
}
|
|
7
9
|
export declare enum ProviderType {
|
|
8
10
|
WINDOW = 0,
|
|
9
11
|
HTTP = 1
|
|
10
12
|
}
|
|
11
|
-
export declare function
|
|
12
|
-
export * from './
|
|
13
|
-
export * from './
|
|
14
|
-
export * from './
|
|
13
|
+
export declare function injectProvider(provider: DappProviderInterface): DappProviderInterface;
|
|
14
|
+
export * from './provider';
|
|
15
|
+
export * from './DappProvider';
|
|
16
|
+
export * from './DappAsyncProvider';
|
|
15
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,KAAK,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAE/C,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QAEZ,MAAM,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAA;KAC7C;CACJ;AAED,oBAAY,YAAY;IACpB,MAAM,IAAA;IACN,IAAI,IAAA;CACP;AAED,wBAAgB,cAAc,CAC1B,QAAQ,EAAE,qBAAqB,GAChC,qBAAqB,CASvB;AAED,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { isSpliceMessageEvent, WalletEvent } from '@canton-network/core-types';
|
|
2
|
-
import { HttpTransport, WindowTransport } from '@canton-network/core-rpc-transport';
|
|
3
1
|
import SpliceWalletJSONRPCDAppAPI from '@canton-network/core-wallet-dapp-rpc-client';
|
|
2
|
+
import { WindowTransport, HttpTransport } from '@canton-network/core-rpc-transport';
|
|
3
|
+
import SpliceWalletJSONRPCRemoteDAppAPI from '@canton-network/core-wallet-dapp-remote-rpc-client';
|
|
4
|
+
import { isSpliceMessageEvent, WalletEvent } from '@canton-network/core-types';
|
|
4
5
|
|
|
5
6
|
var __defProp = Object.defineProperty;
|
|
6
7
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
8
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
8
9
|
|
|
9
|
-
// src/
|
|
10
|
-
var
|
|
10
|
+
// src/provider.ts
|
|
11
|
+
var AbstractProvider = class {
|
|
11
12
|
constructor() {
|
|
12
13
|
__publicField(this, "listeners");
|
|
13
14
|
this.listeners = {};
|
|
@@ -36,6 +37,18 @@ var SpliceProviderBase = class {
|
|
|
36
37
|
return this;
|
|
37
38
|
}
|
|
38
39
|
};
|
|
40
|
+
var DappProvider = class extends AbstractProvider {
|
|
41
|
+
constructor(transport) {
|
|
42
|
+
super();
|
|
43
|
+
__publicField(this, "client");
|
|
44
|
+
this.client = new SpliceWalletJSONRPCDAppAPI(
|
|
45
|
+
transport ?? new WindowTransport(window)
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
async request(args) {
|
|
49
|
+
return await this.client.request(args);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
39
52
|
var connection = null;
|
|
40
53
|
function parseSSEData(data) {
|
|
41
54
|
try {
|
|
@@ -45,7 +58,7 @@ function parseSSEData(data) {
|
|
|
45
58
|
return [data];
|
|
46
59
|
}
|
|
47
60
|
}
|
|
48
|
-
var
|
|
61
|
+
var DappAsyncProvider = class extends AbstractProvider {
|
|
49
62
|
constructor(url, sessionToken) {
|
|
50
63
|
super();
|
|
51
64
|
this.url = url;
|
|
@@ -79,7 +92,7 @@ var SpliceProviderHttp = class extends SpliceProviderBase {
|
|
|
79
92
|
}
|
|
80
93
|
createClient(sessionToken) {
|
|
81
94
|
const transport = new HttpTransport(this.url, sessionToken);
|
|
82
|
-
return new
|
|
95
|
+
return new SpliceWalletJSONRPCRemoteDAppAPI(transport);
|
|
83
96
|
}
|
|
84
97
|
openSSE(url, token) {
|
|
85
98
|
const sseUrl = new URL("events", url.toString().replace(/\/?$/, "/"));
|
|
@@ -116,19 +129,8 @@ var SpliceProviderHttp = class extends SpliceProviderBase {
|
|
|
116
129
|
};
|
|
117
130
|
}
|
|
118
131
|
}
|
|
119
|
-
async request(
|
|
120
|
-
return await this.client.request(
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
var SpliceProviderWindow = class extends SpliceProviderBase {
|
|
124
|
-
constructor() {
|
|
125
|
-
super();
|
|
126
|
-
__publicField(this, "client");
|
|
127
|
-
const transport = new WindowTransport(window);
|
|
128
|
-
this.client = new SpliceWalletJSONRPCDAppAPI(transport);
|
|
129
|
-
}
|
|
130
|
-
async request({ method, params }) {
|
|
131
|
-
return await this.client.request(method, params);
|
|
132
|
+
async request(args) {
|
|
133
|
+
return await this.client.request(args);
|
|
132
134
|
}
|
|
133
135
|
};
|
|
134
136
|
|
|
@@ -138,13 +140,13 @@ var ProviderType = /* @__PURE__ */ ((ProviderType2) => {
|
|
|
138
140
|
ProviderType2[ProviderType2["HTTP"] = 1] = "HTTP";
|
|
139
141
|
return ProviderType2;
|
|
140
142
|
})(ProviderType || {});
|
|
141
|
-
function
|
|
143
|
+
function injectProvider(provider) {
|
|
142
144
|
if (window.canton !== void 0) return window.canton;
|
|
143
145
|
window.canton = provider;
|
|
144
146
|
console.log("Splice provider injected successfully.");
|
|
145
147
|
return window.canton;
|
|
146
148
|
}
|
|
147
149
|
|
|
148
|
-
export {
|
|
150
|
+
export { AbstractProvider, DappAsyncProvider, DappProvider, ProviderType, injectProvider };
|
|
149
151
|
//# sourceMappingURL=index.js.map
|
|
150
152
|
//# sourceMappingURL=index.js.map
|
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":["SpliceWalletJSONRPCDAppAPI","ProviderType"],"mappings":"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","file":"index.js","sourcesContent":["// Copyright (c) 2025-2026 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-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n isSpliceMessageEvent,\n RequestPayload,\n WalletEvent,\n} from '@canton-network/core-types'\nimport { HttpTransport } from '@canton-network/core-rpc-transport'\nimport SpliceWalletJSONRPCDAppAPI, {\n Session,\n StatusEvent,\n} from '@canton-network/core-wallet-dapp-rpc-client'\nimport { SpliceProviderBase } from './SpliceProvider'\n\n// Maintain a global SSE connection in-memory to avoid multiple connections\n// per SpliceProviderHttp instance.\ntype GatewaySSE = {\n url: string\n token: string\n eventSource: EventSource\n} | null\n\nlet connection: GatewaySSE = null\n\nfunction parseSSEData(data: string): unknown[] {\n try {\n const parsed = JSON.parse(data)\n return Array.isArray(parsed) ? parsed : [parsed]\n } catch {\n return [data]\n }\n}\n\nexport class SpliceProviderHttp extends SpliceProviderBase {\n private sessionToken?: string\n private client: SpliceWalletJSONRPCDAppAPI\n private status?: Session | undefined\n\n private createClient(sessionToken?: string): SpliceWalletJSONRPCDAppAPI {\n const transport = new HttpTransport(this.url, sessionToken)\n return new SpliceWalletJSONRPCDAppAPI(transport)\n }\n\n private openSSE(url: URL, token: string): void {\n const sseUrl = new URL('events', url.toString().replace(/\\/?$/, '/'))\n sseUrl.searchParams.set('token', token)\n const sseUrlString = sseUrl.toString()\n\n // Reconnect if the URL or token has changed\n if (\n connection &&\n (token !== connection.token || sseUrlString !== connection.url)\n ) {\n connection.eventSource.close()\n connection = null\n }\n\n if (!connection) {\n const eventSource = new EventSource(sseUrlString)\n\n eventSource.onmessage = (event) =>\n this.emit('message', ...parseSSEData(event.data))\n\n const emitEvent = (name: string) => (event: MessageEvent) =>\n this.emit(name, ...parseSSEData(event.data))\n\n eventSource.addEventListener(\n 'accountsChanged',\n emitEvent('accountsChanged')\n )\n eventSource.addEventListener(\n 'statusChanged',\n emitEvent('statusChanged')\n )\n eventSource.addEventListener('connected', emitEvent('connected'))\n eventSource.addEventListener('txChanged', emitEvent('txChanged'))\n\n eventSource.onerror = () => {\n if (connection?.url === sseUrlString) {\n connection.eventSource.close()\n connection = null\n }\n }\n\n connection = {\n eventSource,\n url: sseUrlString,\n token,\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.openSSE(url, sessionToken)\n }\n\n this.client = this.createClient(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.client = this.createClient(this.sessionToken)\n this.openSSE(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 `statusChanged` event is fired from the `addSession` RPC call. The dappApi.StatusResult and\n // dappApi.StatusEvent are mapped manually to avoid dependency.\n this.request<StatusEvent>({ method: 'status' })\n .then((status) => {\n //for some reason comparing the objects directly dosent work as intended\n if (\n JSON.stringify(status.session) !==\n JSON.stringify(this.status)\n ) {\n this.emit('statusChanged', status)\n this.status = status.session\n }\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 return (await (\n this.client.request as (\n method: string,\n params?: RequestPayload['params']\n ) => Promise<unknown>\n )(method, params)) as T\n }\n}\n","// Copyright (c) 2025-2026 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'\nimport { WindowTransport } from '@canton-network/core-rpc-transport'\nimport SpliceWalletJSONRPCDAppAPI from '@canton-network/core-wallet-dapp-rpc-client'\nimport { SpliceProviderBase } from './SpliceProvider.js'\n\nexport class SpliceProviderWindow extends SpliceProviderBase {\n private client: SpliceWalletJSONRPCDAppAPI\n\n constructor() {\n super()\n const transport = new WindowTransport(window)\n this.client = new SpliceWalletJSONRPCDAppAPI(transport)\n }\n\n public async request<T>({ method, params }: RequestPayload): Promise<T> {\n return (await (\n this.client.request as (\n method: string,\n params?: RequestPayload['params']\n ) => Promise<unknown>\n )(method, params)) as T\n }\n}\n","// Copyright (c) 2025-2026 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/provider.ts","../src/DappProvider.ts","../src/DappAsyncProvider.ts","../src/index.ts"],"names":["ProviderType"],"mappings":"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","file":"index.js","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestArgs, UnknownRpcTypes } from '@canton-network/core-types'\n\nexport type EventListener<T> = (...args: T[]) => void\n\n/**\n * The Provider interface is generic over a type `T` that defines a mapping between supported methods\n * and their corresponding request and response types. The request method takes an argument of type RequestArgs<T, M>,\n * where `M` is a key of `T` representing the method being called.\n *\n * The type of the params body for a method `M` is derived from T[M]['params']\n * The type of the result of calling a method `M` is derived from T[M]['result']\n */\nexport interface Provider<T extends UnknownRpcTypes> {\n request<M extends keyof T>(args: RequestArgs<T, M>): Promise<T[M]['result']>\n\n on<E>(event: string, listener: EventListener<E>): Provider<T>\n emit<E>(event: string, ...args: E[]): boolean\n removeListener<E>(\n event: string,\n listenerToRemove: EventListener<E>\n ): Provider<T>\n}\n\n/**\n * An abstract base class for Providers that implements the event handling logic. It maintains a mapping of event names to arrays of listeners and provides methods to register, emit, and remove listeners. The request method is left abstract for subclasses to implement according to their specific RPC transport mechanism.\n */\nexport abstract class AbstractProvider<\n T extends UnknownRpcTypes,\n> implements Provider<T> {\n listeners: { [event: string]: EventListener<unknown>[] }\n\n constructor() {\n this.listeners = {} // Event listeners\n }\n\n abstract request<M extends keyof T>(\n args: RequestArgs<T, M>\n ): Promise<T[M]['result']>\n\n // Event handling\n public on<E>(event: string, listener: EventListener<E>): Provider<T> {\n if (!this.listeners[event]) {\n this.listeners[event] = []\n }\n const listeners = this.listeners[event] as EventListener<E>[]\n listeners.push(listener)\n\n return this\n }\n\n public emit<E>(event: string, ...args: E[]): 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<E>(\n event: string,\n listenerToRemove: EventListener<E>\n ): Provider<T> {\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-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport SpliceWalletJSONRPCDAppAPI, {\n RpcTypes as DappRpcTypes,\n} from '@canton-network/core-wallet-dapp-rpc-client'\nimport { AbstractProvider } from './provider'\nimport { RequestArgs } from '@canton-network/core-types'\nimport {\n RpcTransport,\n WindowTransport,\n} from '@canton-network/core-rpc-transport'\n\nexport class DappProvider extends AbstractProvider<DappRpcTypes> {\n private client: SpliceWalletJSONRPCDAppAPI\n\n constructor(transport?: RpcTransport) {\n super()\n this.client = new SpliceWalletJSONRPCDAppAPI(\n transport ?? new WindowTransport(window)\n )\n }\n\n public async request<M extends keyof DappRpcTypes>(\n args: RequestArgs<DappRpcTypes, M>\n ): Promise<DappRpcTypes[M]['result']> {\n return await this.client.request<M>(args)\n }\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport SpliceWalletJSONRPCRemoteDAppAPI, {\n RpcTypes as DappAsyncRpcTypes,\n Session,\n} from '@canton-network/core-wallet-dapp-remote-rpc-client'\nimport { AbstractProvider } from './provider'\nimport { HttpTransport } from '@canton-network/core-rpc-transport'\nimport {\n isSpliceMessageEvent,\n RequestArgs,\n WalletEvent,\n} from '@canton-network/core-types'\n\n// Maintain a global SSE connection in-memory to avoid multiple connections\n// per DappAsyncProvider instance.\ntype GatewaySSE = {\n url: string\n token: string\n eventSource: EventSource\n} | null\n\nlet connection: GatewaySSE = null\n\nfunction parseSSEData(data: string): unknown[] {\n try {\n const parsed = JSON.parse(data)\n return Array.isArray(parsed) ? parsed : [parsed]\n } catch {\n return [data]\n }\n}\n\nexport class DappAsyncProvider extends AbstractProvider<DappAsyncRpcTypes> {\n private sessionToken?: string\n private client: SpliceWalletJSONRPCRemoteDAppAPI\n private status?: Session | undefined\n\n private createClient(\n sessionToken?: string\n ): SpliceWalletJSONRPCRemoteDAppAPI {\n const transport = new HttpTransport(this.url, sessionToken)\n return new SpliceWalletJSONRPCRemoteDAppAPI(transport)\n }\n\n private openSSE(url: URL, token: string): void {\n const sseUrl = new URL('events', url.toString().replace(/\\/?$/, '/'))\n sseUrl.searchParams.set('token', token)\n const sseUrlString = sseUrl.toString()\n\n // Reconnect if the URL or token has changed\n if (\n connection &&\n (token !== connection.token || sseUrlString !== connection.url)\n ) {\n connection.eventSource.close()\n connection = null\n }\n\n if (!connection) {\n const eventSource = new EventSource(sseUrlString)\n\n eventSource.onmessage = (event) =>\n this.emit('message', ...parseSSEData(event.data))\n\n const emitEvent = (name: string) => (event: MessageEvent) =>\n this.emit(name, ...parseSSEData(event.data))\n\n eventSource.addEventListener(\n 'accountsChanged',\n emitEvent('accountsChanged')\n )\n eventSource.addEventListener(\n 'statusChanged',\n emitEvent('statusChanged')\n )\n eventSource.addEventListener('connected', emitEvent('connected'))\n eventSource.addEventListener('txChanged', emitEvent('txChanged'))\n\n eventSource.onerror = () => {\n if (connection?.url === sseUrlString) {\n connection.eventSource.close()\n connection = null\n }\n }\n\n connection = {\n eventSource,\n url: sseUrlString,\n token,\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.openSSE(url, sessionToken)\n }\n\n this.client = this.createClient(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.client = this.createClient(this.sessionToken)\n this.openSSE(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 `statusChanged` event is fired from the `addSession` RPC call. The dappApi.StatusResult and\n // dappApi.StatusEvent are mapped manually to avoid dependency.\n this.request({ method: 'status' })\n .then((status) => {\n //for some reason comparing the objects directly dosent work as intended\n if (\n JSON.stringify(status.session) !==\n JSON.stringify(this.status)\n ) {\n this.emit('statusChanged', status)\n this.status = status.session\n }\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<M extends keyof DappAsyncRpcTypes>(\n args: RequestArgs<DappAsyncRpcTypes, M>\n ): Promise<DappAsyncRpcTypes[M]['result']> {\n return await this.client.request<M>(args)\n }\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RpcTypes } from '@canton-network/core-wallet-dapp-rpc-client'\nimport { Provider } from './provider'\n\ntype DappProviderInterface = Provider<RpcTypes>\n\ndeclare global {\n interface Window {\n // we assume that we will always use a full DappProvider in the browser context\n canton?: DappProviderInterface | undefined\n }\n}\n\nexport enum ProviderType {\n WINDOW,\n HTTP,\n}\n\nexport function injectProvider(\n provider: DappProviderInterface\n): DappProviderInterface {\n // Check if the provider is already injected\n if (window.canton !== undefined) return window.canton\n\n // Inject the Provider instance\n window.canton = provider\n\n console.log('Splice provider injected successfully.')\n return window.canton\n}\n\nexport * from './provider'\nexport * from './DappProvider'\nexport * from './DappAsyncProvider'\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { RequestArgs, UnknownRpcTypes } from '@canton-network/core-types';
|
|
2
|
+
export type EventListener<T> = (...args: T[]) => void;
|
|
3
|
+
/**
|
|
4
|
+
* The Provider interface is generic over a type `T` that defines a mapping between supported methods
|
|
5
|
+
* and their corresponding request and response types. The request method takes an argument of type RequestArgs<T, M>,
|
|
6
|
+
* where `M` is a key of `T` representing the method being called.
|
|
7
|
+
*
|
|
8
|
+
* The type of the params body for a method `M` is derived from T[M]['params']
|
|
9
|
+
* The type of the result of calling a method `M` is derived from T[M]['result']
|
|
10
|
+
*/
|
|
11
|
+
export interface Provider<T extends UnknownRpcTypes> {
|
|
12
|
+
request<M extends keyof T>(args: RequestArgs<T, M>): Promise<T[M]['result']>;
|
|
13
|
+
on<E>(event: string, listener: EventListener<E>): Provider<T>;
|
|
14
|
+
emit<E>(event: string, ...args: E[]): boolean;
|
|
15
|
+
removeListener<E>(event: string, listenerToRemove: EventListener<E>): Provider<T>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* An abstract base class for Providers that implements the event handling logic. It maintains a mapping of event names to arrays of listeners and provides methods to register, emit, and remove listeners. The request method is left abstract for subclasses to implement according to their specific RPC transport mechanism.
|
|
19
|
+
*/
|
|
20
|
+
export declare abstract class AbstractProvider<T extends UnknownRpcTypes> implements Provider<T> {
|
|
21
|
+
listeners: {
|
|
22
|
+
[event: string]: EventListener<unknown>[];
|
|
23
|
+
};
|
|
24
|
+
constructor();
|
|
25
|
+
abstract request<M extends keyof T>(args: RequestArgs<T, M>): Promise<T[M]['result']>;
|
|
26
|
+
on<E>(event: string, listener: EventListener<E>): Provider<T>;
|
|
27
|
+
emit<E>(event: string, ...args: E[]): boolean;
|
|
28
|
+
removeListener<E>(event: string, listenerToRemove: EventListener<E>): Provider<T>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEzE,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;AAErD;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,eAAe;IAC/C,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE5E,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7D,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAA;IAC7C,cAAc,CAAC,CAAC,EACZ,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,GACnC,QAAQ,CAAC,CAAC,CAAC,CAAA;CACjB;AAED;;GAEG;AACH,8BAAsB,gBAAgB,CAClC,CAAC,SAAS,eAAe,CAC3B,YAAW,QAAQ,CAAC,CAAC,CAAC;IACpB,SAAS,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,CAAA;;IAMxD,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,EAC9B,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAGnB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAU7D,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO;IAQ7C,cAAc,CAAC,CAAC,EACnB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,GACnC,QAAQ,CAAC,CAAC,CAAC;CASjB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canton-network/core-splice-provider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A JavaScript Splice Provider API (EIP-1193 compliant).",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"typescript": "^5.9.3"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@canton-network/core-rpc-transport": "^0.
|
|
32
|
-
"@canton-network/core-types": "^0.
|
|
33
|
-
"@canton-network/core-wallet-dapp-rpc-client": "^0.
|
|
34
|
-
"@canton-network/core-wallet-
|
|
31
|
+
"@canton-network/core-rpc-transport": "^0.5.0",
|
|
32
|
+
"@canton-network/core-types": "^0.19.0",
|
|
33
|
+
"@canton-network/core-wallet-dapp-remote-rpc-client": "^0.18.0",
|
|
34
|
+
"@canton-network/core-wallet-dapp-rpc-client": "^0.24.0"
|
|
35
35
|
},
|
|
36
36
|
"files": [
|
|
37
37
|
"dist/**"
|
package/dist/SpliceProvider.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { RequestPayload } from '@canton-network/core-types';
|
|
2
|
-
export type EventListener<T> = (...args: T[]) => void;
|
|
3
|
-
export interface SpliceProvider {
|
|
4
|
-
request<T>(args: RequestPayload): Promise<T>;
|
|
5
|
-
on<T>(event: string, listener: EventListener<T>): SpliceProvider;
|
|
6
|
-
emit<T>(event: string, ...args: T[]): boolean;
|
|
7
|
-
removeListener<T>(event: string, listenerToRemove: EventListener<T>): SpliceProvider;
|
|
8
|
-
}
|
|
9
|
-
export declare abstract class SpliceProviderBase implements SpliceProvider {
|
|
10
|
-
listeners: {
|
|
11
|
-
[event: string]: EventListener<unknown>[];
|
|
12
|
-
};
|
|
13
|
-
constructor();
|
|
14
|
-
abstract request<T>(args: RequestPayload): Promise<T>;
|
|
15
|
-
on<T>(event: string, listener: EventListener<T>): SpliceProvider;
|
|
16
|
-
emit<T>(event: string, ...args: T[]): boolean;
|
|
17
|
-
removeListener<T>(event: string, listenerToRemove: EventListener<T>): SpliceProvider;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=SpliceProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SpliceProvider.d.ts","sourceRoot":"","sources":["../src/SpliceProvider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;AAErD,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5C,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc,CAAA;IAChE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAA;IAC7C,cAAc,CAAC,CAAC,EACZ,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,GACnC,cAAc,CAAA;CACpB;AAED,8BAAsB,kBAAmB,YAAW,cAAc;IAC9D,SAAS,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,CAAA;;IAMxD,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAG9C,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc;IAUhE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO;IAQ7C,cAAc,CAAC,CAAC,EACnB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,GACnC,cAAc;CASpB"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { RequestPayload } from '@canton-network/core-types';
|
|
2
|
-
import { SpliceProviderBase } from './SpliceProvider';
|
|
3
|
-
export declare class SpliceProviderHttp extends SpliceProviderBase {
|
|
4
|
-
private url;
|
|
5
|
-
private sessionToken?;
|
|
6
|
-
private client;
|
|
7
|
-
private status?;
|
|
8
|
-
private createClient;
|
|
9
|
-
private openSSE;
|
|
10
|
-
constructor(url: URL, sessionToken?: string);
|
|
11
|
-
request<T>({ method, params }: RequestPayload): Promise<T>;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=SpliceProviderHttp.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SpliceProviderHttp.d.ts","sourceRoot":"","sources":["../src/SpliceProviderHttp.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,cAAc,EAEjB,MAAM,4BAA4B,CAAA;AAMnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAqBrD,qBAAa,kBAAmB,SAAQ,kBAAkB;IA4DlD,OAAO,CAAC,GAAG;IA3Df,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAAC,CAAqB;IAEpC,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,OAAO;gBAkDH,GAAG,EAAE,GAAG,EAChB,YAAY,CAAC,EAAE,MAAM;IA8CZ,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;CAQ1E"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { RequestPayload } from '@canton-network/core-types';
|
|
2
|
-
import { SpliceProviderBase } from './SpliceProvider.js';
|
|
3
|
-
export declare class SpliceProviderWindow extends SpliceProviderBase {
|
|
4
|
-
private client;
|
|
5
|
-
constructor();
|
|
6
|
-
request<T>({ method, params }: RequestPayload): Promise<T>;
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=SpliceProviderWindow.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SpliceProviderWindow.d.ts","sourceRoot":"","sources":["../src/SpliceProviderWindow.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExD,qBAAa,oBAAqB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,MAAM,CAA4B;;IAQ7B,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;CAQ1E"}
|