@iota/graphql-transport 0.18.1 → 0.19.1
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/CHANGELOG.md +48 -0
- package/dist/cjs/generated/queries.d.ts +336 -112
- package/dist/cjs/generated/queries.d.ts.map +1 -1
- package/dist/cjs/generated/queries.js +50 -0
- package/dist/cjs/generated/queries.js.map +2 -2
- package/dist/cjs/graphql-websocket-client.d.ts +84 -0
- package/dist/cjs/graphql-websocket-client.d.ts.map +1 -0
- package/dist/cjs/graphql-websocket-client.js +324 -0
- package/dist/cjs/graphql-websocket-client.js.map +7 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/mappers/bcs.d.ts.map +1 -1
- package/dist/cjs/mappers/bcs.js +11 -3
- package/dist/cjs/mappers/bcs.js.map +2 -2
- package/dist/cjs/mappers/subscription.d.ts +33 -0
- package/dist/cjs/mappers/subscription.d.ts.map +1 -0
- package/dist/cjs/mappers/subscription.js +95 -0
- package/dist/cjs/mappers/subscription.js.map +7 -0
- package/dist/cjs/mappers/util.d.ts +3 -0
- package/dist/cjs/mappers/util.d.ts.map +1 -1
- package/dist/cjs/mappers/util.js +14 -0
- package/dist/cjs/mappers/util.js.map +2 -2
- package/dist/cjs/methods.d.ts.map +1 -1
- package/dist/cjs/methods.js +1 -23
- package/dist/cjs/methods.js.map +2 -2
- package/dist/cjs/transport.d.ts +5 -0
- package/dist/cjs/transport.d.ts.map +1 -1
- package/dist/cjs/transport.js +99 -1
- package/dist/cjs/transport.js.map +2 -2
- package/dist/esm/generated/queries.d.ts +336 -112
- package/dist/esm/generated/queries.d.ts.map +1 -1
- package/dist/esm/generated/queries.js +50 -0
- package/dist/esm/generated/queries.js.map +2 -2
- package/dist/esm/graphql-websocket-client.d.ts +84 -0
- package/dist/esm/graphql-websocket-client.d.ts.map +1 -0
- package/dist/esm/graphql-websocket-client.js +304 -0
- package/dist/esm/graphql-websocket-client.js.map +7 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/mappers/bcs.d.ts.map +1 -1
- package/dist/esm/mappers/bcs.js +11 -3
- package/dist/esm/mappers/bcs.js.map +2 -2
- package/dist/esm/mappers/subscription.d.ts +33 -0
- package/dist/esm/mappers/subscription.d.ts.map +1 -0
- package/dist/esm/mappers/subscription.js +75 -0
- package/dist/esm/mappers/subscription.js.map +7 -0
- package/dist/esm/mappers/util.d.ts +3 -0
- package/dist/esm/mappers/util.d.ts.map +1 -1
- package/dist/esm/mappers/util.js +14 -0
- package/dist/esm/mappers/util.js.map +2 -2
- package/dist/esm/methods.d.ts.map +1 -1
- package/dist/esm/methods.js +2 -25
- package/dist/esm/methods.js.map +2 -2
- package/dist/esm/transport.d.ts +5 -0
- package/dist/esm/transport.d.ts.map +1 -1
- package/dist/esm/transport.js +112 -2
- package/dist/esm/transport.js.map +2 -2
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -9
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { GraphQLDocument } from '@iota/iota-sdk/graphql';
|
|
2
|
+
interface ConnectionInitMessage {
|
|
3
|
+
type: 'connection_init';
|
|
4
|
+
payload?: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
interface SubscribeMessage {
|
|
7
|
+
id: string;
|
|
8
|
+
type: 'subscribe';
|
|
9
|
+
payload: {
|
|
10
|
+
query: string;
|
|
11
|
+
variables?: Record<string, unknown>;
|
|
12
|
+
operationName?: string;
|
|
13
|
+
extensions?: Record<string, unknown>;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
interface CompleteMessage {
|
|
17
|
+
id: string;
|
|
18
|
+
type: 'complete';
|
|
19
|
+
}
|
|
20
|
+
interface PongMessage {
|
|
21
|
+
type: 'pong';
|
|
22
|
+
payload?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
/** The socket or handshake failed, as opposed to the server refusing one operation. */
|
|
25
|
+
export declare class GraphQLWebSocketConnectionError extends Error {
|
|
26
|
+
}
|
|
27
|
+
export type GraphQLSubscriptionVariables = Record<string, unknown>;
|
|
28
|
+
export type GraphQLSubscriptionRequest<T = any> = {
|
|
29
|
+
query: GraphQLDocument;
|
|
30
|
+
/** Resolved on every send, so a resubscribe can carry a resume cursor. */
|
|
31
|
+
variables?: GraphQLSubscriptionVariables | (() => GraphQLSubscriptionVariables | undefined);
|
|
32
|
+
onMessage: (data: T) => void;
|
|
33
|
+
onError?: (errors: Array<{
|
|
34
|
+
message: string;
|
|
35
|
+
}>) => void;
|
|
36
|
+
onComplete?: () => void;
|
|
37
|
+
signal?: AbortSignal;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Configuration options for the GraphQL WebSocket client.
|
|
41
|
+
*/
|
|
42
|
+
export type GraphQLWebSocketClientOptions = {
|
|
43
|
+
/**
|
|
44
|
+
* Custom WebSocket class to use.
|
|
45
|
+
* Defaults to the global WebSocket class, if available.
|
|
46
|
+
*/
|
|
47
|
+
WebSocketConstructor?: typeof WebSocket;
|
|
48
|
+
/**
|
|
49
|
+
* Optional payload to send with the `connection_init` message.
|
|
50
|
+
* Can be used for authentication tokens or other connection-level metadata.
|
|
51
|
+
*/
|
|
52
|
+
connectionParams?: Record<string, unknown> | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Milliseconds to wait for the `connection_ack` message before timing out.
|
|
55
|
+
* @default 30000
|
|
56
|
+
*/
|
|
57
|
+
connectionAckTimeout?: number;
|
|
58
|
+
/**
|
|
59
|
+
* Milliseconds between reconnection attempts.
|
|
60
|
+
* @default 3000
|
|
61
|
+
*/
|
|
62
|
+
reconnectTimeout?: number;
|
|
63
|
+
/**
|
|
64
|
+
* Maximum number of reconnection attempts before giving up.
|
|
65
|
+
* @default 5
|
|
66
|
+
*/
|
|
67
|
+
maxReconnects?: number;
|
|
68
|
+
/**
|
|
69
|
+
* Milliseconds to wait for the server to refuse the operation. graphql-ws does not
|
|
70
|
+
* acknowledge a `subscribe`, so an `error` frame is the only signal. Inside this window it
|
|
71
|
+
* rejects `subscribe()`, after it it goes to `onError`. Messages arrive throughout.
|
|
72
|
+
* @default 250
|
|
73
|
+
*/
|
|
74
|
+
startupErrorGrace?: number;
|
|
75
|
+
};
|
|
76
|
+
export declare class GraphQLWebSocketClient {
|
|
77
|
+
#private;
|
|
78
|
+
constructor(endpoint: string, options?: GraphQLWebSocketClientOptions);
|
|
79
|
+
subscribe<T>(request: GraphQLSubscriptionRequest<T>): Promise<() => Promise<boolean>>;
|
|
80
|
+
send(message: ConnectionInitMessage | SubscribeMessage | CompleteMessage | PongMessage): Promise<WebSocket>;
|
|
81
|
+
close(): void;
|
|
82
|
+
}
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=graphql-websocket-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql-websocket-client.d.ts","sourceRoot":"","sources":["../../src/graphql-websocket-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,UAAU,qBAAqB;IAC3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAOD,UAAU,gBAAgB;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC;CACL;AAiBD,UAAU,eAAe;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;CACpB;AAOD,UAAU,WAAW;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AASD,uFAAuF;AACvF,qBAAa,+BAAgC,SAAQ,KAAK;CAAG;AAE7D,MAAM,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAGnE,MAAM,MAAM,0BAA0B,CAAC,CAAC,GAAG,GAAG,IAAI;IAC9C,KAAK,EAAE,eAAe,CAAC;IACvB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,4BAA4B,GAAG,CAAC,MAAM,4BAA4B,GAAG,SAAS,CAAC,CAAC;IAC5F,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IACxC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,SAAS,CAAC;IACxC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACvD;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAqCF,qBAAa,sBAAsB;;gBASnB,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,6BAAkC;IAYnE,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IA6CrF,IAAI,CACN,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,GAAG,eAAe,GAAG,WAAW,GAClF,OAAO,CAAC,SAAS,CAAC;IAMrB,KAAK,IAAI,IAAI;CA0JhB"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __typeError = (msg) => {
|
|
7
|
+
throw TypeError(msg);
|
|
8
|
+
};
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
22
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
23
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
24
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
25
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
26
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
27
|
+
var __privateWrapper = (obj, member, setter, getter) => ({
|
|
28
|
+
set _(value) {
|
|
29
|
+
__privateSet(obj, member, value, setter);
|
|
30
|
+
},
|
|
31
|
+
get _() {
|
|
32
|
+
return __privateGet(obj, member, getter);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
var graphql_websocket_client_exports = {};
|
|
36
|
+
__export(graphql_websocket_client_exports, {
|
|
37
|
+
GraphQLWebSocketClient: () => GraphQLWebSocketClient,
|
|
38
|
+
GraphQLWebSocketConnectionError: () => GraphQLWebSocketConnectionError
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(graphql_websocket_client_exports);
|
|
41
|
+
var import_graphql = require("graphql");
|
|
42
|
+
var _endpoint, _options, _subscriptionId, _disconnects, _webSocket, _connectionPromise, _subscriptions, _GraphQLWebSocketClient_instances, nextId_fn, setupWebSocket_fn, scheduleReconnect_fn, reconnect_fn, _request, _active, _socket, _startingUp, _startupError;
|
|
43
|
+
class GraphQLWebSocketConnectionError extends Error {
|
|
44
|
+
}
|
|
45
|
+
const DEFAULT_OPTIONS = {
|
|
46
|
+
WebSocketConstructor: typeof WebSocket !== "undefined" ? WebSocket : void 0,
|
|
47
|
+
connectionParams: void 0,
|
|
48
|
+
connectionAckTimeout: 3e4,
|
|
49
|
+
reconnectTimeout: 3e3,
|
|
50
|
+
maxReconnects: 5,
|
|
51
|
+
startupErrorGrace: 250
|
|
52
|
+
};
|
|
53
|
+
function toQueryString(query) {
|
|
54
|
+
if (typeof query === "string") {
|
|
55
|
+
return query;
|
|
56
|
+
}
|
|
57
|
+
return "kind" in query ? (0, import_graphql.print)(query) : String(query);
|
|
58
|
+
}
|
|
59
|
+
function toWebSocketUrl(httpUrl) {
|
|
60
|
+
const url = new URL(httpUrl);
|
|
61
|
+
url.protocol = url.protocol.replace("http", "ws");
|
|
62
|
+
return url.toString();
|
|
63
|
+
}
|
|
64
|
+
class GraphQLWebSocketClient {
|
|
65
|
+
constructor(endpoint, options = {}) {
|
|
66
|
+
__privateAdd(this, _GraphQLWebSocketClient_instances);
|
|
67
|
+
__privateAdd(this, _endpoint);
|
|
68
|
+
__privateAdd(this, _options);
|
|
69
|
+
__privateAdd(this, _subscriptionId, 0);
|
|
70
|
+
__privateAdd(this, _disconnects, 0);
|
|
71
|
+
__privateAdd(this, _webSocket, null);
|
|
72
|
+
__privateAdd(this, _connectionPromise, null);
|
|
73
|
+
__privateAdd(this, _subscriptions, /* @__PURE__ */ new Map());
|
|
74
|
+
__privateSet(this, _options, { ...DEFAULT_OPTIONS, ...options });
|
|
75
|
+
if (!__privateGet(this, _options).WebSocketConstructor) {
|
|
76
|
+
throw new GraphQLWebSocketConnectionError(
|
|
77
|
+
"Missing WebSocket constructor. Provide a WebSocketConstructor option or ensure the global WebSocket is available."
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
__privateSet(this, _endpoint, endpoint.startsWith("ws") ? endpoint : toWebSocketUrl(endpoint));
|
|
81
|
+
}
|
|
82
|
+
async subscribe(request) {
|
|
83
|
+
if (request.signal?.aborted) {
|
|
84
|
+
return async () => false;
|
|
85
|
+
}
|
|
86
|
+
const subscription = new GraphQLSubscription(request);
|
|
87
|
+
const id = __privateMethod(this, _GraphQLWebSocketClient_instances, nextId_fn).call(this);
|
|
88
|
+
__privateGet(this, _subscriptions).set(id, subscription);
|
|
89
|
+
try {
|
|
90
|
+
await subscription.subscribe(this, id);
|
|
91
|
+
} catch (e) {
|
|
92
|
+
__privateGet(this, _subscriptions).delete(id);
|
|
93
|
+
throw e;
|
|
94
|
+
}
|
|
95
|
+
const startupError = await subscription.settleStartup(__privateGet(this, _options).startupErrorGrace);
|
|
96
|
+
if (startupError) {
|
|
97
|
+
__privateGet(this, _subscriptions).delete(id);
|
|
98
|
+
throw new Error(
|
|
99
|
+
`GraphQL subscription was rejected: ${startupError.map((error) => error.message).join(", ")}`
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
const cleanup = async () => {
|
|
103
|
+
const result = await subscription.unsubscribe(this, id);
|
|
104
|
+
__privateGet(this, _subscriptions).delete(id);
|
|
105
|
+
return result;
|
|
106
|
+
};
|
|
107
|
+
if (request.signal?.aborted) {
|
|
108
|
+
await cleanup();
|
|
109
|
+
return async () => false;
|
|
110
|
+
}
|
|
111
|
+
request.signal?.addEventListener("abort", cleanup, { once: true });
|
|
112
|
+
return cleanup;
|
|
113
|
+
}
|
|
114
|
+
async send(message) {
|
|
115
|
+
const ws = await __privateMethod(this, _GraphQLWebSocketClient_instances, setupWebSocket_fn).call(this);
|
|
116
|
+
ws.send(JSON.stringify(message));
|
|
117
|
+
return ws;
|
|
118
|
+
}
|
|
119
|
+
close() {
|
|
120
|
+
for (const subscription of __privateGet(this, _subscriptions).values()) {
|
|
121
|
+
subscription.onComplete();
|
|
122
|
+
}
|
|
123
|
+
__privateGet(this, _subscriptions).clear();
|
|
124
|
+
__privateGet(this, _webSocket)?.close();
|
|
125
|
+
__privateSet(this, _webSocket, null);
|
|
126
|
+
__privateSet(this, _connectionPromise, null);
|
|
127
|
+
__privateSet(this, _disconnects, 0);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
_endpoint = new WeakMap();
|
|
131
|
+
_options = new WeakMap();
|
|
132
|
+
_subscriptionId = new WeakMap();
|
|
133
|
+
_disconnects = new WeakMap();
|
|
134
|
+
_webSocket = new WeakMap();
|
|
135
|
+
_connectionPromise = new WeakMap();
|
|
136
|
+
_subscriptions = new WeakMap();
|
|
137
|
+
_GraphQLWebSocketClient_instances = new WeakSet();
|
|
138
|
+
nextId_fn = function() {
|
|
139
|
+
__privateSet(this, _subscriptionId, __privateGet(this, _subscriptionId) + 1);
|
|
140
|
+
return String(__privateGet(this, _subscriptionId));
|
|
141
|
+
};
|
|
142
|
+
setupWebSocket_fn = function() {
|
|
143
|
+
if (__privateGet(this, _connectionPromise)) {
|
|
144
|
+
return __privateGet(this, _connectionPromise);
|
|
145
|
+
}
|
|
146
|
+
__privateSet(this, _connectionPromise, new Promise((resolve, reject) => {
|
|
147
|
+
const ws = new (__privateGet(this, _options)).WebSocketConstructor(
|
|
148
|
+
__privateGet(this, _endpoint),
|
|
149
|
+
"graphql-transport-ws"
|
|
150
|
+
);
|
|
151
|
+
__privateSet(this, _webSocket, ws);
|
|
152
|
+
const ackTimeout = setTimeout(() => {
|
|
153
|
+
ws.close();
|
|
154
|
+
reject(new GraphQLWebSocketConnectionError("Connection acknowledgement timeout"));
|
|
155
|
+
}, __privateGet(this, _options).connectionAckTimeout);
|
|
156
|
+
let acknowledged = false;
|
|
157
|
+
ws.addEventListener("open", () => {
|
|
158
|
+
const initMessage = {
|
|
159
|
+
type: "connection_init",
|
|
160
|
+
...__privateGet(this, _options).connectionParams ? { payload: __privateGet(this, _options).connectionParams } : {}
|
|
161
|
+
};
|
|
162
|
+
ws.send(JSON.stringify(initMessage));
|
|
163
|
+
});
|
|
164
|
+
ws.addEventListener("message", ({ data }) => {
|
|
165
|
+
let message;
|
|
166
|
+
try {
|
|
167
|
+
message = JSON.parse(data);
|
|
168
|
+
} catch (error) {
|
|
169
|
+
console.error(
|
|
170
|
+
new Error(`Failed to parse GraphQL WebSocket message: ${data}`, {
|
|
171
|
+
cause: error
|
|
172
|
+
})
|
|
173
|
+
);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
switch (message.type) {
|
|
177
|
+
case "connection_ack":
|
|
178
|
+
clearTimeout(ackTimeout);
|
|
179
|
+
acknowledged = true;
|
|
180
|
+
__privateSet(this, _disconnects, 0);
|
|
181
|
+
resolve(ws);
|
|
182
|
+
break;
|
|
183
|
+
case "next":
|
|
184
|
+
__privateGet(this, _subscriptions).get(message.id)?.onMessage(message.payload);
|
|
185
|
+
break;
|
|
186
|
+
case "error":
|
|
187
|
+
__privateGet(this, _subscriptions).get(message.id)?.onError(message.payload);
|
|
188
|
+
__privateGet(this, _subscriptions).delete(message.id);
|
|
189
|
+
break;
|
|
190
|
+
case "complete":
|
|
191
|
+
__privateGet(this, _subscriptions).get(message.id)?.onComplete();
|
|
192
|
+
__privateGet(this, _subscriptions).delete(message.id);
|
|
193
|
+
break;
|
|
194
|
+
case "ping":
|
|
195
|
+
ws.send(JSON.stringify({ type: "pong" }));
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
ws.addEventListener("close", () => {
|
|
200
|
+
if (__privateGet(this, _webSocket) !== ws) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
__privateSet(this, _connectionPromise, null);
|
|
204
|
+
__privateSet(this, _webSocket, null);
|
|
205
|
+
if (!acknowledged) {
|
|
206
|
+
clearTimeout(ackTimeout);
|
|
207
|
+
reject(
|
|
208
|
+
new GraphQLWebSocketConnectionError(
|
|
209
|
+
"WebSocket closed before connection was acknowledged"
|
|
210
|
+
)
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
__privateMethod(this, _GraphQLWebSocketClient_instances, scheduleReconnect_fn).call(this);
|
|
214
|
+
});
|
|
215
|
+
ws.addEventListener("error", () => {
|
|
216
|
+
if (!acknowledged) {
|
|
217
|
+
clearTimeout(ackTimeout);
|
|
218
|
+
reject(new GraphQLWebSocketConnectionError("WebSocket connection error"));
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}));
|
|
222
|
+
return __privateGet(this, _connectionPromise);
|
|
223
|
+
};
|
|
224
|
+
scheduleReconnect_fn = function() {
|
|
225
|
+
const live = [...__privateGet(this, _subscriptions).values()].filter(
|
|
226
|
+
(subscription) => subscription.isActive
|
|
227
|
+
);
|
|
228
|
+
if (live.length === 0) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
__privateWrapper(this, _disconnects)._++;
|
|
232
|
+
if (__privateGet(this, _disconnects) > __privateGet(this, _options).maxReconnects) {
|
|
233
|
+
for (const subscription of live) {
|
|
234
|
+
subscription.onError([{ message: "WebSocket connection lost" }]);
|
|
235
|
+
}
|
|
236
|
+
__privateGet(this, _subscriptions).clear();
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
setTimeout(() => {
|
|
240
|
+
__privateMethod(this, _GraphQLWebSocketClient_instances, reconnect_fn).call(this);
|
|
241
|
+
}, __privateGet(this, _options).reconnectTimeout);
|
|
242
|
+
};
|
|
243
|
+
reconnect_fn = async function() {
|
|
244
|
+
const entries = [...__privateGet(this, _subscriptions).entries()].filter(
|
|
245
|
+
([, subscription]) => subscription.socket !== __privateGet(this, _webSocket)
|
|
246
|
+
);
|
|
247
|
+
await Promise.allSettled(
|
|
248
|
+
entries.map(([id, subscription]) => subscription.subscribe(this, id))
|
|
249
|
+
);
|
|
250
|
+
};
|
|
251
|
+
class GraphQLSubscription {
|
|
252
|
+
constructor(request) {
|
|
253
|
+
// oxlint-disable-next-line @typescript-eslint/no-explicit-any
|
|
254
|
+
__privateAdd(this, _request);
|
|
255
|
+
__privateAdd(this, _active, false);
|
|
256
|
+
__privateAdd(this, _socket, null);
|
|
257
|
+
__privateAdd(this, _startingUp, true);
|
|
258
|
+
__privateAdd(this, _startupError, null);
|
|
259
|
+
__privateSet(this, _request, request);
|
|
260
|
+
}
|
|
261
|
+
get isActive() {
|
|
262
|
+
return __privateGet(this, _active);
|
|
263
|
+
}
|
|
264
|
+
/** The socket this operation's `subscribe` frame was last sent on. */
|
|
265
|
+
get socket() {
|
|
266
|
+
return __privateGet(this, _socket);
|
|
267
|
+
}
|
|
268
|
+
async subscribe(client, id) {
|
|
269
|
+
const variables = typeof __privateGet(this, _request).variables === "function" ? __privateGet(this, _request).variables() : __privateGet(this, _request).variables;
|
|
270
|
+
__privateSet(this, _socket, await client.send({
|
|
271
|
+
id,
|
|
272
|
+
type: "subscribe",
|
|
273
|
+
payload: {
|
|
274
|
+
query: toQueryString(__privateGet(this, _request).query),
|
|
275
|
+
...variables ? { variables } : {}
|
|
276
|
+
}
|
|
277
|
+
}));
|
|
278
|
+
__privateSet(this, _active, true);
|
|
279
|
+
}
|
|
280
|
+
async unsubscribe(client, id) {
|
|
281
|
+
if (!__privateGet(this, _active)) return false;
|
|
282
|
+
__privateSet(this, _active, false);
|
|
283
|
+
try {
|
|
284
|
+
await client.send({ id, type: "complete" });
|
|
285
|
+
return true;
|
|
286
|
+
} catch {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
onMessage(payload) {
|
|
291
|
+
if (!__privateGet(this, _active)) return;
|
|
292
|
+
if (payload.errors && payload.errors.length > 0) {
|
|
293
|
+
__privateGet(this, _request).onError?.(payload.errors);
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (payload.data != null) {
|
|
297
|
+
__privateGet(this, _request).onMessage(payload.data);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/** Closes the startup window and reports an error the server sent inside it, if any. */
|
|
301
|
+
async settleStartup(grace) {
|
|
302
|
+
await new Promise((resolve) => setTimeout(resolve, grace));
|
|
303
|
+
__privateSet(this, _startingUp, false);
|
|
304
|
+
return __privateGet(this, _startupError);
|
|
305
|
+
}
|
|
306
|
+
onError(errors) {
|
|
307
|
+
__privateSet(this, _active, false);
|
|
308
|
+
if (__privateGet(this, _startingUp)) {
|
|
309
|
+
__privateSet(this, _startupError, errors);
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
__privateGet(this, _request).onError?.(errors);
|
|
313
|
+
}
|
|
314
|
+
onComplete() {
|
|
315
|
+
__privateSet(this, _active, false);
|
|
316
|
+
__privateGet(this, _request).onComplete?.();
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
_request = new WeakMap();
|
|
320
|
+
_active = new WeakMap();
|
|
321
|
+
_socket = new WeakMap();
|
|
322
|
+
_startingUp = new WeakMap();
|
|
323
|
+
_startupError = new WeakMap();
|
|
324
|
+
//# sourceMappingURL=graphql-websocket-client.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/graphql-websocket-client.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) 2026 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { GraphQLDocument } from '@iota/iota-sdk/graphql';\nimport { print } from 'graphql';\n\ninterface ConnectionInitMessage {\n type: 'connection_init';\n payload?: Record<string, unknown>;\n}\n\ninterface ConnectionAckMessage {\n type: 'connection_ack';\n payload?: Record<string, unknown>;\n}\n\ninterface SubscribeMessage {\n id: string;\n type: 'subscribe';\n payload: {\n query: string;\n variables?: Record<string, unknown>;\n operationName?: string;\n extensions?: Record<string, unknown>;\n };\n}\n\ninterface NextMessage {\n id: string;\n type: 'next';\n payload: {\n data?: unknown;\n errors?: Array<{ message: string }>;\n };\n}\n\ninterface ErrorMessage {\n id: string;\n type: 'error';\n payload: Array<{ message: string }>;\n}\n\ninterface CompleteMessage {\n id: string;\n type: 'complete';\n}\n\ninterface PingMessage {\n type: 'ping';\n payload?: Record<string, unknown>;\n}\n\ninterface PongMessage {\n type: 'pong';\n payload?: Record<string, unknown>;\n}\n\ntype ServerMessage =\n | ConnectionAckMessage\n | NextMessage\n | ErrorMessage\n | CompleteMessage\n | PingMessage;\n\n/** The socket or handshake failed, as opposed to the server refusing one operation. */\nexport class GraphQLWebSocketConnectionError extends Error {}\n\nexport type GraphQLSubscriptionVariables = Record<string, unknown>;\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type GraphQLSubscriptionRequest<T = any> = {\n query: GraphQLDocument;\n /** Resolved on every send, so a resubscribe can carry a resume cursor. */\n variables?: GraphQLSubscriptionVariables | (() => GraphQLSubscriptionVariables | undefined);\n onMessage: (data: T) => void;\n onError?: (errors: Array<{ message: string }>) => void;\n onComplete?: () => void;\n signal?: AbortSignal;\n};\n\n/**\n * Configuration options for the GraphQL WebSocket client.\n */\nexport type GraphQLWebSocketClientOptions = {\n /**\n * Custom WebSocket class to use.\n * Defaults to the global WebSocket class, if available.\n */\n WebSocketConstructor?: typeof WebSocket;\n /**\n * Optional payload to send with the `connection_init` message.\n * Can be used for authentication tokens or other connection-level metadata.\n */\n connectionParams?: Record<string, unknown> | undefined;\n /**\n * Milliseconds to wait for the `connection_ack` message before timing out.\n * @default 30000\n */\n connectionAckTimeout?: number;\n /**\n * Milliseconds between reconnection attempts.\n * @default 3000\n */\n reconnectTimeout?: number;\n /**\n * Maximum number of reconnection attempts before giving up.\n * @default 5\n */\n maxReconnects?: number;\n /**\n * Milliseconds to wait for the server to refuse the operation. graphql-ws does not\n * acknowledge a `subscribe`, so an `error` frame is the only signal. Inside this window it\n * rejects `subscribe()`, after it it goes to `onError`. Messages arrive throughout.\n * @default 250\n */\n startupErrorGrace?: number;\n};\n\ntype ResolvedGraphQLWebSocketClientOptions = {\n WebSocketConstructor: typeof WebSocket;\n connectionParams: Record<string, unknown> | undefined;\n connectionAckTimeout: number;\n reconnectTimeout: number;\n maxReconnects: number;\n startupErrorGrace: number;\n};\n\nconst DEFAULT_OPTIONS: ResolvedGraphQLWebSocketClientOptions = {\n WebSocketConstructor: (typeof WebSocket !== 'undefined'\n ? WebSocket\n : undefined) as typeof WebSocket,\n connectionParams: undefined,\n connectionAckTimeout: 30_000,\n reconnectTimeout: 3_000,\n maxReconnects: 5,\n startupErrorGrace: 250,\n};\n\n/** Codegen's string-mode documents stringify themselves; only a real AST needs printing. */\nfunction toQueryString(query: GraphQLDocument): string {\n if (typeof query === 'string') {\n return query;\n }\n\n return 'kind' in query ? print(query) : String(query);\n}\n\nfunction toWebSocketUrl(httpUrl: string): string {\n const url = new URL(httpUrl);\n url.protocol = url.protocol.replace('http', 'ws');\n return url.toString();\n}\n\nexport class GraphQLWebSocketClient {\n #endpoint: string;\n #options: ResolvedGraphQLWebSocketClientOptions;\n #subscriptionId = 0;\n #disconnects = 0;\n #webSocket: WebSocket | null = null;\n #connectionPromise: Promise<WebSocket> | null = null;\n #subscriptions = new Map<string, GraphQLSubscription>();\n\n constructor(endpoint: string, options: GraphQLWebSocketClientOptions = {}) {\n this.#options = { ...DEFAULT_OPTIONS, ...options };\n\n if (!this.#options.WebSocketConstructor) {\n throw new GraphQLWebSocketConnectionError(\n 'Missing WebSocket constructor. Provide a WebSocketConstructor option or ensure the global WebSocket is available.',\n );\n }\n\n this.#endpoint = endpoint.startsWith('ws') ? endpoint : toWebSocketUrl(endpoint);\n }\n\n async subscribe<T>(request: GraphQLSubscriptionRequest<T>): Promise<() => Promise<boolean>> {\n if (request.signal?.aborted) {\n return async () => false;\n }\n\n const subscription = new GraphQLSubscription(request);\n const id = this.#nextId();\n this.#subscriptions.set(id, subscription);\n\n try {\n await subscription.subscribe(this, id);\n } catch (e) {\n this.#subscriptions.delete(id);\n throw e;\n }\n\n const startupError = await subscription.settleStartup(this.#options.startupErrorGrace);\n\n if (startupError) {\n this.#subscriptions.delete(id);\n throw new Error(\n `GraphQL subscription was rejected: ${startupError\n .map((error) => error.message)\n .join(', ')}`,\n );\n }\n\n const cleanup = async () => {\n const result = await subscription.unsubscribe(this, id);\n this.#subscriptions.delete(id);\n return result;\n };\n\n // A listener added to an already-aborted signal never runs, and the handshake\n // above is awaited.\n if (request.signal?.aborted) {\n await cleanup();\n return async () => false;\n }\n\n request.signal?.addEventListener('abort', cleanup, { once: true });\n\n return cleanup;\n }\n\n async send(\n message: ConnectionInitMessage | SubscribeMessage | CompleteMessage | PongMessage,\n ): Promise<WebSocket> {\n const ws = await this.#setupWebSocket();\n ws.send(JSON.stringify(message));\n return ws;\n }\n\n close(): void {\n for (const subscription of this.#subscriptions.values()) {\n subscription.onComplete();\n }\n this.#subscriptions.clear();\n this.#webSocket?.close();\n this.#webSocket = null;\n this.#connectionPromise = null;\n this.#disconnects = 0;\n }\n\n #nextId(): string {\n this.#subscriptionId += 1;\n return String(this.#subscriptionId);\n }\n\n #setupWebSocket(): Promise<WebSocket> {\n if (this.#connectionPromise) {\n return this.#connectionPromise;\n }\n\n this.#connectionPromise = new Promise<WebSocket>((resolve, reject) => {\n const ws = new this.#options.WebSocketConstructor(\n this.#endpoint,\n 'graphql-transport-ws',\n );\n this.#webSocket = ws;\n\n // Timeout for the connection_ack\n const ackTimeout = setTimeout(() => {\n ws.close();\n reject(new GraphQLWebSocketConnectionError('Connection acknowledgement timeout'));\n }, this.#options.connectionAckTimeout);\n\n let acknowledged = false;\n\n ws.addEventListener('open', () => {\n const initMessage: ConnectionInitMessage = {\n type: 'connection_init',\n ...(this.#options.connectionParams\n ? { payload: this.#options.connectionParams }\n : {}),\n };\n ws.send(JSON.stringify(initMessage));\n });\n\n ws.addEventListener('message', ({ data }: { data: string }) => {\n let message: ServerMessage;\n try {\n message = JSON.parse(data) as ServerMessage;\n } catch (error) {\n console.error(\n new Error(`Failed to parse GraphQL WebSocket message: ${data}`, {\n cause: error,\n }),\n );\n return;\n }\n\n switch (message.type) {\n case 'connection_ack':\n clearTimeout(ackTimeout);\n acknowledged = true;\n this.#disconnects = 0;\n resolve(ws);\n break;\n\n case 'next':\n this.#subscriptions.get(message.id)?.onMessage(message.payload);\n break;\n\n case 'error':\n this.#subscriptions.get(message.id)?.onError(message.payload);\n this.#subscriptions.delete(message.id);\n break;\n\n case 'complete':\n this.#subscriptions.get(message.id)?.onComplete();\n this.#subscriptions.delete(message.id);\n break;\n\n case 'ping':\n // Respond to server keep-alive\n ws.send(JSON.stringify({ type: 'pong' } satisfies PongMessage));\n break;\n }\n });\n\n ws.addEventListener('close', () => {\n if (this.#webSocket !== ws) {\n return;\n }\n\n this.#connectionPromise = null;\n this.#webSocket = null;\n\n if (!acknowledged) {\n clearTimeout(ackTimeout);\n reject(\n new GraphQLWebSocketConnectionError(\n 'WebSocket closed before connection was acknowledged',\n ),\n );\n }\n\n this.#scheduleReconnect();\n });\n\n ws.addEventListener('error', () => {\n if (!acknowledged) {\n clearTimeout(ackTimeout);\n reject(new GraphQLWebSocketConnectionError('WebSocket connection error'));\n }\n });\n });\n\n return this.#connectionPromise;\n }\n\n #scheduleReconnect(): void {\n const live = [...this.#subscriptions.values()].filter(\n (subscription) => subscription.isActive,\n );\n\n if (live.length === 0) {\n return;\n }\n\n this.#disconnects++;\n\n if (this.#disconnects > this.#options.maxReconnects) {\n for (const subscription of live) {\n subscription.onError([{ message: 'WebSocket connection lost' }]);\n }\n this.#subscriptions.clear();\n return;\n }\n\n setTimeout(() => {\n this.#reconnect();\n }, this.#options.reconnectTimeout);\n }\n\n async #reconnect(): Promise<void> {\n // A subscribe() during the reconnect delay is already live on the new socket.\n // A duplicate id makes graphql-transport-ws close the connection with 4409.\n const entries = [...this.#subscriptions.entries()].filter(\n ([, subscription]) => subscription.socket !== this.#webSocket,\n );\n\n await Promise.allSettled(\n entries.map(([id, subscription]) => subscription.subscribe(this, id)),\n );\n }\n}\n\nclass GraphQLSubscription {\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n #request: GraphQLSubscriptionRequest<any>;\n #active = false;\n #socket: WebSocket | null = null;\n #startingUp = true;\n #startupError: Array<{ message: string }> | null = null;\n\n constructor(request: GraphQLSubscriptionRequest) {\n this.#request = request;\n }\n\n get isActive(): boolean {\n return this.#active;\n }\n\n /** The socket this operation's `subscribe` frame was last sent on. */\n get socket(): WebSocket | null {\n return this.#socket;\n }\n\n async subscribe(client: GraphQLWebSocketClient, id: string): Promise<void> {\n const variables =\n typeof this.#request.variables === 'function'\n ? this.#request.variables()\n : this.#request.variables;\n\n this.#socket = await client.send({\n id,\n type: 'subscribe',\n payload: {\n query: toQueryString(this.#request.query),\n ...(variables ? { variables } : {}),\n },\n });\n this.#active = true;\n }\n\n async unsubscribe(client: GraphQLWebSocketClient, id: string): Promise<boolean> {\n if (!this.#active) return false;\n this.#active = false;\n try {\n await client.send({ id, type: 'complete' });\n return true;\n } catch {\n return false;\n }\n }\n\n onMessage(payload: NextMessage['payload']): void {\n if (!this.#active) return;\n\n if (payload.errors && payload.errors.length > 0) {\n this.#request.onError?.(payload.errors);\n return;\n }\n\n if (payload.data != null) {\n this.#request.onMessage(payload.data);\n }\n }\n\n /** Closes the startup window and reports an error the server sent inside it, if any. */\n async settleStartup(grace: number): Promise<Array<{ message: string }> | null> {\n await new Promise((resolve) => setTimeout(resolve, grace));\n this.#startingUp = false;\n return this.#startupError;\n }\n\n onError(errors: ErrorMessage['payload']): void {\n this.#active = false;\n\n if (this.#startingUp) {\n this.#startupError = errors;\n return;\n }\n\n this.#request.onError?.(errors);\n }\n\n onComplete(): void {\n this.#active = false;\n this.#request.onComplete?.();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/cjs/index.d.ts
CHANGED
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,+BAA+B,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -16,4 +16,5 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
16
16
|
var index_exports = {};
|
|
17
17
|
module.exports = __toCommonJS(index_exports);
|
|
18
18
|
__reExport(index_exports, require("./transport.js"), module.exports);
|
|
19
|
+
__reExport(index_exports, require("./graphql-websocket-client.js"), module.exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from './transport.js';\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAIA,0BAAc,2BAJd;",
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nexport * from './transport.js';\nexport * from './graphql-websocket-client.js';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAIA,0BAAc,2BAJd;AAKA,0BAAc,0CALd;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bcs.d.ts","sourceRoot":"","sources":["../../../src/mappers/bcs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"bcs.d.ts","sourceRoot":"","sources":["../../../src/mappers/bcs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAuDhE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,UAGjE"}
|
package/dist/cjs/mappers/bcs.js
CHANGED
|
@@ -57,12 +57,20 @@ function layoutToBcs(layout) {
|
|
|
57
57
|
if (structName === "0x2::object::ID") {
|
|
58
58
|
struct = struct.transform({
|
|
59
59
|
input: (id) => typeof id === "string" ? { bytes: id } : id,
|
|
60
|
-
output: (id) => id.
|
|
60
|
+
output: (id) => id.bytes
|
|
61
61
|
});
|
|
62
|
-
return struct;
|
|
63
62
|
}
|
|
63
|
+
if (structName === "0x1::string::String" || structName === "0x1::ascii::String") {
|
|
64
|
+
const encoder = new TextEncoder();
|
|
65
|
+
const decoder = new TextDecoder();
|
|
66
|
+
struct = struct.transform({
|
|
67
|
+
input: (str) => typeof str === "string" ? { bytes: Array.from(encoder.encode(str)) } : str,
|
|
68
|
+
output: (obj) => decoder.decode(Uint8Array.from(obj.bytes))
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return struct;
|
|
64
72
|
}
|
|
65
|
-
throw new Error(`Unknown layout: ${layout}`);
|
|
73
|
+
throw new Error(`Unknown layout: ${JSON.stringify(layout)}`);
|
|
66
74
|
}
|
|
67
75
|
function mapJsonToBcs(json, layout) {
|
|
68
76
|
const schema = layoutToBcs(layout);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/mappers/bcs.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { toBase64 } from '@iota/bcs';\nimport type { BcsType } from '@iota/bcs';\nimport { bcs } from '@iota/iota-sdk/bcs';\n\nimport type { MoveTypeLayout } from './move.js';\nimport { toShortTypeString } from './util.js';\n\nexport function layoutToBcs(layout: MoveTypeLayout): BcsType<any> {\n switch (layout) {\n case 'address':\n return bcs.Address;\n case 'bool':\n return bcs.Bool;\n case 'u8':\n return bcs.U8;\n case 'u16':\n return bcs.U16;\n case 'u32':\n return bcs.U32;\n case 'u64':\n return bcs.U64;\n case 'u128':\n return bcs.U128;\n case 'u256':\n return bcs.U256;\n }\n\n if ('vector' in layout) {\n return bcs.vector(layoutToBcs(layout.vector));\n }\n\n if ('struct' in layout) {\n const fields: Record<string, BcsType<any>> = {};\n\n for (const { name, layout: field } of layout.struct.fields) {\n fields[name] = layoutToBcs(field);\n }\n\n let struct = bcs.struct(layout.struct.type, fields);\n const structName = toShortTypeString(layout.struct.type);\n\n if (structName === '0x2::object::ID') {\n struct = struct.transform({\n input: (id
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,iBAAyB;AAEzB,IAAAA,cAAoB;AAGpB,kBAAkC;AAE3B,SAAS,YAAY,QAAsC;AAC9D,UAAQ,QAAQ;AAAA,IACZ,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,EACnB;AAEA,MAAI,YAAY,QAAQ;AACpB,WAAO,gBAAI,OAAO,YAAY,OAAO,MAAM,CAAC;AAAA,EAChD;AAEA,MAAI,YAAY,QAAQ;AACpB,UAAM,SAAuC,CAAC;AAE9C,eAAW,EAAE,MAAM,QAAQ,MAAM,KAAK,OAAO,OAAO,QAAQ;AACxD,aAAO,IAAI,IAAI,YAAY,KAAK;AAAA,IACpC;AAEA,QAAI,
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { toBase64 } from '@iota/bcs';\nimport type { BcsType } from '@iota/bcs';\nimport { bcs } from '@iota/iota-sdk/bcs';\n\nimport type { MoveTypeLayout } from './move.js';\nimport { toShortTypeString } from './util.js';\n\nexport function layoutToBcs(layout: MoveTypeLayout): BcsType<any> {\n switch (layout) {\n case 'address':\n return bcs.Address;\n case 'bool':\n return bcs.Bool;\n case 'u8':\n return bcs.U8;\n case 'u16':\n return bcs.U16;\n case 'u32':\n return bcs.U32;\n case 'u64':\n return bcs.U64;\n case 'u128':\n return bcs.U128;\n case 'u256':\n return bcs.U256;\n }\n\n if ('vector' in layout) {\n return bcs.vector(layoutToBcs(layout.vector));\n }\n\n if ('struct' in layout) {\n const fields: Record<string, BcsType<any>> = {};\n\n for (const { name, layout: field } of layout.struct.fields) {\n fields[name] = layoutToBcs(field);\n }\n\n let struct: BcsType<any> = bcs.struct(layout.struct.type, fields);\n const structName = toShortTypeString(layout.struct.type);\n\n if (structName === '0x2::object::ID') {\n struct = struct.transform({\n input: (id) => (typeof id === 'string' ? { bytes: id } : id) as never,\n output: (id) => id.bytes,\n });\n }\n\n if (structName === '0x1::string::String' || structName === '0x1::ascii::String') {\n const encoder = new TextEncoder();\n const decoder = new TextDecoder();\n struct = struct.transform({\n input: (str) =>\n typeof str === 'string' ? { bytes: Array.from(encoder.encode(str)) } : str,\n output: (obj) => decoder.decode(Uint8Array.from(obj.bytes)),\n });\n }\n\n return struct;\n }\n\n throw new Error(`Unknown layout: ${JSON.stringify(layout)}`);\n}\n\nexport function mapJsonToBcs(json: unknown, layout: MoveTypeLayout) {\n const schema = layoutToBcs(layout);\n return toBase64(schema.serialize(json).toBytes());\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,iBAAyB;AAEzB,IAAAA,cAAoB;AAGpB,kBAAkC;AAE3B,SAAS,YAAY,QAAsC;AAC9D,UAAQ,QAAQ;AAAA,IACZ,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,IACf,KAAK;AACD,aAAO,gBAAI;AAAA,EACnB;AAEA,MAAI,YAAY,QAAQ;AACpB,WAAO,gBAAI,OAAO,YAAY,OAAO,MAAM,CAAC;AAAA,EAChD;AAEA,MAAI,YAAY,QAAQ;AACpB,UAAM,SAAuC,CAAC;AAE9C,eAAW,EAAE,MAAM,QAAQ,MAAM,KAAK,OAAO,OAAO,QAAQ;AACxD,aAAO,IAAI,IAAI,YAAY,KAAK;AAAA,IACpC;AAEA,QAAI,SAAuB,gBAAI,OAAO,OAAO,OAAO,MAAM,MAAM;AAChE,UAAM,iBAAa,+BAAkB,OAAO,OAAO,IAAI;AAEvD,QAAI,eAAe,mBAAmB;AAClC,eAAS,OAAO,UAAU;AAAA,QACtB,OAAO,CAAC,OAAQ,OAAO,OAAO,WAAW,EAAE,OAAO,GAAG,IAAI;AAAA,QACzD,QAAQ,CAAC,OAAO,GAAG;AAAA,MACvB,CAAC;AAAA,IACL;AAEA,QAAI,eAAe,yBAAyB,eAAe,sBAAsB;AAC7E,YAAM,UAAU,IAAI,YAAY;AAChC,YAAM,UAAU,IAAI,YAAY;AAChC,eAAS,OAAO,UAAU;AAAA,QACtB,OAAO,CAAC,QACJ,OAAO,QAAQ,WAAW,EAAE,OAAO,MAAM,KAAK,QAAQ,OAAO,GAAG,CAAC,EAAE,IAAI;AAAA,QAC3E,QAAQ,CAAC,QAAQ,QAAQ,OAAO,WAAW,KAAK,IAAI,KAAK,CAAC;AAAA,MAC9D,CAAC;AAAA,IACL;AAEA,WAAO;AAAA,EACX;AAEA,QAAM,IAAI,MAAM,mBAAmB,KAAK,UAAU,MAAM,CAAC,EAAE;AAC/D;AAEO,SAAS,aAAa,MAAe,QAAwB;AAChE,QAAM,SAAS,YAAY,MAAM;AACjC,aAAO,qBAAS,OAAO,UAAU,IAAI,EAAE,QAAQ,CAAC;AACpD;",
|
|
6
6
|
"names": ["import_bcs"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IotaTransactionBlockResponse } from '@iota/iota-sdk/client';
|
|
2
|
+
import type { SubscribeEventsSubscription, SubscribeTransactionsSubscription, SubscriptionEventFilter, SubscriptionTransactionFilter } from '../generated/queries.js';
|
|
3
|
+
type SubscriptionEvent = Extract<SubscribeEventsSubscription['events'], {
|
|
4
|
+
__typename: 'Event';
|
|
5
|
+
}>;
|
|
6
|
+
type SubscriptionTransaction = Extract<SubscribeTransactionsSubscription['transactions'], {
|
|
7
|
+
__typename: 'TransactionBlock';
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* `SubscriptionEventFilter` only supports `emittingModule`, the module that emitted the
|
|
11
|
+
* event. `MoveEventModule` selects the module the struct was declared in, a different set.
|
|
12
|
+
* An empty filter means no filter; anything inexpressible throws so the caller falls back.
|
|
13
|
+
*/
|
|
14
|
+
export declare function mapRpcEventFilterToGraphQL(rpcFilter: Record<string, unknown>): SubscriptionEventFilter | undefined;
|
|
15
|
+
export declare function mapRpcTransactionFilterToGraphQL(rpcFilter: Record<string, unknown>): SubscriptionTransactionFilter | undefined;
|
|
16
|
+
export declare function mapSubscriptionEvent(event: SubscriptionEvent): {
|
|
17
|
+
bcs: any;
|
|
18
|
+
bcsEncoding: string;
|
|
19
|
+
id: {
|
|
20
|
+
eventSeq: string;
|
|
21
|
+
txDigest: string;
|
|
22
|
+
};
|
|
23
|
+
packageId: any;
|
|
24
|
+
parsedJson: any;
|
|
25
|
+
sender: any;
|
|
26
|
+
timestampMs: string | undefined;
|
|
27
|
+
transactionModule: string;
|
|
28
|
+
type: string;
|
|
29
|
+
};
|
|
30
|
+
/** `iotax_subscribeTransaction` delivers `TransactionEffects`, decoded from the effects BCS. */
|
|
31
|
+
export declare function mapSubscriptionTransaction(tx: SubscriptionTransaction): IotaTransactionBlockResponse['effects'];
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=subscription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../../src/mappers/subscription.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,4BAA4B,EAAuB,MAAM,uBAAuB,CAAC;AAE/F,OAAO,KAAK,EACR,2BAA2B,EAC3B,iCAAiC,EACjC,uBAAuB,EACvB,6BAA6B,EAChC,MAAM,yBAAyB,CAAC;AAKjC,KAAK,iBAAiB,GAAG,OAAO,CAAC,2BAA2B,CAAC,QAAQ,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAEjG,KAAK,uBAAuB,GAAG,OAAO,CAClC,iCAAiC,CAAC,cAAc,CAAC,EACjD;IAAE,UAAU,EAAE,kBAAkB,CAAA;CAAE,CACrC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,0BAA0B,CACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,uBAAuB,GAAG,SAAS,CAiBrC;AAED,wBAAgB,gCAAgC,CAC5C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,6BAA6B,GAAG,SAAS,CA4C3C;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB;;;;;;;;;;;;;EAmB5D;AAED,gGAAgG;AAChG,wBAAgB,0BAA0B,CACtC,EAAE,EAAE,uBAAuB,GAC5B,4BAA4B,CAAC,SAAS,CAAC,CAEzC"}
|