@dfinity/pic 0.18.0 → 0.19.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/error.d.ts +18 -3
- package/dist/error.js +27 -7
- package/dist/error.js.map +1 -1
- package/dist/http2-client.d.ts +1 -0
- package/dist/http2-client.js +28 -19
- package/dist/http2-client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/management-canister.d.ts +57 -0
- package/dist/management-canister.js +84 -0
- package/dist/management-canister.js.map +1 -1
- package/dist/pocket-ic-client-types.d.ts +27 -0
- package/dist/pocket-ic-client-types.js +1 -1
- package/dist/pocket-ic-client-types.js.map +1 -1
- package/dist/pocket-ic-client.d.ts +7 -0
- package/dist/pocket-ic-client.js +36 -2
- package/dist/pocket-ic-client.js.map +1 -1
- package/dist/pocket-ic-server.js +7 -1
- package/dist/pocket-ic-server.js.map +1 -1
- package/dist/pocket-ic-types.d.ts +87 -0
- package/dist/pocket-ic-types.js.map +1 -1
- package/dist/pocket-ic.d.ts +102 -1
- package/dist/pocket-ic.js +235 -0
- package/dist/pocket-ic.js.map +1 -1
- package/dist/util/index.d.ts +1 -0
- package/dist/util/index.js +1 -0
- package/dist/util/index.js.map +1 -1
- package/dist/util/poll.js +5 -2
- package/dist/util/poll.js.map +1 -1
- package/dist/util/wasm.d.ts +2 -0
- package/dist/util/wasm.js +19 -0
- package/dist/util/wasm.js.map +1 -0
- package/package.json +2 -2
- package/postinstall.mjs +1 -1
package/dist/pocket-ic-client.js
CHANGED
|
@@ -10,11 +10,14 @@ const AWAIT_INGRESS_STATUS_ROUNDS = 100;
|
|
|
10
10
|
class PocketIcClient {
|
|
11
11
|
serverClient;
|
|
12
12
|
instancePath;
|
|
13
|
+
instanceId;
|
|
13
14
|
ingressMaxRetries;
|
|
14
15
|
isInstanceDeleted = false;
|
|
15
|
-
|
|
16
|
+
httpGatewayInstanceId = null;
|
|
17
|
+
constructor(serverClient, instancePath, instanceId, ingressMaxRetries) {
|
|
16
18
|
this.serverClient = serverClient;
|
|
17
19
|
this.instancePath = instancePath;
|
|
20
|
+
this.instanceId = instanceId;
|
|
18
21
|
this.ingressMaxRetries = ingressMaxRetries;
|
|
19
22
|
}
|
|
20
23
|
static async create(url, req) {
|
|
@@ -30,7 +33,7 @@ class PocketIcClient {
|
|
|
30
33
|
}
|
|
31
34
|
const instanceId = res.Created.instance_id;
|
|
32
35
|
const ingressMaxRetries = req?.ingressMaxRetries ?? AWAIT_INGRESS_STATUS_ROUNDS;
|
|
33
|
-
return new PocketIcClient(serverClient, `/instances/${instanceId}`, ingressMaxRetries);
|
|
36
|
+
return new PocketIcClient(serverClient, `/instances/${instanceId}`, instanceId, ingressMaxRetries);
|
|
34
37
|
}
|
|
35
38
|
async deleteInstance() {
|
|
36
39
|
this.assertInstanceNotDeleted();
|
|
@@ -159,6 +162,37 @@ class PocketIcClient {
|
|
|
159
162
|
}
|
|
160
163
|
throw new Error(`PocketIC did not complete the update call within ${this.ingressMaxRetries} rounds`);
|
|
161
164
|
}
|
|
165
|
+
async autoProgress() {
|
|
166
|
+
await this.post('/auto_progress', {
|
|
167
|
+
artificial_delay_ms: 0,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
async autoProgressEnabled() {
|
|
171
|
+
return await this.get('/auto_progress');
|
|
172
|
+
}
|
|
173
|
+
async stopProgress() {
|
|
174
|
+
await this.post('/stop_progress', {});
|
|
175
|
+
}
|
|
176
|
+
async startHttpGateway() {
|
|
177
|
+
const res = await this.serverClient.jsonPost({
|
|
178
|
+
path: '/http_gateway',
|
|
179
|
+
body: { forward_to: { PocketIcInstance: this.instanceId } },
|
|
180
|
+
});
|
|
181
|
+
if ('Error' in res) {
|
|
182
|
+
throw new Error(res.Error.message);
|
|
183
|
+
}
|
|
184
|
+
this.httpGatewayInstanceId = res.Created.instance_id;
|
|
185
|
+
return res.Created.port;
|
|
186
|
+
}
|
|
187
|
+
async stopHttpGateway() {
|
|
188
|
+
if ((0, util_1.isNil)(this.httpGatewayInstanceId)) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
await this.serverClient.jsonPost({
|
|
192
|
+
path: `/http_gateway/${this.httpGatewayInstanceId}/stop`,
|
|
193
|
+
});
|
|
194
|
+
this.httpGatewayInstanceId = null;
|
|
195
|
+
}
|
|
162
196
|
async post(endpoint, body, responseJsonParser) {
|
|
163
197
|
return await this.serverClient.jsonPost({
|
|
164
198
|
path: `${this.instancePath}${endpoint}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pocket-ic-client.js","sourceRoot":"","sources":["../src/pocket-ic-client.ts"],"names":[],"mappings":";;;AAAA,uDAA6C;AAC7C,iDAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"pocket-ic-client.js","sourceRoot":"","sources":["../src/pocket-ic-client.ts"],"names":[],"mappings":"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"}
|
package/dist/pocket-ic-server.js
CHANGED
|
@@ -72,7 +72,13 @@ class PocketIcServer {
|
|
|
72
72
|
throw new error_1.BinStartError(error);
|
|
73
73
|
});
|
|
74
74
|
return await (0, util_1.poll)(async () => {
|
|
75
|
-
const portString = await (0, util_1.readFileAsString)(portFilePath)
|
|
75
|
+
const portString = await (0, util_1.readFileAsString)(portFilePath).catch((err) => {
|
|
76
|
+
if (err instanceof Error &&
|
|
77
|
+
err.code === 'ENOENT') {
|
|
78
|
+
throw new error_1.BinTimeoutError();
|
|
79
|
+
}
|
|
80
|
+
throw err;
|
|
81
|
+
});
|
|
76
82
|
const port = parseInt(portString);
|
|
77
83
|
if (isNaN(port)) {
|
|
78
84
|
throw new error_1.BinTimeoutError();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pocket-ic-server.js","sourceRoot":"","sources":["../src/pocket-ic-server.ts"],"names":[],"mappings":";;;AAAA,2DAAyD;AACzD,yCAAoC;AACpC,qCAAoC;AACpC,mCAKiB;AACjB,iCAOgB;AAEhB,6CAAuC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAa,cAAc;IAIN;IAHF,GAAG,CAAS;IAE7B,YACmB,aAA2B,EAC5C,UAAkB;QADD,kBAAa,GAAb,aAAa,CAAc;QAG5C,IAAI,CAAC,GAAG,GAAG,oBAAoB,UAAU,EAAE,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,KAAK,CACvB,UAA8B,EAAE;QAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAEpC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,MAAM,aAAa,GAAG,aAAa,GAAG,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,IAAA,cAAO,EAAC,GAAG,aAAa,OAAO,CAAC,CAAC;QAEtD,MAAM,aAAa,GAAG,IAAA,0BAAK,EAAC,OAAO,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;QAEpE,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YAChC,IAAI,IAAA,YAAK,GAAE,IAAI,IAAA,eAAQ,GAAE,EAAE,CAAC;gBAC1B,MAAM,IAAI,6BAAqB,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,IAAI,qBAAa,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,IAAA,WAAI,EACf,KAAK,IAAI,EAAE;YACT,MAAM,UAAU,GAAG,MAAM,IAAA,uBAAgB,EAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pocket-ic-server.js","sourceRoot":"","sources":["../src/pocket-ic-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -590,6 +590,93 @@ export interface UpdateCanisterSettingsOptions extends Partial<CanisterSettings>
|
|
|
590
590
|
*/
|
|
591
591
|
sender?: Principal;
|
|
592
592
|
}
|
|
593
|
+
/**
|
|
594
|
+
* Options for querying the status of a given canister.
|
|
595
|
+
*
|
|
596
|
+
* @category Types
|
|
597
|
+
* @see [Principal](https://js.icp.build/core/latest/libs/principal/api/classes/principal/)
|
|
598
|
+
*/
|
|
599
|
+
export interface CanisterStatusOptions {
|
|
600
|
+
/**
|
|
601
|
+
* The Principal of the canister to query the status of.
|
|
602
|
+
*/
|
|
603
|
+
canisterId: Principal;
|
|
604
|
+
/**
|
|
605
|
+
* The Principal to send the request as.
|
|
606
|
+
* Defaults to the anonymous principal.
|
|
607
|
+
*/
|
|
608
|
+
sender?: Principal;
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* The status of a canister.
|
|
612
|
+
*
|
|
613
|
+
* @category Types
|
|
614
|
+
*/
|
|
615
|
+
export type CanisterStatus = {
|
|
616
|
+
running: null;
|
|
617
|
+
} | {
|
|
618
|
+
stopping: null;
|
|
619
|
+
} | {
|
|
620
|
+
stopped: null;
|
|
621
|
+
};
|
|
622
|
+
/**
|
|
623
|
+
* Query statistics for a canister.
|
|
624
|
+
*
|
|
625
|
+
* @category Types
|
|
626
|
+
*/
|
|
627
|
+
export interface CanisterQueryStats {
|
|
628
|
+
numCallsTotal: bigint;
|
|
629
|
+
numInstructionsTotal: bigint;
|
|
630
|
+
requestPayloadBytesTotal: bigint;
|
|
631
|
+
responsePayloadBytesTotal: bigint;
|
|
632
|
+
}
|
|
633
|
+
/**
|
|
634
|
+
* The result of querying the status of a canister.
|
|
635
|
+
* Matches the IC management canister `canister_status` response.
|
|
636
|
+
*
|
|
637
|
+
* @category Types
|
|
638
|
+
* @see [Principal](https://js.icp.build/core/latest/libs/principal/api/classes/principal/)
|
|
639
|
+
*/
|
|
640
|
+
export interface CanisterStatusResult {
|
|
641
|
+
/**
|
|
642
|
+
* The current status of the canister.
|
|
643
|
+
*/
|
|
644
|
+
status: CanisterStatus;
|
|
645
|
+
/**
|
|
646
|
+
* The definite settings of the canister.
|
|
647
|
+
*/
|
|
648
|
+
settings: {
|
|
649
|
+
controllers: Principal[];
|
|
650
|
+
computeAllocation: bigint;
|
|
651
|
+
memoryAllocation: bigint;
|
|
652
|
+
freezingThreshold: bigint;
|
|
653
|
+
reservedCyclesLimit: bigint;
|
|
654
|
+
};
|
|
655
|
+
/**
|
|
656
|
+
* The SHA-256 hash of the installed WASM module, if any.
|
|
657
|
+
*/
|
|
658
|
+
moduleHash: Uint8Array | null;
|
|
659
|
+
/**
|
|
660
|
+
* The total memory size of the canister in bytes.
|
|
661
|
+
*/
|
|
662
|
+
memorySize: bigint;
|
|
663
|
+
/**
|
|
664
|
+
* The current cycle balance of the canister.
|
|
665
|
+
*/
|
|
666
|
+
cycles: bigint;
|
|
667
|
+
/**
|
|
668
|
+
* The reserved cycles of the canister.
|
|
669
|
+
*/
|
|
670
|
+
reservedCycles: bigint;
|
|
671
|
+
/**
|
|
672
|
+
* The amount of cycles burned per day when idle.
|
|
673
|
+
*/
|
|
674
|
+
idleCyclesBurnedPerDay: bigint;
|
|
675
|
+
/**
|
|
676
|
+
* Query call statistics for the canister.
|
|
677
|
+
*/
|
|
678
|
+
queryStats: CanisterQueryStats;
|
|
679
|
+
}
|
|
593
680
|
/**
|
|
594
681
|
* Options for making a query call to a given canister.
|
|
595
682
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pocket-ic-types.js","sourceRoot":"","sources":["../src/pocket-ic-types.ts"],"names":[],"mappings":";;;AA0OA;;GAEG;AACH,IAAY,eAWX;AAXD,WAAY,eAAe;IACzB;;OAEG;IACH,8BAAW,CAAA;IAEX;;;OAGG;IACH,wCAAqB,CAAA;AACvB,CAAC,EAXW,eAAe,+BAAf,eAAe,QAW1B;AAED;;GAEG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,oCAAmB,CAAA;AACrB,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAyBD;;GAEG;AACH,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B;;OAEG;IACH,oDAA+B,CAAA;AACjC,CAAC,EALW,iBAAiB,iCAAjB,iBAAiB,QAK5B;AA6ED;;GAEG;AACH,IAAY,UAmCX;AAnCD,WAAY,UAAU;IACpB;;OAEG;IACH,yCAA2B,CAAA;IAE3B;;OAEG;IACH,iCAAmB,CAAA;IAEnB;;OAEG;IACH,qCAAuB,CAAA;IAEvB;;OAEG;IACH,qCAAuB,CAAA;IAEvB;;OAEG;IACH,yBAAW,CAAA;IAEX;;OAEG;IACH,yBAAW,CAAA;IAEX;;OAEG;IACH,+BAAiB,CAAA;AACnB,CAAC,EAnCW,UAAU,0BAAV,UAAU,QAmCrB;
|
|
1
|
+
{"version":3,"file":"pocket-ic-types.js","sourceRoot":"","sources":["../src/pocket-ic-types.ts"],"names":[],"mappings":";;;AA0OA;;GAEG;AACH,IAAY,eAWX;AAXD,WAAY,eAAe;IACzB;;OAEG;IACH,8BAAW,CAAA;IAEX;;;OAGG;IACH,wCAAqB,CAAA;AACvB,CAAC,EAXW,eAAe,+BAAf,eAAe,QAW1B;AAED;;GAEG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,oCAAmB,CAAA;AACrB,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAyBD;;GAEG;AACH,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B;;OAEG;IACH,oDAA+B,CAAA;AACjC,CAAC,EALW,iBAAiB,iCAAjB,iBAAiB,QAK5B;AA6ED;;GAEG;AACH,IAAY,UAmCX;AAnCD,WAAY,UAAU;IACpB;;OAEG;IACH,yCAA2B,CAAA;IAE3B;;OAEG;IACH,iCAAmB,CAAA;IAEnB;;OAEG;IACH,qCAAuB,CAAA;IAEvB;;OAEG;IACH,qCAAuB,CAAA;IAEvB;;OAEG;IACH,yBAAW,CAAA;IAEX;;OAEG;IACH,yBAAW,CAAA;IAEX;;OAEG;IACH,+BAAiB,CAAA;AACnB,CAAC,EAnCW,UAAU,0BAAV,UAAU,QAmCrB;AAigBD;;GAEG;AACH,IAAY,kBAeX;AAfD,WAAY,kBAAkB;IAC5B;;OAEG;IACH,iCAAW,CAAA;IAEX;;OAEG;IACH,mCAAa,CAAA;IAEb;;OAEG;IACH,mCAAa,CAAA;AACf,CAAC,EAfW,kBAAkB,kCAAlB,kBAAkB,QAe7B;AAiFD,2BAA2B"}
|
package/dist/pocket-ic.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Principal } from '@icp-sdk/core/principal';
|
|
2
2
|
import { IDL } from '@icp-sdk/core/candid';
|
|
3
3
|
import { ActorInterface, Actor } from './pocket-ic-actor';
|
|
4
|
-
import { CanisterFixture, CreateCanisterOptions, CreateInstanceOptions, InstallCodeOptions, ReinstallCodeOptions, SetupCanisterOptions, UpgradeCanisterOptions, SubnetTopology, UpdateCanisterSettingsOptions, StartCanisterOptions, StopCanisterOptions, QueryCallOptions, UpdateCallOptions, PendingHttpsOutcall, MockPendingHttpsOutcallOptions } from './pocket-ic-types';
|
|
4
|
+
import { CanisterFixture, CreateCanisterOptions, CreateInstanceOptions, InstallCodeOptions, ReinstallCodeOptions, SetupCanisterOptions, UpgradeCanisterOptions, SubnetTopology, UpdateCanisterSettingsOptions, StartCanisterOptions, StopCanisterOptions, QueryCallOptions, UpdateCallOptions, PendingHttpsOutcall, MockPendingHttpsOutcallOptions, CanisterStatusOptions, CanisterStatusResult } from './pocket-ic-types';
|
|
5
5
|
import { DeferredActor } from './pocket-ic-deferred-actor';
|
|
6
6
|
/**
|
|
7
7
|
* This class represents the main PocketIC client.
|
|
@@ -53,6 +53,7 @@ import { DeferredActor } from './pocket-ic-deferred-actor';
|
|
|
53
53
|
*/
|
|
54
54
|
export declare class PocketIc {
|
|
55
55
|
private readonly client;
|
|
56
|
+
private httpGatewayPort;
|
|
56
57
|
private constructor();
|
|
57
58
|
/**
|
|
58
59
|
* Creates a PocketIC instance.
|
|
@@ -294,6 +295,31 @@ export declare class PocketIc {
|
|
|
294
295
|
* ```
|
|
295
296
|
*/
|
|
296
297
|
updateCanisterSettings({ canisterId, computeAllocation, controllers, freezingThreshold, memoryAllocation, reservedCyclesLimit, sender, }: UpdateCanisterSettingsOptions): Promise<void>;
|
|
298
|
+
/**
|
|
299
|
+
* Returns the status of the given canister.
|
|
300
|
+
*
|
|
301
|
+
* @param options Options for querying the canister status, see {@link CanisterStatusOptions}.
|
|
302
|
+
* @returns The canister status, see {@link CanisterStatusResult}.
|
|
303
|
+
*
|
|
304
|
+
* @see [Principal](https://js.icp.build/core/latest/libs/principal/api/classes/principal/)
|
|
305
|
+
*
|
|
306
|
+
* @example
|
|
307
|
+
* ```ts
|
|
308
|
+
* import { Principal } from '@icp-sdk/core/principal';
|
|
309
|
+
* import { PocketIc, PocketIcServer } from '@dfinity/pic';
|
|
310
|
+
*
|
|
311
|
+
* const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
|
|
312
|
+
*
|
|
313
|
+
* const picServer = await PocketIcServer.start();
|
|
314
|
+
* const pic = await PocketIc.create(picServer.getUrl());
|
|
315
|
+
*
|
|
316
|
+
* const status = await pic.canisterStatus({ canisterId });
|
|
317
|
+
*
|
|
318
|
+
* await pic.tearDown();
|
|
319
|
+
* await picServer.stop();
|
|
320
|
+
* ```
|
|
321
|
+
*/
|
|
322
|
+
canisterStatus({ canisterId, sender, }: CanisterStatusOptions): Promise<CanisterStatusResult>;
|
|
297
323
|
/**
|
|
298
324
|
* Creates an {@link Actor} for the given canister.
|
|
299
325
|
* An {@link Actor} is a typesafe class that implements the Candid interface of a canister.
|
|
@@ -997,4 +1023,79 @@ export declare class PocketIc {
|
|
|
997
1023
|
* ```
|
|
998
1024
|
*/
|
|
999
1025
|
mockPendingHttpsOutcall({ requestId, response, subnetId, additionalResponses, }: MockPendingHttpsOutcallOptions): Promise<void>;
|
|
1026
|
+
/**
|
|
1027
|
+
* Make the PocketIC instance live by enabling auto progress and starting the HTTP Gateway.
|
|
1028
|
+
* If the server is already live, this method will return the HTTP Gateway URL.
|
|
1029
|
+
* The PocketIC instance must be created with at least an NNS subnet in
|
|
1030
|
+
* order for `fetchRootKey` to work correctly.
|
|
1031
|
+
*
|
|
1032
|
+
* @example
|
|
1033
|
+
* ```ts
|
|
1034
|
+
* import { Principal } from '@icp-sdk/core/principal';
|
|
1035
|
+
* import { PocketIc, PocketIcServer } from '@dfinity/pic';
|
|
1036
|
+
* import { resolve } from 'node:path';
|
|
1037
|
+
*
|
|
1038
|
+
* const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
|
|
1039
|
+
* const wasm = resolve('..', '..', 'canister.wasm');
|
|
1040
|
+
*
|
|
1041
|
+
* const picServer = await PocketIcServer.start();
|
|
1042
|
+
* const pic = await PocketIc.create(picServer.getUrl(), {
|
|
1043
|
+
* nns: { state: { type: SubnetStateType.New } },
|
|
1044
|
+
* application: [{ state: { type: SubnetStateType.New } }],
|
|
1045
|
+
* });
|
|
1046
|
+
*
|
|
1047
|
+
* const canister = await pic.installCode({ canisterId, wasm });
|
|
1048
|
+
* await pic.installCode({ canisterId, wasm });
|
|
1049
|
+
*
|
|
1050
|
+
* const httpGatewayUrl = await pic.makeLive();
|
|
1051
|
+
* const agent = await HttpAgent.create({
|
|
1052
|
+
* host: httpGatewayUrl,
|
|
1053
|
+
* shouldFetchRootKey: true,
|
|
1054
|
+
* });
|
|
1055
|
+
* const actor = Actor.createActor(idlFactory, { agent, canisterId });
|
|
1056
|
+
*
|
|
1057
|
+
* await pic.stopLive();
|
|
1058
|
+
* await pic.tearDown();
|
|
1059
|
+
* await picServer.stop();
|
|
1060
|
+
* ```
|
|
1061
|
+
*
|
|
1062
|
+
* @returns The HTTP Gateway port.
|
|
1063
|
+
*/
|
|
1064
|
+
makeLive(): Promise<number>;
|
|
1065
|
+
/**
|
|
1066
|
+
* Disables auto progress and stops the HTTP Gateway for the PocketIC instance.
|
|
1067
|
+
*
|
|
1068
|
+
*
|
|
1069
|
+
* @example
|
|
1070
|
+
* ```ts
|
|
1071
|
+
* import { Principal } from '@icp-sdk/core/principal';
|
|
1072
|
+
* import { PocketIc, PocketIcServer } from '@dfinity/pic';
|
|
1073
|
+
* import { resolve } from 'node:path';
|
|
1074
|
+
*
|
|
1075
|
+
* const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
|
|
1076
|
+
* const wasm = resolve('..', '..', 'canister.wasm');
|
|
1077
|
+
*
|
|
1078
|
+
* const picServer = await PocketIcServer.start();
|
|
1079
|
+
* const pic = await PocketIc.create(picServer.getUrl(), {
|
|
1080
|
+
* nns: { state: { type: SubnetStateType.New } },
|
|
1081
|
+
* application: [{ state: { type: SubnetStateType.New } }],
|
|
1082
|
+
* });
|
|
1083
|
+
*
|
|
1084
|
+
* const canister = await pic.installCode({ canisterId, wasm });
|
|
1085
|
+
* await pic.installCode({ canisterId, wasm });
|
|
1086
|
+
*
|
|
1087
|
+
* const httpGatewayUrl = await pic.makeLive();
|
|
1088
|
+
* const agent = await HttpAgent.create({
|
|
1089
|
+
* host: httpGatewayUrl,
|
|
1090
|
+
* shouldFetchRootKey: true,
|
|
1091
|
+
* });
|
|
1092
|
+
* const actor = Actor.createActor(idlFactory, { agent, canisterId });
|
|
1093
|
+
*
|
|
1094
|
+
* await pic.stopLive();
|
|
1095
|
+
* await pic.tearDown();
|
|
1096
|
+
* await picServer.stop();
|
|
1097
|
+
* ```
|
|
1098
|
+
*/
|
|
1099
|
+
stopLive(): Promise<void>;
|
|
1100
|
+
private installCodeChunked;
|
|
1000
1101
|
}
|
package/dist/pocket-ic.js
CHANGED
|
@@ -9,6 +9,12 @@ const pocket_ic_types_1 = require("./pocket-ic-types");
|
|
|
9
9
|
const management_canister_1 = require("./management-canister");
|
|
10
10
|
const pocket_ic_deferred_actor_1 = require("./pocket-ic-deferred-actor");
|
|
11
11
|
const NANOS_PER_MILLISECOND = BigInt(1_000_000);
|
|
12
|
+
// The IC ingress message limit is 2 MB, but that covers the entire message
|
|
13
|
+
// envelope (signature, delegations, Candid overhead, etc.).
|
|
14
|
+
// We use 1.85 MB to match dfx's conservative threshold.
|
|
15
|
+
const MAX_INSTALL_CODE_PAYLOAD_SIZE = 1_850_000;
|
|
16
|
+
const WASM_CHUNK_SIZE = 1_000_000;
|
|
17
|
+
const CHUNK_UPLOAD_BATCH_SIZE = 12;
|
|
12
18
|
/**
|
|
13
19
|
* This class represents the main PocketIC client.
|
|
14
20
|
* It is responsible for interacting with the PocketIC server via the REST API.
|
|
@@ -59,6 +65,7 @@ const NANOS_PER_MILLISECOND = BigInt(1_000_000);
|
|
|
59
65
|
*/
|
|
60
66
|
class PocketIc {
|
|
61
67
|
client;
|
|
68
|
+
httpGatewayPort = null;
|
|
62
69
|
constructor(client) {
|
|
63
70
|
this.client = client;
|
|
64
71
|
}
|
|
@@ -294,6 +301,16 @@ class PocketIc {
|
|
|
294
301
|
if (typeof wasm === 'string') {
|
|
295
302
|
wasm = await (0, util_1.readFileAsBytes)(wasm);
|
|
296
303
|
}
|
|
304
|
+
if (wasm.byteLength + arg.byteLength > MAX_INSTALL_CODE_PAYLOAD_SIZE) {
|
|
305
|
+
return this.installCodeChunked({
|
|
306
|
+
wasm,
|
|
307
|
+
arg,
|
|
308
|
+
canisterId,
|
|
309
|
+
mode: { install: null },
|
|
310
|
+
sender,
|
|
311
|
+
targetSubnetId,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
297
314
|
const payload = (0, management_canister_1.encodeInstallCodeRequest)({
|
|
298
315
|
arg: new Uint8Array(arg),
|
|
299
316
|
canister_id: canisterId,
|
|
@@ -346,6 +363,15 @@ class PocketIc {
|
|
|
346
363
|
if (typeof wasm === 'string') {
|
|
347
364
|
wasm = await (0, util_1.readFileAsBytes)(wasm);
|
|
348
365
|
}
|
|
366
|
+
if (wasm.byteLength + arg.byteLength > MAX_INSTALL_CODE_PAYLOAD_SIZE) {
|
|
367
|
+
return this.installCodeChunked({
|
|
368
|
+
wasm,
|
|
369
|
+
arg,
|
|
370
|
+
canisterId,
|
|
371
|
+
mode: { reinstall: null },
|
|
372
|
+
sender,
|
|
373
|
+
});
|
|
374
|
+
}
|
|
349
375
|
const payload = (0, management_canister_1.encodeInstallCodeRequest)({
|
|
350
376
|
arg: new Uint8Array(arg),
|
|
351
377
|
canister_id: canisterId,
|
|
@@ -393,6 +419,15 @@ class PocketIc {
|
|
|
393
419
|
if (typeof wasm === 'string') {
|
|
394
420
|
wasm = await (0, util_1.readFileAsBytes)(wasm);
|
|
395
421
|
}
|
|
422
|
+
if (wasm.byteLength + arg.byteLength > MAX_INSTALL_CODE_PAYLOAD_SIZE) {
|
|
423
|
+
return this.installCodeChunked({
|
|
424
|
+
wasm,
|
|
425
|
+
arg,
|
|
426
|
+
canisterId,
|
|
427
|
+
mode: { upgrade: (0, util_1.optional)(upgradeModeOptions) },
|
|
428
|
+
sender,
|
|
429
|
+
});
|
|
430
|
+
}
|
|
396
431
|
const payload = (0, management_canister_1.encodeInstallCodeRequest)({
|
|
397
432
|
arg: new Uint8Array(arg),
|
|
398
433
|
canister_id: canisterId,
|
|
@@ -452,6 +487,63 @@ class PocketIc {
|
|
|
452
487
|
payload,
|
|
453
488
|
});
|
|
454
489
|
}
|
|
490
|
+
/**
|
|
491
|
+
* Returns the status of the given canister.
|
|
492
|
+
*
|
|
493
|
+
* @param options Options for querying the canister status, see {@link CanisterStatusOptions}.
|
|
494
|
+
* @returns The canister status, see {@link CanisterStatusResult}.
|
|
495
|
+
*
|
|
496
|
+
* @see [Principal](https://js.icp.build/core/latest/libs/principal/api/classes/principal/)
|
|
497
|
+
*
|
|
498
|
+
* @example
|
|
499
|
+
* ```ts
|
|
500
|
+
* import { Principal } from '@icp-sdk/core/principal';
|
|
501
|
+
* import { PocketIc, PocketIcServer } from '@dfinity/pic';
|
|
502
|
+
*
|
|
503
|
+
* const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
|
|
504
|
+
*
|
|
505
|
+
* const picServer = await PocketIcServer.start();
|
|
506
|
+
* const pic = await PocketIc.create(picServer.getUrl());
|
|
507
|
+
*
|
|
508
|
+
* const status = await pic.canisterStatus({ canisterId });
|
|
509
|
+
*
|
|
510
|
+
* await pic.tearDown();
|
|
511
|
+
* await picServer.stop();
|
|
512
|
+
* ```
|
|
513
|
+
*/
|
|
514
|
+
async canisterStatus({ canisterId, sender = principal_1.Principal.anonymous(), }) {
|
|
515
|
+
const payload = (0, management_canister_1.encodeCanisterStatusRequest)({
|
|
516
|
+
canister_id: canisterId,
|
|
517
|
+
});
|
|
518
|
+
const res = await this.client.updateCall({
|
|
519
|
+
canisterId: management_canister_1.MANAGEMENT_CANISTER_ID,
|
|
520
|
+
sender,
|
|
521
|
+
method: 'canister_status',
|
|
522
|
+
payload,
|
|
523
|
+
});
|
|
524
|
+
const response = (0, management_canister_1.decodeCanisterStatusResponse)(res.body);
|
|
525
|
+
return {
|
|
526
|
+
status: response.status,
|
|
527
|
+
settings: {
|
|
528
|
+
controllers: response.settings.controllers,
|
|
529
|
+
computeAllocation: response.settings.compute_allocation,
|
|
530
|
+
memoryAllocation: response.settings.memory_allocation,
|
|
531
|
+
freezingThreshold: response.settings.freezing_threshold,
|
|
532
|
+
reservedCyclesLimit: response.settings.reserved_cycles_limit,
|
|
533
|
+
},
|
|
534
|
+
moduleHash: response.module_hash[0] ?? null,
|
|
535
|
+
memorySize: response.memory_size,
|
|
536
|
+
cycles: response.cycles,
|
|
537
|
+
reservedCycles: response.reserved_cycles,
|
|
538
|
+
idleCyclesBurnedPerDay: response.idle_cycles_burned_per_day,
|
|
539
|
+
queryStats: {
|
|
540
|
+
numCallsTotal: response.query_stats.num_calls_total,
|
|
541
|
+
numInstructionsTotal: response.query_stats.num_instructions_total,
|
|
542
|
+
requestPayloadBytesTotal: response.query_stats.request_payload_bytes_total,
|
|
543
|
+
responsePayloadBytesTotal: response.query_stats.response_payload_bytes_total,
|
|
544
|
+
},
|
|
545
|
+
};
|
|
546
|
+
}
|
|
455
547
|
/**
|
|
456
548
|
* Creates an {@link Actor} for the given canister.
|
|
457
549
|
* An {@link Actor} is a typesafe class that implements the Candid interface of a canister.
|
|
@@ -1276,6 +1368,149 @@ class PocketIc {
|
|
|
1276
1368
|
additionalResponses,
|
|
1277
1369
|
});
|
|
1278
1370
|
}
|
|
1371
|
+
/**
|
|
1372
|
+
* Make the PocketIC instance live by enabling auto progress and starting the HTTP Gateway.
|
|
1373
|
+
* If the server is already live, this method will return the HTTP Gateway URL.
|
|
1374
|
+
* The PocketIC instance must be created with at least an NNS subnet in
|
|
1375
|
+
* order for `fetchRootKey` to work correctly.
|
|
1376
|
+
*
|
|
1377
|
+
* @example
|
|
1378
|
+
* ```ts
|
|
1379
|
+
* import { Principal } from '@icp-sdk/core/principal';
|
|
1380
|
+
* import { PocketIc, PocketIcServer } from '@dfinity/pic';
|
|
1381
|
+
* import { resolve } from 'node:path';
|
|
1382
|
+
*
|
|
1383
|
+
* const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
|
|
1384
|
+
* const wasm = resolve('..', '..', 'canister.wasm');
|
|
1385
|
+
*
|
|
1386
|
+
* const picServer = await PocketIcServer.start();
|
|
1387
|
+
* const pic = await PocketIc.create(picServer.getUrl(), {
|
|
1388
|
+
* nns: { state: { type: SubnetStateType.New } },
|
|
1389
|
+
* application: [{ state: { type: SubnetStateType.New } }],
|
|
1390
|
+
* });
|
|
1391
|
+
*
|
|
1392
|
+
* const canister = await pic.installCode({ canisterId, wasm });
|
|
1393
|
+
* await pic.installCode({ canisterId, wasm });
|
|
1394
|
+
*
|
|
1395
|
+
* const httpGatewayUrl = await pic.makeLive();
|
|
1396
|
+
* const agent = await HttpAgent.create({
|
|
1397
|
+
* host: httpGatewayUrl,
|
|
1398
|
+
* shouldFetchRootKey: true,
|
|
1399
|
+
* });
|
|
1400
|
+
* const actor = Actor.createActor(idlFactory, { agent, canisterId });
|
|
1401
|
+
*
|
|
1402
|
+
* await pic.stopLive();
|
|
1403
|
+
* await pic.tearDown();
|
|
1404
|
+
* await picServer.stop();
|
|
1405
|
+
* ```
|
|
1406
|
+
*
|
|
1407
|
+
* @returns The HTTP Gateway port.
|
|
1408
|
+
*/
|
|
1409
|
+
async makeLive() {
|
|
1410
|
+
const isLive = await this.client.autoProgressEnabled();
|
|
1411
|
+
if (isLive) {
|
|
1412
|
+
if ((0, util_1.isNil)(this.httpGatewayPort)) {
|
|
1413
|
+
throw new Error('Inconsistent state, PocketIC server is live but no HTTP Gateway URL is known');
|
|
1414
|
+
}
|
|
1415
|
+
return this.httpGatewayPort;
|
|
1416
|
+
}
|
|
1417
|
+
await this.client.autoProgress();
|
|
1418
|
+
this.httpGatewayPort = await this.client.startHttpGateway();
|
|
1419
|
+
return this.httpGatewayPort;
|
|
1420
|
+
}
|
|
1421
|
+
/**
|
|
1422
|
+
* Disables auto progress and stops the HTTP Gateway for the PocketIC instance.
|
|
1423
|
+
*
|
|
1424
|
+
*
|
|
1425
|
+
* @example
|
|
1426
|
+
* ```ts
|
|
1427
|
+
* import { Principal } from '@icp-sdk/core/principal';
|
|
1428
|
+
* import { PocketIc, PocketIcServer } from '@dfinity/pic';
|
|
1429
|
+
* import { resolve } from 'node:path';
|
|
1430
|
+
*
|
|
1431
|
+
* const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
|
|
1432
|
+
* const wasm = resolve('..', '..', 'canister.wasm');
|
|
1433
|
+
*
|
|
1434
|
+
* const picServer = await PocketIcServer.start();
|
|
1435
|
+
* const pic = await PocketIc.create(picServer.getUrl(), {
|
|
1436
|
+
* nns: { state: { type: SubnetStateType.New } },
|
|
1437
|
+
* application: [{ state: { type: SubnetStateType.New } }],
|
|
1438
|
+
* });
|
|
1439
|
+
*
|
|
1440
|
+
* const canister = await pic.installCode({ canisterId, wasm });
|
|
1441
|
+
* await pic.installCode({ canisterId, wasm });
|
|
1442
|
+
*
|
|
1443
|
+
* const httpGatewayUrl = await pic.makeLive();
|
|
1444
|
+
* const agent = await HttpAgent.create({
|
|
1445
|
+
* host: httpGatewayUrl,
|
|
1446
|
+
* shouldFetchRootKey: true,
|
|
1447
|
+
* });
|
|
1448
|
+
* const actor = Actor.createActor(idlFactory, { agent, canisterId });
|
|
1449
|
+
*
|
|
1450
|
+
* await pic.stopLive();
|
|
1451
|
+
* await pic.tearDown();
|
|
1452
|
+
* await picServer.stop();
|
|
1453
|
+
* ```
|
|
1454
|
+
*/
|
|
1455
|
+
async stopLive() {
|
|
1456
|
+
this.httpGatewayPort = null;
|
|
1457
|
+
await this.client.stopHttpGateway();
|
|
1458
|
+
await this.client.stopProgress();
|
|
1459
|
+
}
|
|
1460
|
+
async installCodeChunked({ wasm, arg, canisterId, mode, sender, targetSubnetId, }) {
|
|
1461
|
+
const effectivePrincipal = targetSubnetId
|
|
1462
|
+
? { subnetId: targetSubnetId }
|
|
1463
|
+
: { canisterId };
|
|
1464
|
+
const clearChunkStoreRequestPayload = (0, management_canister_1.encodeClearChunkStoreRequest)({
|
|
1465
|
+
canister_id: canisterId,
|
|
1466
|
+
});
|
|
1467
|
+
// 1. Clear existing chunk store
|
|
1468
|
+
await this.client.updateCall({
|
|
1469
|
+
canisterId: management_canister_1.MANAGEMENT_CANISTER_ID,
|
|
1470
|
+
sender,
|
|
1471
|
+
method: 'clear_chunk_store',
|
|
1472
|
+
payload: clearChunkStoreRequestPayload,
|
|
1473
|
+
effectivePrincipal,
|
|
1474
|
+
});
|
|
1475
|
+
// 2. Split WASM into chunks and upload in parallel batches
|
|
1476
|
+
const chunks = (0, util_1.splitIntoChunks)(wasm, WASM_CHUNK_SIZE);
|
|
1477
|
+
const chunkHashes = [];
|
|
1478
|
+
for (let i = 0; i < chunks.length; i += CHUNK_UPLOAD_BATCH_SIZE) {
|
|
1479
|
+
const batch = chunks.slice(i, i + CHUNK_UPLOAD_BATCH_SIZE);
|
|
1480
|
+
const chunkHashResponses = await Promise.all(batch.map(async (chunk) => {
|
|
1481
|
+
const uploadChunkRequestPayload = (0, management_canister_1.encodeUploadChunkRequest)({
|
|
1482
|
+
canister_id: canisterId,
|
|
1483
|
+
chunk,
|
|
1484
|
+
});
|
|
1485
|
+
const response = await this.client.updateCall({
|
|
1486
|
+
canisterId: management_canister_1.MANAGEMENT_CANISTER_ID,
|
|
1487
|
+
sender,
|
|
1488
|
+
method: 'upload_chunk',
|
|
1489
|
+
payload: uploadChunkRequestPayload,
|
|
1490
|
+
effectivePrincipal,
|
|
1491
|
+
});
|
|
1492
|
+
return (0, management_canister_1.decodeUploadChunkResponse)(response.body);
|
|
1493
|
+
}));
|
|
1494
|
+
chunkHashes.push(...chunkHashResponses);
|
|
1495
|
+
}
|
|
1496
|
+
// 3. Install the chunked code
|
|
1497
|
+
const installChunkedCodePayload = (0, management_canister_1.encodeInstallChunkedCodeRequest)({
|
|
1498
|
+
mode,
|
|
1499
|
+
target_canister: canisterId,
|
|
1500
|
+
store_canister: [],
|
|
1501
|
+
chunk_hashes_list: chunkHashes,
|
|
1502
|
+
wasm_module_hash: (0, util_1.sha256)(wasm),
|
|
1503
|
+
arg,
|
|
1504
|
+
sender_canister_version: [],
|
|
1505
|
+
});
|
|
1506
|
+
await this.client.updateCall({
|
|
1507
|
+
canisterId: management_canister_1.MANAGEMENT_CANISTER_ID,
|
|
1508
|
+
sender,
|
|
1509
|
+
method: 'install_chunked_code',
|
|
1510
|
+
payload: installChunkedCodePayload,
|
|
1511
|
+
effectivePrincipal,
|
|
1512
|
+
});
|
|
1513
|
+
}
|
|
1279
1514
|
}
|
|
1280
1515
|
exports.PocketIc = PocketIc;
|
|
1281
1516
|
//# sourceMappingURL=pocket-ic.js.map
|