@astrox/agent 0.0.20 → 0.0.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. package/package.json +4 -4
  2. package/lib/cjs/actor.d.ts +0 -126
  3. package/lib/cjs/actor.js +0 -207
  4. package/lib/cjs/actor.js.map +0 -1
  5. package/lib/cjs/agent/api.d.ts +0 -140
  6. package/lib/cjs/agent/api.js +0 -16
  7. package/lib/cjs/agent/api.js.map +0 -1
  8. package/lib/cjs/agent/http/index.d.ts +0 -49
  9. package/lib/cjs/agent/http/index.js +0 -355
  10. package/lib/cjs/agent/http/index.js.map +0 -1
  11. package/lib/cjs/agent/http/transforms.d.ts +0 -20
  12. package/lib/cjs/agent/http/transforms.js +0 -70
  13. package/lib/cjs/agent/http/transforms.js.map +0 -1
  14. package/lib/cjs/agent/http/types.d.ts +0 -77
  15. package/lib/cjs/agent/http/types.js +0 -24
  16. package/lib/cjs/agent/http/types.js.map +0 -1
  17. package/lib/cjs/agent/index.d.ts +0 -7
  18. package/lib/cjs/agent/index.js +0 -42
  19. package/lib/cjs/agent/index.js.map +0 -1
  20. package/lib/cjs/agent/proxy.d.ts +0 -85
  21. package/lib/cjs/agent/proxy.js +0 -159
  22. package/lib/cjs/agent/proxy.js.map +0 -1
  23. package/lib/cjs/auth.d.ts +0 -87
  24. package/lib/cjs/auth.js +0 -70
  25. package/lib/cjs/auth.js.map +0 -1
  26. package/lib/cjs/canisters/asset.d.ts +0 -10
  27. package/lib/cjs/canisters/asset.js +0 -18
  28. package/lib/cjs/canisters/asset.js.map +0 -1
  29. package/lib/cjs/canisters/asset_idl.d.ts +0 -7
  30. package/lib/cjs/canisters/asset_idl.js +0 -14
  31. package/lib/cjs/canisters/asset_idl.js.map +0 -1
  32. package/lib/cjs/canisters/management.d.ts +0 -33
  33. package/lib/cjs/canisters/management.js +0 -30
  34. package/lib/cjs/canisters/management.js.map +0 -1
  35. package/lib/cjs/canisters/management_idl.d.ts +0 -7
  36. package/lib/cjs/canisters/management_idl.js +0 -29
  37. package/lib/cjs/canisters/management_idl.js.map +0 -1
  38. package/lib/cjs/cbor.d.ts +0 -9
  39. package/lib/cjs/cbor.js +0 -138
  40. package/lib/cjs/cbor.js.map +0 -1
  41. package/lib/cjs/certificate.d.ts +0 -43
  42. package/lib/cjs/certificate.js +0 -227
  43. package/lib/cjs/certificate.js.map +0 -1
  44. package/lib/cjs/errors.d.ts +0 -8
  45. package/lib/cjs/errors.js +0 -13
  46. package/lib/cjs/errors.js.map +0 -1
  47. package/lib/cjs/index.d.ts +0 -52
  48. package/lib/cjs/index.js +0 -38
  49. package/lib/cjs/index.js.map +0 -1
  50. package/lib/cjs/polling/index.d.ts +0 -16
  51. package/lib/cjs/polling/index.js +0 -81
  52. package/lib/cjs/polling/index.js.map +0 -1
  53. package/lib/cjs/polling/strategy.d.ts +0 -47
  54. package/lib/cjs/polling/strategy.js +0 -106
  55. package/lib/cjs/polling/strategy.js.map +0 -1
  56. package/lib/cjs/request_id.d.ts +0 -15
  57. package/lib/cjs/request_id.js +0 -89
  58. package/lib/cjs/request_id.js.map +0 -1
  59. package/lib/cjs/utils/bls.d.ts +0 -9
  60. package/lib/cjs/utils/bls.js +0 -65
  61. package/lib/cjs/utils/bls.js.map +0 -1
  62. package/lib/cjs/utils/buffer.d.ts +0 -16
  63. package/lib/cjs/utils/buffer.js +0 -59
  64. package/lib/cjs/utils/buffer.js.map +0 -1
  65. package/lib/cjs/vendor/bls/bls.d.ts +0 -28
  66. package/lib/cjs/vendor/bls/bls.js +0 -894
  67. package/lib/cjs/vendor/bls/bls.js.map +0 -1
  68. package/lib/esm/actor.d.ts +0 -126
  69. package/lib/esm/actor.js +0 -200
  70. package/lib/esm/actor.js.map +0 -1
  71. package/lib/esm/agent/api.d.ts +0 -140
  72. package/lib/esm/agent/api.js +0 -13
  73. package/lib/esm/agent/api.js.map +0 -1
  74. package/lib/esm/agent/http/index.d.ts +0 -49
  75. package/lib/esm/agent/http/index.js +0 -328
  76. package/lib/esm/agent/http/index.js.map +0 -1
  77. package/lib/esm/agent/http/transforms.d.ts +0 -20
  78. package/lib/esm/agent/http/transforms.js +0 -45
  79. package/lib/esm/agent/http/transforms.js.map +0 -1
  80. package/lib/esm/agent/http/types.d.ts +0 -77
  81. package/lib/esm/agent/http/types.js +0 -20
  82. package/lib/esm/agent/http/types.js.map +0 -1
  83. package/lib/esm/agent/index.d.ts +0 -7
  84. package/lib/esm/agent/index.js +0 -27
  85. package/lib/esm/agent/index.js.map +0 -1
  86. package/lib/esm/agent/proxy.d.ts +0 -85
  87. package/lib/esm/agent/proxy.js +0 -154
  88. package/lib/esm/agent/proxy.js.map +0 -1
  89. package/lib/esm/auth.d.ts +0 -87
  90. package/lib/esm/auth.js +0 -64
  91. package/lib/esm/auth.js.map +0 -1
  92. package/lib/esm/canisters/asset.d.ts +0 -10
  93. package/lib/esm/canisters/asset.js +0 -11
  94. package/lib/esm/canisters/asset.js.map +0 -1
  95. package/lib/esm/canisters/asset_idl.d.ts +0 -7
  96. package/lib/esm/canisters/asset_idl.js +0 -12
  97. package/lib/esm/canisters/asset_idl.js.map +0 -1
  98. package/lib/esm/canisters/management.d.ts +0 -37
  99. package/lib/esm/canisters/management.js +0 -23
  100. package/lib/esm/canisters/management.js.map +0 -1
  101. package/lib/esm/canisters/management_idl.d.ts +0 -7
  102. package/lib/esm/canisters/management_idl.js +0 -27
  103. package/lib/esm/canisters/management_idl.js.map +0 -1
  104. package/lib/esm/cbor.d.ts +0 -9
  105. package/lib/esm/cbor.js +0 -111
  106. package/lib/esm/cbor.js.map +0 -1
  107. package/lib/esm/certificate.d.ts +0 -43
  108. package/lib/esm/certificate.js +0 -200
  109. package/lib/esm/certificate.js.map +0 -1
  110. package/lib/esm/errors.d.ts +0 -8
  111. package/lib/esm/errors.js +0 -9
  112. package/lib/esm/errors.js.map +0 -1
  113. package/lib/esm/index.d.ts +0 -52
  114. package/lib/esm/index.js +0 -14
  115. package/lib/esm/index.js.map +0 -1
  116. package/lib/esm/polling/index.d.ts +0 -16
  117. package/lib/esm/polling/index.js +0 -57
  118. package/lib/esm/polling/index.js.map +0 -1
  119. package/lib/esm/polling/strategy.d.ts +0 -47
  120. package/lib/esm/polling/strategy.js +0 -95
  121. package/lib/esm/polling/strategy.js.map +0 -1
  122. package/lib/esm/request_id.d.ts +0 -15
  123. package/lib/esm/request_id.js +0 -81
  124. package/lib/esm/request_id.js.map +0 -1
  125. package/lib/esm/utils/bls.d.ts +0 -9
  126. package/lib/esm/utils/bls.js +0 -43
  127. package/lib/esm/utils/bls.js.map +0 -1
  128. package/lib/esm/utils/buffer.d.ts +0 -16
  129. package/lib/esm/utils/buffer.js +0 -52
  130. package/lib/esm/utils/buffer.js.map +0 -1
  131. package/lib/esm/vendor/bls/bls.d.ts +0 -28
  132. package/lib/esm/vendor/bls/bls.js +0 -870
  133. package/lib/esm/vendor/bls/bls.js.map +0 -1
@@ -1,328 +0,0 @@
1
- import { getKraken } from '@astrox/agent';
2
- import { Principal } from '@astrox/principal';
3
- import { AnonymousIdentity } from '../../auth';
4
- import * as cbor from '../../cbor';
5
- import { requestIdOf } from '../../request_id';
6
- import { fromHex, toHex } from '../../utils/buffer';
7
- import { Expiry } from './transforms';
8
- import { SubmitRequestType, } from './types';
9
- export * from './transforms';
10
- export { makeNonce } from './types';
11
- export var RequestStatusResponseStatus;
12
- (function (RequestStatusResponseStatus) {
13
- RequestStatusResponseStatus["Received"] = "received";
14
- RequestStatusResponseStatus["Processing"] = "processing";
15
- RequestStatusResponseStatus["Replied"] = "replied";
16
- RequestStatusResponseStatus["Rejected"] = "rejected";
17
- RequestStatusResponseStatus["Unknown"] = "unknown";
18
- RequestStatusResponseStatus["Done"] = "done";
19
- })(RequestStatusResponseStatus || (RequestStatusResponseStatus = {}));
20
- // Default delta for ingress expiry is 5 minutes.
21
- const DEFAULT_INGRESS_EXPIRY_DELTA_IN_MSECS = 5 * 60 * 1000;
22
- // Root public key for the IC, encoded as hex
23
- const IC_ROOT_KEY = '308182301d060d2b0601040182dc7c0503010201060c2b0601040182dc7c05030201036100814' +
24
- 'c0e6ec71fab583b08bd81373c255c3c371b2e84863c98a4f1e08b74235d14fb5d9c0cd546d968' +
25
- '5f913a0c0b2cc5341583bf4b4392e467db96d65b9bb4cb717112f8472e0d5a4d14505ffd7484' +
26
- 'b01291091c5f87b98883463f98091a0baaae';
27
- function getDefaultFetch() {
28
- const result = typeof window === 'undefined'
29
- ? typeof global === 'undefined'
30
- ? typeof self === 'undefined'
31
- ? undefined
32
- : self.fetch.bind(self)
33
- : global.fetch.bind(global)
34
- : window.fetch.bind(window);
35
- if (!result) {
36
- throw new Error('Could not find default `fetch` implementation.');
37
- }
38
- return result;
39
- }
40
- function getKrakenFetch() {
41
- if (getKraken()) {
42
- const result = typeof window === 'undefined'
43
- ? typeof global === 'undefined'
44
- ? typeof self === 'undefined'
45
- ? undefined
46
- : self.fetchAgent.bind(self)
47
- : global.fetchAgent.bind(global)
48
- : window.fetchAgent.bind(window);
49
- if (!result) {
50
- throw new Error('Could not find default `fetch` implementation.');
51
- }
52
- return result;
53
- }
54
- else {
55
- return getDefaultFetch();
56
- }
57
- }
58
- // A HTTP agent allows users to interact with a client of the internet computer
59
- // using the available methods. It exposes an API that closely follows the
60
- // public view of the internet computer, and is not intended to be exposed
61
- // directly to the majority of users due to its low-level interface.
62
- //
63
- // There is a pipeline to apply transformations to the request before sending
64
- // it to the client. This is to decouple signature, nonce generation and
65
- // other computations so that this class can stay as simple as possible while
66
- // allowing extensions.
67
- export class HttpAgent {
68
- constructor(options = {}) {
69
- this.rootKey = fromHex(IC_ROOT_KEY);
70
- this._pipeline = [];
71
- this._rootKeyFetched = false;
72
- if (options.source) {
73
- if (!(options.source instanceof HttpAgent)) {
74
- throw new Error("An Agent's source can only be another HttpAgent");
75
- }
76
- this._pipeline = [...options.source._pipeline];
77
- this._identity = options.source._identity;
78
- this._fetch = options.source._fetch;
79
- this._fetchAgent = options.source._fetchAgent;
80
- this._host = options.source._host;
81
- this._credentials = options.source._credentials;
82
- }
83
- else {
84
- this._fetch = options.fetch || getDefaultFetch() || fetch.bind(global);
85
- this._fetchAgent = options.fetchAgent || getKrakenFetch() || fetch.bind(global);
86
- }
87
- if (options.host !== undefined) {
88
- if (!options.host.match(/^[a-z]+:/) && typeof window !== 'undefined') {
89
- this._host = new URL(window.location.protocol + '//' + options.host);
90
- }
91
- else {
92
- this._host = new URL(options.host);
93
- }
94
- }
95
- else if (options.source !== undefined) {
96
- // Safe to ignore here.
97
- this._host = options.source._host;
98
- }
99
- else {
100
- const location = typeof window !== 'undefined' ? window.location : undefined;
101
- if (!location) {
102
- throw new Error('Must specify a host to connect to.');
103
- }
104
- this._host = new URL(location + '');
105
- }
106
- if (options.credentials) {
107
- const { name, password } = options.credentials;
108
- this._credentials = `${name}${password ? ':' + password : ''}`;
109
- }
110
- this._identity = Promise.resolve(options.identity || new AnonymousIdentity());
111
- }
112
- addTransform(fn, priority = fn.priority || 0) {
113
- // Keep the pipeline sorted at all time, by priority.
114
- const i = this._pipeline.findIndex(x => (x.priority || 0) < priority);
115
- this._pipeline.splice(i >= 0 ? i : this._pipeline.length, 0, Object.assign(fn, { priority }));
116
- }
117
- async getPrincipal() {
118
- return (await this._identity).getPrincipal();
119
- }
120
- async call(canisterId, options, identity) {
121
- const id = (await (identity !== undefined ? await identity : await this._identity));
122
- const canister = Principal.from(canisterId);
123
- const ecid = options.effectiveCanisterId
124
- ? Principal.from(options.effectiveCanisterId)
125
- : canister;
126
- const sender = id.getPrincipal() || Principal.anonymous();
127
- const submit = {
128
- request_type: SubmitRequestType.Call,
129
- canister_id: canister,
130
- method_name: options.methodName,
131
- arg: options.arg,
132
- sender,
133
- ingress_expiry: new Expiry(DEFAULT_INGRESS_EXPIRY_DELTA_IN_MSECS),
134
- };
135
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
136
- let transformedRequest = (await this._transform({
137
- request: {
138
- body: null,
139
- method: 'POST',
140
- headers: Object.assign({ 'Content-Type': 'application/cbor' }, (this._credentials ? { Authorization: 'Basic ' + btoa(this._credentials) } : {})),
141
- },
142
- endpoint: "call" /* Call */,
143
- body: submit,
144
- }));
145
- // Apply transform for identity.
146
- transformedRequest = await id.transformRequest(transformedRequest);
147
- const body = cbor.encode(transformedRequest.body);
148
- const kraken = getKraken();
149
- if (!kraken) {
150
- // Run both in parallel. The fetch is quite expensive, so we have plenty of time to
151
- // calculate the requestId locally.
152
- const [response, requestId] = await Promise.all([
153
- this._fetch('' + new URL(`/api/v2/canister/${ecid.toText()}/call`, this._host), Object.assign(Object.assign({}, transformedRequest.request), { body })),
154
- requestIdOf(submit),
155
- ]);
156
- console.log('astorx call');
157
- if (!response.ok) {
158
- throw new Error(`Server returned an error:\n` +
159
- ` Code: ${response.status} (${response.statusText})\n` +
160
- ` Body: ${await response.text()}\n`);
161
- }
162
- return {
163
- requestId,
164
- response: {
165
- ok: response.ok,
166
- status: response.status,
167
- statusText: response.statusText,
168
- },
169
- };
170
- }
171
- else {
172
- const [response, requestId] = await Promise.all([
173
- this._fetchAgent('' + new URL(`/api/v2/canister/${ecid.toText()}/call`, this._host), Object.assign(Object.assign({}, transformedRequest.request), { body: toHex(body) })),
174
- requestIdOf(submit),
175
- ]);
176
- if (!response.ok) {
177
- throw new Error(`Server returned an error:\n` +
178
- ` Code: ${response.status} (${response.statusText})\n` +
179
- ` Body: ${response.body}\n`);
180
- }
181
- return {
182
- requestId,
183
- response: {
184
- ok: response.ok,
185
- status: response.status,
186
- statusText: response.statusText,
187
- },
188
- };
189
- }
190
- }
191
- async query(canisterId, fields, identity) {
192
- const id = await (identity !== undefined ? await identity : await this._identity);
193
- const canister = typeof canisterId === 'string' ? Principal.fromText(canisterId) : canisterId;
194
- const sender = (id === null || id === void 0 ? void 0 : id.getPrincipal()) || Principal.anonymous();
195
- const request = {
196
- request_type: "query" /* Query */,
197
- canister_id: canister,
198
- method_name: fields.methodName,
199
- arg: fields.arg,
200
- sender,
201
- ingress_expiry: new Expiry(DEFAULT_INGRESS_EXPIRY_DELTA_IN_MSECS),
202
- };
203
- // TODO: remove this any. This can be a Signed or UnSigned request.
204
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
205
- let transformedRequest = await this._transform({
206
- request: {
207
- method: 'POST',
208
- headers: Object.assign({ 'Content-Type': 'application/cbor' }, (this._credentials ? { Authorization: 'Basic ' + btoa(this._credentials) } : {})),
209
- },
210
- endpoint: "read" /* Query */,
211
- body: request,
212
- });
213
- // Apply transform for identity.
214
- transformedRequest = await id.transformRequest(transformedRequest);
215
- const body = cbor.encode(transformedRequest.body);
216
- const kraken = getKraken();
217
- if (!kraken) {
218
- const response = await this._fetch('' + new URL(`/api/v2/canister/${canister.toText()}/query`, this._host), Object.assign(Object.assign({}, transformedRequest.request), { body }));
219
- console.log('astorx query');
220
- if (!response.ok) {
221
- throw new Error(`Server returned an error:\n` +
222
- ` Code: ${response.status} (${response.statusText})\n` +
223
- ` Body: ${await response.text()}\n`);
224
- }
225
- return cbor.decode(await response.arrayBuffer());
226
- }
227
- else {
228
- const response = await this._fetchAgent('' + new URL(`/api/v2/canister/${canister.toText()}/query`, this._host), Object.assign(Object.assign({}, transformedRequest.request), { body: toHex(body) }));
229
- console.log('astrox query');
230
- if (!response.ok) {
231
- throw new Error(`Server returned an error:\n` +
232
- ` Code: ${response.status} (${response.statusText})\n` +
233
- ` Body: ${response.body}\n`);
234
- }
235
- return cbor.decode(fromHex(response.body));
236
- }
237
- }
238
- async readState(canisterId, fields, identity) {
239
- const canister = typeof canisterId === 'string' ? Principal.fromText(canisterId) : canisterId;
240
- const id = await (identity !== undefined ? await identity : await this._identity);
241
- const sender = (id === null || id === void 0 ? void 0 : id.getPrincipal()) || Principal.anonymous();
242
- // TODO: remove this any. This can be a Signed or UnSigned request.
243
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
244
- let transformedRequest = await this._transform({
245
- request: {
246
- method: 'POST',
247
- headers: Object.assign({ 'Content-Type': 'application/cbor' }, (this._credentials ? { Authorization: 'Basic ' + btoa(this._credentials) } : {})),
248
- },
249
- endpoint: "read_state" /* ReadState */,
250
- body: {
251
- request_type: "read_state" /* ReadState */,
252
- paths: fields.paths,
253
- sender,
254
- ingress_expiry: new Expiry(DEFAULT_INGRESS_EXPIRY_DELTA_IN_MSECS),
255
- },
256
- });
257
- // Apply transform for identity.
258
- transformedRequest = await id.transformRequest(transformedRequest);
259
- const body = cbor.encode(transformedRequest.body);
260
- const kraken = getKraken();
261
- if (!kraken) {
262
- const response = await this._fetch('' + new URL(`/api/v2/canister/${canister}/read_state`, this._host), Object.assign(Object.assign({}, transformedRequest.request), { body }));
263
- console.log('astorx read_state');
264
- if (!response.ok) {
265
- throw new Error(`Server returned an error:\n` +
266
- ` Code: ${response.status} (${response.statusText})\n` +
267
- ` Body: ${await response.text()}\n`);
268
- }
269
- return cbor.decode(await response.arrayBuffer());
270
- }
271
- else {
272
- const response = await this._fetchAgent('' + new URL(`/api/v2/canister/${canister}/read_state`, this._host), Object.assign(Object.assign({}, transformedRequest.request), { body: toHex(body) }));
273
- console.log('astorx read_state');
274
- if (!response.ok) {
275
- throw new Error(`Server returned an error:\n` +
276
- ` Code: ${response.status} (${response.statusText})\n` +
277
- ` Body: ${response.body}\n`);
278
- }
279
- return cbor.decode(fromHex(response.body));
280
- }
281
- }
282
- async status() {
283
- const headers = this._credentials
284
- ? {
285
- Authorization: 'Basic ' + btoa(this._credentials),
286
- }
287
- : {};
288
- const kraken = getKraken();
289
- if (!kraken) {
290
- const response = await this._fetch('' + new URL(`/api/v2/status`, this._host), { headers });
291
- console.log('astorx status');
292
- if (!response.ok) {
293
- throw new Error(`Server returned an error:\n` +
294
- ` Code: ${response.status} (${response.statusText})\n` +
295
- ` Body: ${await response.text()}\n`);
296
- }
297
- return cbor.decode(await response.arrayBuffer());
298
- }
299
- else {
300
- const response = await this._fetchAgent('' + new URL(`/api/v2/status`, this._host), {
301
- headers,
302
- });
303
- console.log('astrox status');
304
- if (!response.ok) {
305
- throw new Error(`Server returned an error:\n` +
306
- ` Code: ${response.status} (${response.statusText})\n` +
307
- ` Body: ${response.body}\n`);
308
- }
309
- return cbor.decode(fromHex(response.body));
310
- }
311
- }
312
- async fetchRootKey() {
313
- if (!this._rootKeyFetched) {
314
- // Hex-encoded version of the replica root key
315
- this.rootKey = (await this.status()).root_key;
316
- this._rootKeyFetched = true;
317
- }
318
- return this.rootKey;
319
- }
320
- _transform(request) {
321
- let p = Promise.resolve(request);
322
- for (const fn of this._pipeline) {
323
- p = p.then(r => fn(r).then(r2 => r2 || r));
324
- }
325
- return p;
326
- }
327
- }
328
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/agent/http/index.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import * as cbor from 'simple-cbor';
2
- import { HttpAgentRequestTransformFn, Nonce } from './types';
3
- export declare class Expiry {
4
- private readonly _value;
5
- constructor(deltaInMSec: number);
6
- toCBOR(): cbor.CborValue;
7
- toHash(): ArrayBuffer;
8
- }
9
- /**
10
- * Create a Nonce transform, which takes a function that returns a Buffer, and adds it
11
- * as the nonce to every call requests.
12
- * @param nonceFn A function that returns a buffer. By default uses a semi-random method.
13
- */
14
- export declare function makeNonceTransform(nonceFn?: () => Nonce): HttpAgentRequestTransformFn;
15
- /**
16
- * Create a transform that adds a delay (by default 5 minutes) to the expiry.
17
- *
18
- * @param delayInMilliseconds The delay to add to the call time, in milliseconds.
19
- */
20
- export declare function makeExpiryTransform(delayInMilliseconds: number): HttpAgentRequestTransformFn;
@@ -1,45 +0,0 @@
1
- import { lebEncode } from '@astrox/candid';
2
- import * as cbor from 'simple-cbor';
3
- import { makeNonce } from './types';
4
- const NANOSECONDS_PER_MILLISECONDS = BigInt(1000000);
5
- const REPLICA_PERMITTED_DRIFT_MILLISECONDS = BigInt(60 * 1000);
6
- export class Expiry {
7
- constructor(deltaInMSec) {
8
- // Use bigint because it can overflow the maximum number allowed in a double float.
9
- this._value =
10
- (BigInt(Date.now()) + BigInt(deltaInMSec) - REPLICA_PERMITTED_DRIFT_MILLISECONDS) *
11
- NANOSECONDS_PER_MILLISECONDS;
12
- }
13
- toCBOR() {
14
- // TODO: change this to take the minimum amount of space (it always takes 8 bytes now).
15
- return cbor.value.u64(this._value.toString(16), 16);
16
- }
17
- toHash() {
18
- return lebEncode(this._value);
19
- }
20
- }
21
- /**
22
- * Create a Nonce transform, which takes a function that returns a Buffer, and adds it
23
- * as the nonce to every call requests.
24
- * @param nonceFn A function that returns a buffer. By default uses a semi-random method.
25
- */
26
- export function makeNonceTransform(nonceFn = makeNonce) {
27
- return async (request) => {
28
- // Nonce are only useful for async calls, to prevent replay attacks. Other types of
29
- // calls don't need Nonce so we just skip creating one.
30
- if (request.endpoint === "call" /* Call */) {
31
- request.body.nonce = nonceFn();
32
- }
33
- };
34
- }
35
- /**
36
- * Create a transform that adds a delay (by default 5 minutes) to the expiry.
37
- *
38
- * @param delayInMilliseconds The delay to add to the call time, in milliseconds.
39
- */
40
- export function makeExpiryTransform(delayInMilliseconds) {
41
- return async (request) => {
42
- request.body.ingress_expiry = new Expiry(delayInMilliseconds);
43
- };
44
- }
45
- //# sourceMappingURL=transforms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transforms.js","sourceRoot":"","sources":["../../../../src/agent/http/transforms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,EAA2D,SAAS,EAAS,MAAM,SAAS,CAAC;AAEpG,MAAM,4BAA4B,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAErD,MAAM,oCAAoC,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;AAE/D,MAAM,OAAO,MAAM;IAGjB,YAAY,WAAmB;QAC7B,mFAAmF;QACnF,IAAI,CAAC,MAAM;YACT,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,oCAAoC,CAAC;gBACjF,4BAA4B,CAAC;IACjC,CAAC;IAEM,MAAM;QACX,uFAAuF;QACvF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IAEM,MAAM;QACX,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAuB,SAAS;IACjE,OAAO,KAAK,EAAE,OAAyB,EAAE,EAAE;QACzC,mFAAmF;QACnF,uDAAuD;QACvD,IAAI,OAAO,CAAC,QAAQ,sBAAkB,EAAE;YACtC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC;SAChC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,mBAA2B;IAC7D,OAAO,KAAK,EAAE,OAAyB,EAAE,EAAE;QACzC,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC"}
@@ -1,77 +0,0 @@
1
- import type { Principal } from '@astrox/principal';
2
- import { Expiry } from './transforms';
3
- /**
4
- * @internal
5
- */
6
- export declare const enum Endpoint {
7
- Query = "read",
8
- ReadState = "read_state",
9
- Call = "call"
10
- }
11
- export declare type HttpAgentRequest = HttpAgentQueryRequest | HttpAgentSubmitRequest | HttpAgentReadStateRequest;
12
- export interface HttpAgentBaseRequest {
13
- readonly endpoint: Endpoint;
14
- request: RequestInit;
15
- }
16
- export interface HttpAgentSubmitRequest extends HttpAgentBaseRequest {
17
- readonly endpoint: Endpoint.Call;
18
- body: CallRequest;
19
- }
20
- export interface HttpAgentQueryRequest extends HttpAgentBaseRequest {
21
- readonly endpoint: Endpoint.Query;
22
- body: ReadRequest;
23
- }
24
- export interface HttpAgentReadStateRequest extends HttpAgentBaseRequest {
25
- readonly endpoint: Endpoint.ReadState;
26
- body: ReadRequest;
27
- }
28
- export interface Signed<T> {
29
- content: T;
30
- sender_pubkey: ArrayBuffer;
31
- sender_sig: ArrayBuffer;
32
- }
33
- export interface UnSigned<T> {
34
- content: T;
35
- }
36
- export declare type Envelope<T> = Signed<T> | UnSigned<T>;
37
- export interface HttpAgentRequestTransformFn {
38
- (args: HttpAgentRequest): Promise<HttpAgentRequest | undefined | void>;
39
- priority?: number;
40
- }
41
- export interface CallRequest extends Record<string, any> {
42
- request_type: SubmitRequestType.Call;
43
- canister_id: Principal;
44
- method_name: string;
45
- arg: ArrayBuffer;
46
- sender: Uint8Array | Principal;
47
- ingress_expiry: Expiry;
48
- }
49
- export declare enum SubmitRequestType {
50
- Call = "call"
51
- }
52
- export declare const enum ReadRequestType {
53
- Query = "query",
54
- ReadState = "read_state"
55
- }
56
- export interface QueryRequest extends Record<string, any> {
57
- request_type: ReadRequestType.Query;
58
- canister_id: Principal;
59
- method_name: string;
60
- arg: ArrayBuffer;
61
- sender: Uint8Array | Principal;
62
- ingress_expiry: Expiry;
63
- }
64
- export interface ReadStateRequest extends Record<string, any> {
65
- request_type: ReadRequestType.ReadState;
66
- paths: ArrayBuffer[][];
67
- ingress_expiry: Expiry;
68
- sender: Uint8Array | Principal;
69
- }
70
- export declare type ReadRequest = QueryRequest | ReadStateRequest;
71
- export declare type Nonce = Uint8Array & {
72
- __nonce__: void;
73
- };
74
- /**
75
- * Create a random Nonce, based on date and a random suffix.
76
- */
77
- export declare function makeNonce(): Nonce;
@@ -1,20 +0,0 @@
1
- // tslint:enable:camel-case
2
- // The types of values allowed in the `request_type` field for submit requests.
3
- export var SubmitRequestType;
4
- (function (SubmitRequestType) {
5
- SubmitRequestType["Call"] = "call";
6
- })(SubmitRequestType || (SubmitRequestType = {}));
7
- /**
8
- * Create a random Nonce, based on date and a random suffix.
9
- */
10
- export function makeNonce() {
11
- // Encode 128 bits.
12
- const buffer = new ArrayBuffer(16);
13
- const view = new DataView(buffer);
14
- const value = BigInt(+Date.now()) * BigInt(100000) + BigInt(Math.floor(Math.random() * 100000));
15
- view.setBigUint64(0, value);
16
- // tslint:disable-next-line:no-bitwise
17
- view.setBigUint64(1, value >> BigInt(64));
18
- return buffer;
19
- }
20
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/agent/http/types.ts"],"names":[],"mappings":"AAmEA,2BAA2B;AAE3B,+EAA+E;AAC/E,MAAM,CAAN,IAAY,iBAEX;AAFD,WAAY,iBAAiB;IAC3B,kCAAa,CAAA;AACf,CAAC,EAFW,iBAAiB,KAAjB,iBAAiB,QAE5B;AA8BD;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,mBAAmB;IACnB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IAChG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5B,sCAAsC;IACtC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1C,OAAO,MAAe,CAAC;AACzB,CAAC"}
@@ -1,7 +0,0 @@
1
- import { Kraken } from '../index';
2
- import { Agent } from './api';
3
- export * from './api';
4
- export * from './http';
5
- export * from './proxy';
6
- export declare function getDefaultAgent(): Agent;
7
- export declare function getKraken(): Kraken | undefined;
@@ -1,27 +0,0 @@
1
- export * from './api';
2
- export * from './http';
3
- export * from './proxy';
4
- export function getDefaultAgent() {
5
- const agent = typeof window === 'undefined'
6
- ? typeof global === 'undefined'
7
- ? typeof self === 'undefined'
8
- ? undefined
9
- : self.ic.agent
10
- : global.ic.agent
11
- : window.ic.agent;
12
- if (!agent) {
13
- throw new Error('No Agent could be found.');
14
- }
15
- return agent;
16
- }
17
- export function getKraken() {
18
- const kraken = typeof window === 'undefined'
19
- ? typeof global === 'undefined'
20
- ? typeof self === 'undefined'
21
- ? undefined
22
- : self.kraken
23
- : global.kraken
24
- : window.kraken;
25
- return kraken;
26
- }
27
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/index.ts"],"names":[],"mappings":"AAGA,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AAMxB,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GACT,OAAO,MAAM,KAAK,WAAW;QAC3B,CAAC,CAAC,OAAO,MAAM,KAAK,WAAW;YAC7B,CAAC,CAAC,OAAO,IAAI,KAAK,WAAW;gBAC3B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK;YACjB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK;QACnB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IAEtB,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;KAC7C;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GACV,OAAO,MAAM,KAAK,WAAW;QAC3B,CAAC,CAAC,OAAO,MAAM,KAAK,WAAW;YAC7B,CAAC,CAAC,OAAO,IAAI,KAAK,WAAW;gBAC3B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,IAAI,CAAC,MAAM;YACf,CAAC,CAAC,MAAM,CAAC,MAAM;QACjB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAEpB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,85 +0,0 @@
1
- import { CallOptions, QueryFields, QueryResponse, ReadStateOptions, ReadStateResponse, SubmitResponse } from '..';
2
- import { JsonObject } from '@astrox/candid';
3
- import { Agent } from './api';
4
- import { Principal } from '@astrox/principal';
5
- export declare enum ProxyMessageKind {
6
- Error = "err",
7
- GetPrincipal = "gp",
8
- GetPrincipalResponse = "gpr",
9
- Query = "q",
10
- QueryResponse = "qr",
11
- Call = "c",
12
- CallResponse = "cr",
13
- ReadState = "rs",
14
- ReadStateResponse = "rsr",
15
- Status = "s",
16
- StatusResponse = "sr"
17
- }
18
- export interface ProxyMessageBase {
19
- id: number;
20
- type: ProxyMessageKind;
21
- }
22
- export interface ProxyMessageError extends ProxyMessageBase {
23
- type: ProxyMessageKind.Error;
24
- error: any;
25
- }
26
- export interface ProxyMessageGetPrincipal extends ProxyMessageBase {
27
- type: ProxyMessageKind.GetPrincipal;
28
- }
29
- export interface ProxyMessageGetPrincipalResponse extends ProxyMessageBase {
30
- type: ProxyMessageKind.GetPrincipalResponse;
31
- response: string;
32
- }
33
- export interface ProxyMessageQuery extends ProxyMessageBase {
34
- type: ProxyMessageKind.Query;
35
- args: [string, QueryFields];
36
- }
37
- export interface ProxyMessageQueryResponse extends ProxyMessageBase {
38
- type: ProxyMessageKind.QueryResponse;
39
- response: QueryResponse;
40
- }
41
- export interface ProxyMessageCall extends ProxyMessageBase {
42
- type: ProxyMessageKind.Call;
43
- args: [string, CallOptions];
44
- }
45
- export interface ProxyMessageCallResponse extends ProxyMessageBase {
46
- type: ProxyMessageKind.CallResponse;
47
- response: SubmitResponse;
48
- }
49
- export interface ProxyMessageReadState extends ProxyMessageBase {
50
- type: ProxyMessageKind.ReadState;
51
- args: [string, ReadStateOptions];
52
- }
53
- export interface ProxyMessageReadStateResponse extends ProxyMessageBase {
54
- type: ProxyMessageKind.ReadStateResponse;
55
- response: ReadStateResponse;
56
- }
57
- export interface ProxyMessageStatus extends ProxyMessageBase {
58
- type: ProxyMessageKind.Status;
59
- }
60
- export interface ProxyMessageStatusResponse extends ProxyMessageBase {
61
- type: ProxyMessageKind.StatusResponse;
62
- response: JsonObject;
63
- }
64
- export declare type ProxyMessage = ProxyMessageError | ProxyMessageGetPrincipal | ProxyMessageGetPrincipalResponse | ProxyMessageQuery | ProxyMessageQueryResponse | ProxyMessageCall | ProxyMessageReadState | ProxyMessageReadStateResponse | ProxyMessageCallResponse | ProxyMessageStatus | ProxyMessageStatusResponse;
65
- export declare class ProxyStubAgent {
66
- private _frontend;
67
- private _agent;
68
- constructor(_frontend: (msg: ProxyMessage) => void, _agent: Agent);
69
- onmessage(msg: ProxyMessage): void;
70
- }
71
- export declare class ProxyAgent implements Agent {
72
- private _backend;
73
- private _nextId;
74
- private _pendingCalls;
75
- rootKey: null;
76
- constructor(_backend: (msg: ProxyMessage) => void);
77
- onmessage(msg: ProxyMessage): void;
78
- getPrincipal(): Promise<Principal>;
79
- readState(canisterId: Principal | string, fields: ReadStateOptions): Promise<ReadStateResponse>;
80
- call(canisterId: Principal | string, fields: CallOptions): Promise<SubmitResponse>;
81
- status(): Promise<JsonObject>;
82
- query(canisterId: Principal | string, fields: QueryFields): Promise<QueryResponse>;
83
- private _sendAndWait;
84
- fetchRootKey(): Promise<ArrayBuffer>;
85
- }