@agoric/zoe 0.26.3-dev-2f3ca19.0 → 0.26.3-dev-9c97014.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/bundles/bundle-contractFacet-js-meta.json +91 -91
- package/bundles/bundle-contractFacet.js +1 -1
- package/package.json +14 -14
- package/src/contracts/coveredCall.d.ts.map +1 -1
- package/src/contracts/coveredCall.js +1 -6
- package/src/typeGuards.js +1 -1
- package/src/zoeService/internal-types.d.ts +1 -2
- package/src/zoeService/internal-types.d.ts.map +1 -1
- package/src/zoeService/internal-types.js +1 -7
- package/src/zoeService/types-ambient.d.ts +6 -2
- package/src/zoeService/types-ambient.d.ts.map +1 -1
- package/src/zoeService/types-ambient.js +4 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/zoe",
|
|
3
|
-
"version": "0.26.3-dev-
|
|
3
|
+
"version": "0.26.3-dev-9c97014.0+9c97014",
|
|
4
4
|
"description": "Zoe: the Smart Contract Framework for Offer Enforcement",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/zoeService/zoe.js",
|
|
@@ -43,17 +43,17 @@
|
|
|
43
43
|
},
|
|
44
44
|
"homepage": "https://github.com/Agoric/agoric-sdk#readme",
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@agoric/base-zone": "0.1.1-dev-
|
|
47
|
-
"@agoric/ertp": "0.16.3-dev-
|
|
48
|
-
"@agoric/internal": "0.3.3-dev-
|
|
49
|
-
"@agoric/notifier": "0.6.3-dev-
|
|
50
|
-
"@agoric/store": "0.9.3-dev-
|
|
51
|
-
"@agoric/swingset-liveslots": "0.10.3-dev-
|
|
52
|
-
"@agoric/swingset-vat": "0.32.3-dev-
|
|
53
|
-
"@agoric/time": "0.3.3-dev-
|
|
54
|
-
"@agoric/vat-data": "0.5.3-dev-
|
|
55
|
-
"@agoric/vow": "0.1.1-dev-
|
|
56
|
-
"@agoric/zone": "0.2.3-dev-
|
|
46
|
+
"@agoric/base-zone": "0.1.1-dev-9c97014.0+9c97014",
|
|
47
|
+
"@agoric/ertp": "0.16.3-dev-9c97014.0+9c97014",
|
|
48
|
+
"@agoric/internal": "0.3.3-dev-9c97014.0+9c97014",
|
|
49
|
+
"@agoric/notifier": "0.6.3-dev-9c97014.0+9c97014",
|
|
50
|
+
"@agoric/store": "0.9.3-dev-9c97014.0+9c97014",
|
|
51
|
+
"@agoric/swingset-liveslots": "0.10.3-dev-9c97014.0+9c97014",
|
|
52
|
+
"@agoric/swingset-vat": "0.32.3-dev-9c97014.0+9c97014",
|
|
53
|
+
"@agoric/time": "0.3.3-dev-9c97014.0+9c97014",
|
|
54
|
+
"@agoric/vat-data": "0.5.3-dev-9c97014.0+9c97014",
|
|
55
|
+
"@agoric/vow": "0.1.1-dev-9c97014.0+9c97014",
|
|
56
|
+
"@agoric/zone": "0.2.3-dev-9c97014.0+9c97014",
|
|
57
57
|
"@endo/bundle-source": "^3.5.0",
|
|
58
58
|
"@endo/captp": "^4.4.3",
|
|
59
59
|
"@endo/common": "^1.2.8",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"yargs-parser": "^21.1.1"
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
|
-
"@agoric/kmarshal": "0.1.1-dev-
|
|
73
|
+
"@agoric/kmarshal": "0.1.1-dev-9c97014.0+9c97014",
|
|
74
74
|
"@endo/init": "^1.1.7",
|
|
75
75
|
"ava": "^5.3.0",
|
|
76
76
|
"c8": "^10.1.2",
|
|
@@ -100,5 +100,5 @@
|
|
|
100
100
|
"typeCoverage": {
|
|
101
101
|
"atLeast": 85.06
|
|
102
102
|
},
|
|
103
|
-
"gitHead": "
|
|
103
|
+
"gitHead": "9c97014c60450dd3b09f164b150d1fa5761d24ec"
|
|
104
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coveredCall.d.ts","sourceRoot":"","sources":["coveredCall.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,2BAFW,GAAG;;
|
|
1
|
+
{"version":3,"file":"coveredCall.d.ts","sourceRoot":"","sources":["coveredCall.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,2BAFW,GAAG;;EAwCb"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Fail, q } from '@endo/errors';
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
// Eventually will be importable from '@agoric/zoe-contract-support'
|
|
4
4
|
import { swapExact } from '../contractSupport/index.js';
|
|
5
5
|
import { isAfterDeadlineExitRule } from '../typeGuards.js';
|
|
@@ -69,11 +69,6 @@ const start = zcf => {
|
|
|
69
69
|
|
|
70
70
|
/** @type {OfferHandler} */
|
|
71
71
|
const makeOption = sellSeat => {
|
|
72
|
-
mustMatch(
|
|
73
|
-
sellSeat.getProposal(),
|
|
74
|
-
M.splitRecord({ exit: { afterDeadline: M.any() } }),
|
|
75
|
-
'exit afterDeadline',
|
|
76
|
-
);
|
|
77
72
|
const sellSeatExitRule = sellSeat.getProposal().exit;
|
|
78
73
|
if (!isAfterDeadlineExitRule(sellSeatExitRule)) {
|
|
79
74
|
throw Fail`the seller must have an afterDeadline exitRule, but instead had ${q(
|
package/src/typeGuards.js
CHANGED
|
@@ -367,7 +367,7 @@ export const ZoeServiceI = M.interface('ZoeService', {
|
|
|
367
367
|
}),
|
|
368
368
|
getInvitationDetails: M.call(M.eref(InvitationShape)).returns(M.any()),
|
|
369
369
|
getProposalShapeForInvitation: M.call(InvitationHandleShape).returns(
|
|
370
|
-
M.opt(
|
|
370
|
+
M.opt(M.pattern()),
|
|
371
371
|
),
|
|
372
372
|
});
|
|
373
373
|
|
|
@@ -61,7 +61,6 @@ type ZoeInstanceStorageManager = {
|
|
|
61
61
|
*/
|
|
62
62
|
type MakeZoeInstanceStorageManager = (installation: Installation, customTerms: object, uncleanIssuerKeywordRecord: IssuerKeywordRecord, instance: Instance, contractBundleCap: BundleCap, instanceLabel: string) => Promise<ZoeInstanceStorageManager>;
|
|
63
63
|
type GetBundleCapForID = (id: BundleID) => Promise<BundleCap>;
|
|
64
|
-
type GetProposalShapeForInvitation = (invitationHandle: InvitationHandle) => Pattern | undefined;
|
|
65
64
|
type ZoeStorageManager = {
|
|
66
65
|
makeZoeInstanceStorageManager: MakeZoeInstanceStorageManager;
|
|
67
66
|
getAssetKindByBrand: GetAssetKindByBrand;
|
|
@@ -79,7 +78,7 @@ type ZoeStorageManager = {
|
|
|
79
78
|
getInstallationForInstance: GetInstallationForInstance;
|
|
80
79
|
getInstanceAdmin: GetInstanceAdmin;
|
|
81
80
|
unwrapInstallation: UnwrapInstallation;
|
|
82
|
-
getProposalShapeForInvitation:
|
|
81
|
+
getProposalShapeForInvitation: (invitationHandle: InvitationHandle) => Pattern | undefined;
|
|
83
82
|
};
|
|
84
83
|
/**
|
|
85
84
|
* Use VatAdminSvc to create a new vat, but only with the code of the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-types.d.ts","sourceRoot":"","sources":["internal-types.js"],"names":[],"mappings":";;;4BAMW,MAAM,SACN,KAAK,KACH,IAAI,CAAC,IAAI,CAAC;;;;;;;;kCAWZ,MAAM,SACN,KAAK,KACH,KAAK;;;;;;;kCAUP,cAAc,YACd,qBAAqB,KACnB,OAAO,CAAC,UAAU,CAAC;oCAKrB,QAAQ,iBACR,aAAa,KACX,IAAI;mCAKN,QAAQ,KACN,aAAa;sCAKf,QAAQ,KACN,IAAI;;;;;0CASN,IAAI,CAAC,YAAY,CAAC,KAChB,IAAI,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,EAAC,YAAY,CAAA;CAC1B,CAAC;8BAMQ,aAAa;;cAKZ,MAAM,QAAQ;gBACd,MAAM,mBAAmB;eACzB,MAAM,kBAAkB;gBACxB,GAAG,CAAC,YAAY,CAAC;iBACjB,WAAW;qBACX,eAAe;uBACf,MAAM,cAAc;sBACpB,gBAAgB;uBAChB,iBAAiB;yBACjB,mBAAmB;oBACnB,8BAA8B;yBAC9B,MAAM,MAAM;;;;aACZ,MAAM,MAAM;;;;kBACZ,MAAM,OAAO,sBAAsB,EAAE,aAAa;;;;;;;;oDAUrD,YAAY,eACZ,MAAM,8BACN,mBAAmB,YACnB,QAAQ,qBACR,SAAS,iBACT,MAAM,KACJ,OAAO,CAAC,yBAAyB,CAAC;8BAKpC,QAAQ,KACN,OAAO,CAAC,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"internal-types.d.ts","sourceRoot":"","sources":["internal-types.js"],"names":[],"mappings":";;;4BAMW,MAAM,SACN,KAAK,KACH,IAAI,CAAC,IAAI,CAAC;;;;;;;;kCAWZ,MAAM,SACN,KAAK,KACH,KAAK;;;;;;;kCAUP,cAAc,YACd,qBAAqB,KACnB,OAAO,CAAC,UAAU,CAAC;oCAKrB,QAAQ,iBACR,aAAa,KACX,IAAI;mCAKN,QAAQ,KACN,aAAa;sCAKf,QAAQ,KACN,IAAI;;;;;0CASN,IAAI,CAAC,YAAY,CAAC,KAChB,IAAI,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,EAAC,YAAY,CAAA;CAC1B,CAAC;8BAMQ,aAAa;;cAKZ,MAAM,QAAQ;gBACd,MAAM,mBAAmB;eACzB,MAAM,kBAAkB;gBACxB,GAAG,CAAC,YAAY,CAAC;iBACjB,WAAW;qBACX,eAAe;uBACf,MAAM,cAAc;sBACpB,gBAAgB;uBAChB,iBAAiB;yBACjB,mBAAmB;oBACnB,8BAA8B;yBAC9B,MAAM,MAAM;;;;aACZ,MAAM,MAAM;;;;kBACZ,MAAM,OAAO,sBAAsB,EAAE,aAAa;;;;;;;;oDAUrD,YAAY,eACZ,MAAM,8BACN,mBAAmB,YACnB,QAAQ,qBACR,SAAS,iBACT,MAAM,KACJ,OAAO,CAAC,yBAAyB,CAAC;8BAKpC,QAAQ,KACN,OAAO,CAAC,SAAS,CAAC;;mCAKjB,6BAA6B;yBAC7B,mBAAmB;qBACnB,eAAe;sBACf,MAAM,CAAC,KAAK,CAAC;mBACb,aAAa;qBACb,eAAe;iCACf,2BAA2B;oBAC3B,OAAO,YAAY,EAAE,cAAc;eACnC,SAAS;gBACT,UAAU;cACV,OAAO,YAAY,EAAE,QAAQ;oBAC7B,cAAc;oBACd,cAAc;gCACd,0BAA0B;sBAC1B,gBAAgB;wBAChB,kBAAkB;mCAClB,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,OAAO,GAAG,SAAS;;;;;;wCAQ9D,SAAS,iBACT,MAAM,KACJ,OAAO,CAAC,OAAO,sBAAsB,EAAE,gBAAgB,CAAC;uCAK1D,aAAa,KACX,SAAS,CAAC,KAAK,CAAC"}
|
|
@@ -114,12 +114,6 @@
|
|
|
114
114
|
* @returns {Promise<BundleCap>}
|
|
115
115
|
*/
|
|
116
116
|
|
|
117
|
-
/**
|
|
118
|
-
* @callback GetProposalShapeForInvitation
|
|
119
|
-
* @param {InvitationHandle} invitationHandle
|
|
120
|
-
* @returns {Pattern | undefined}
|
|
121
|
-
*/
|
|
122
|
-
|
|
123
117
|
/**
|
|
124
118
|
* @typedef ZoeStorageManager
|
|
125
119
|
* @property {MakeZoeInstanceStorageManager} makeZoeInstanceStorageManager
|
|
@@ -138,7 +132,7 @@
|
|
|
138
132
|
* @property {GetInstallationForInstance} getInstallationForInstance
|
|
139
133
|
* @property {GetInstanceAdmin} getInstanceAdmin
|
|
140
134
|
* @property {UnwrapInstallation} unwrapInstallation
|
|
141
|
-
* @property {
|
|
135
|
+
* @property {(invitationHandle: InvitationHandle) => Pattern | undefined} getProposalShapeForInvitation
|
|
142
136
|
*/
|
|
143
137
|
|
|
144
138
|
/**
|
|
@@ -34,13 +34,17 @@ type ZoeService = {
|
|
|
34
34
|
getInstance: GetInstance;
|
|
35
35
|
getInstallation: GetInstallation;
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
37
|
+
* Return an object with the instance, installation, description, invitation
|
|
38
|
+
* handle, and any custom properties specific to the contract.
|
|
39
39
|
*/
|
|
40
40
|
getInvitationDetails: GetInvitationDetails;
|
|
41
41
|
getFeeIssuer: GetFeeIssuer;
|
|
42
42
|
getConfiguration: GetConfiguration;
|
|
43
43
|
getBundleIDFromInstallation: GetBundleIDFromInstallation;
|
|
44
|
+
/**
|
|
45
|
+
* Return the pattern (if any) associated with the invitationHandle that a
|
|
46
|
+
* proposal is required to match to be accepted by zoe.offer().
|
|
47
|
+
*/
|
|
44
48
|
getProposalShapeForInvitation: (invitationHandle: InvitationHandle) => Pattern | undefined;
|
|
45
49
|
};
|
|
46
50
|
type GetInvitationIssuer = () => Promise<Issuer<"set", InvitationDetails>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-ambient.d.ts","sourceRoot":"","sources":["types-ambient.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;yBAmBc,mBAAmB;aASnB,aAAa;qBACb,eAAe;mBACf,OAAO,YAAY,EAAE,aAAa;WAClC,KAAK;oBACL,OAAO,YAAY,EAAE,cAAc;gBACnC,UAAU;eACV,SAAS;cACT,OAAO,YAAY,EAAE,QAAQ;oBAC7B,cAAc;gCACd,0BAA0B;iBAC1B,WAAW;qBACX,eAAe;;;;;0BACf,oBAAoB;kBAGpB,YAAY;sBACZ,gBAAgB;iCAChB,2BAA2B
|
|
1
|
+
{"version":3,"file":"types-ambient.d.ts","sourceRoot":"","sources":["types-ambient.js"],"names":[],"mappings":"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"}
|
|
@@ -39,12 +39,14 @@
|
|
|
39
39
|
* @property {GetInstance} getInstance
|
|
40
40
|
* @property {GetInstallation} getInstallation
|
|
41
41
|
* @property {GetInvitationDetails} getInvitationDetails
|
|
42
|
-
*
|
|
43
|
-
*
|
|
42
|
+
* Return an object with the instance, installation, description, invitation
|
|
43
|
+
* handle, and any custom properties specific to the contract.
|
|
44
44
|
* @property {GetFeeIssuer} getFeeIssuer
|
|
45
45
|
* @property {GetConfiguration} getConfiguration
|
|
46
46
|
* @property {GetBundleIDFromInstallation} getBundleIDFromInstallation
|
|
47
47
|
* @property {(invitationHandle: InvitationHandle) => Pattern | undefined} getProposalShapeForInvitation
|
|
48
|
+
* Return the pattern (if any) associated with the invitationHandle that a
|
|
49
|
+
* proposal is required to match to be accepted by zoe.offer().
|
|
48
50
|
*/
|
|
49
51
|
|
|
50
52
|
/**
|