From e50222372d436b8c83219f21d95f6b38cf385050 Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Fri, 27 Jan 2023 00:04:55 -0800 Subject: [PATCH] feat: create new @agoric/time package This will house timerMath.js, and types for TimerBrand, Timestamp, and RelativeTime. It also holds types for a TimerService, although the service implementation is in SwingSet (inside `vat-timer`). refs #6003 --- packages/agoric-cli/src/sdk-package-names.js | 1 + packages/time/CHANGELOG.md | 448 +++++++++++++++++++ packages/time/NEWS.md | 31 ++ packages/time/README.md | 61 +++ packages/time/index.js | 2 + packages/time/jsconfig.json | 19 + packages/time/package.json | 49 ++ 7 files changed, 611 insertions(+) create mode 100644 packages/time/CHANGELOG.md create mode 100644 packages/time/NEWS.md create mode 100644 packages/time/README.md create mode 100644 packages/time/index.js create mode 100644 packages/time/jsconfig.json create mode 100644 packages/time/package.json diff --git a/packages/agoric-cli/src/sdk-package-names.js b/packages/agoric-cli/src/sdk-package-names.js index 182236fe3cd1..0ab0b159477e 100644 --- a/packages/agoric-cli/src/sdk-package-names.js +++ b/packages/agoric-cli/src/sdk-package-names.js @@ -31,6 +31,7 @@ export default [ "@agoric/swingset-runner", "@agoric/swingset-vat", "@agoric/telemetry", + "@agoric/time", "@agoric/ui-components", "@agoric/vat-data", "@agoric/vats", diff --git a/packages/time/CHANGELOG.md b/packages/time/CHANGELOG.md new file mode 100644 index 000000000000..20f0666e3ea7 --- /dev/null +++ b/packages/time/CHANGELOG.md @@ -0,0 +1,448 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +### [0.2.1](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.2.0...@agoric/same-structure@0.2.1) (2022-05-28) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.2.0](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.31...@agoric/same-structure@0.2.0) (2022-04-18) + + +### ⚠ BREAKING CHANGES + +* consistent Node engine requirement (>=14.15.0) + +### Miscellaneous Chores + +* consistent Node engine requirement (>=14.15.0) ([ddc40fa](https://github.com/Agoric/agoric-sdk/commit/ddc40fa525f845ed900512c38b99f01458a3d131)) + + + +### [0.1.31](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.30...@agoric/same-structure@0.1.31) (2022-02-24) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.30](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.29...@agoric/same-structure@0.1.30) (2022-02-21) + + +### Bug Fixes + +* extract early changes from PR 4136 ([#4190](https://github.com/Agoric/agoric-sdk/issues/4190)) ([fea822e](https://github.com/Agoric/agoric-sdk/commit/fea822ec75c27c8758b872730424c0a3f1a1c623)) + + + +### [0.1.29](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.28...@agoric/same-structure@0.1.29) (2021-12-02) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.28](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.27...@agoric/same-structure@0.1.28) (2021-10-13) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.27](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.26...@agoric/same-structure@0.1.27) (2021-09-23) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.26](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.25...@agoric/same-structure@0.1.26) (2021-09-15) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.25](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.24...@agoric/same-structure@0.1.25) (2021-08-18) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.24](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.23...@agoric/same-structure@0.1.24) (2021-08-17) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.23](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.20...@agoric/same-structure@0.1.23) (2021-08-15) + + +### Bug Fixes + +* **same-structure:** Support NESM importers ([123227e](https://github.com/Agoric/agoric-sdk/commit/123227eb83c520b9c64506d2f898815163b4e9e0)) + +### 0.26.10 (2021-07-28) + + + +### [0.1.22](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.20...@agoric/same-structure@0.1.22) (2021-08-14) + + +### Bug Fixes + +* **same-structure:** Support NESM importers ([123227e](https://github.com/Agoric/agoric-sdk/commit/123227eb83c520b9c64506d2f898815163b4e9e0)) + +### 0.26.10 (2021-07-28) + + + +### [0.1.21](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.20...@agoric/same-structure@0.1.21) (2021-07-28) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.20](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.19...@agoric/same-structure@0.1.20) (2021-07-01) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.19](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.18...@agoric/same-structure@0.1.19) (2021-06-28) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.18](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.17...@agoric/same-structure@0.1.18) (2021-06-25) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.17](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.16...@agoric/same-structure@0.1.17) (2021-06-24) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.16](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.15...@agoric/same-structure@0.1.16) (2021-06-23) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.15](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.14...@agoric/same-structure@0.1.15) (2021-06-16) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +### [0.1.14](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.13...@agoric/same-structure@0.1.14) (2021-06-15) + + +### Bug Fixes + +* Pin ESM to forked version ([54dbb55](https://github.com/Agoric/agoric-sdk/commit/54dbb55d64d7ff7adb395bc4bd9d1461dd2d3c17)) + + + +## [0.1.13](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.12...@agoric/same-structure@0.1.13) (2021-05-10) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.1.12](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.11...@agoric/same-structure@0.1.12) (2021-05-05) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.1.11](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.10...@agoric/same-structure@0.1.11) (2021-05-05) + + +### Bug Fixes + +* settle REMOTE_STYLE name ([#2900](https://github.com/Agoric/agoric-sdk/issues/2900)) ([3dc6638](https://github.com/Agoric/agoric-sdk/commit/3dc66385b85cb3e8a1056b8d6e64cd3e448c041f)) +* split marshal module ([#2803](https://github.com/Agoric/agoric-sdk/issues/2803)) ([2e19e78](https://github.com/Agoric/agoric-sdk/commit/2e19e7878bc06dd71e166e13c9cce462b3d5ff7a)) + + + + + +## [0.1.10](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.9...@agoric/same-structure@0.1.10) (2021-04-22) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.1.9](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.8...@agoric/same-structure@0.1.9) (2021-04-18) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.1.8](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.7...@agoric/same-structure@0.1.8) (2021-04-16) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.1.7](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.6...@agoric/same-structure@0.1.7) (2021-04-14) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.1.6](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.5...@agoric/same-structure@0.1.6) (2021-04-07) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.1.5](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.4...@agoric/same-structure@0.1.5) (2021-04-06) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.1.4](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.3...@agoric/same-structure@0.1.4) (2021-03-24) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.1.3](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.2...@agoric/same-structure@0.1.3) (2021-03-16) + + +### Bug Fixes + +* make separate 'test:xs' target, remove XS from 'test' target ([b9c1a69](https://github.com/Agoric/agoric-sdk/commit/b9c1a6987093fc8e09e8aba7acd2a1618413bac8)), closes [#2647](https://github.com/Agoric/agoric-sdk/issues/2647) + + + + + +## [0.1.2](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.1...@agoric/same-structure@0.1.2) (2021-02-22) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.1.1](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.1.0...@agoric/same-structure@0.1.1) (2021-02-16) + + +### Bug Fixes + +* review comments ([7db7e5c](https://github.com/Agoric/agoric-sdk/commit/7db7e5c4c569dfedff8d748dd58893218b0a2458)) +* use assert rather than FooError constructors ([f860c5b](https://github.com/Agoric/agoric-sdk/commit/f860c5bf5add165a08cb5bd543502857c3f57998)) + + + + + +# [0.1.0](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.12...@agoric/same-structure@0.1.0) (2020-12-10) + + +### Features + +* **import-bundle:** Preliminary support Endo zip hex bundle format ([#1983](https://github.com/Agoric/agoric-sdk/issues/1983)) ([983681b](https://github.com/Agoric/agoric-sdk/commit/983681bfc4bf512b6bd90806ed9220cd4fefc13c)) + + + + + +## [0.0.12](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.12-dev.0...@agoric/same-structure@0.0.12) (2020-11-07) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.12-dev.0](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.11...@agoric/same-structure@0.0.12-dev.0) (2020-10-19) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.11](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.11-dev.2...@agoric/same-structure@0.0.11) (2020-10-11) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.11-dev.2](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.11-dev.1...@agoric/same-structure@0.0.11-dev.2) (2020-09-18) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.11-dev.1](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.11-dev.0...@agoric/same-structure@0.0.11-dev.1) (2020-09-18) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.11-dev.0](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.10...@agoric/same-structure@0.0.11-dev.0) (2020-09-18) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.10](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.9...@agoric/same-structure@0.0.10) (2020-09-16) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.9](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.8...@agoric/same-structure@0.0.9) (2020-08-31) + + +### Bug Fixes + +* reduce inconsistency among our linting rules ([#1492](https://github.com/Agoric/agoric-sdk/issues/1492)) ([b6b675e](https://github.com/Agoric/agoric-sdk/commit/b6b675e2de110e2af19cad784a66220cab21dacf)) +* use REMOTE_STYLE rather than 'presence' to prepare ([#1577](https://github.com/Agoric/agoric-sdk/issues/1577)) ([6b97ae8](https://github.com/Agoric/agoric-sdk/commit/6b97ae8670303631313a65d12393d7ad226b941d)) + + + + + +## [0.0.8](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.7...@agoric/same-structure@0.0.8) (2020-06-30) + + +### Bug Fixes + +* replace openDetail with quoting q ([#1134](https://github.com/Agoric/agoric-sdk/issues/1134)) ([67808a4](https://github.com/Agoric/agoric-sdk/commit/67808a4df515630ef7dc77c59054382f626ece96)) + + + + + +## [0.0.7](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.6...@agoric/same-structure@0.0.7) (2020-05-17) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.6](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.5...@agoric/same-structure@0.0.6) (2020-05-10) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.5](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.4...@agoric/same-structure@0.0.5) (2020-05-04) + + +### Bug Fixes + +* use the new (typed) harden package ([2eb1af0](https://github.com/Agoric/agoric-sdk/commit/2eb1af08fe3967629a3ce165752fd501a5c85a96)) + + + + + +## [0.0.4](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.4-alpha.0...@agoric/same-structure@0.0.4) (2020-04-13) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.4-alpha.0](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.3...@agoric/same-structure@0.0.4-alpha.0) (2020-04-12) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.3](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.3-alpha.0...@agoric/same-structure@0.0.3) (2020-04-02) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## [0.0.3-alpha.0](https://github.com/Agoric/agoric-sdk/compare/@agoric/same-structure@0.0.2...@agoric/same-structure@0.0.3-alpha.0) (2020-04-02) + +**Note:** Version bump only for package @agoric/same-structure + + + + + +## 0.0.2 (2020-03-26) + + +### Bug Fixes + +* first draft use collection equality ([6acbde7](https://github.com/Agoric/agoric-sdk/commit/6acbde71ec82101ec8da9eaafc729bab1fdd6df9)) diff --git a/packages/time/NEWS.md b/packages/time/NEWS.md new file mode 100644 index 000000000000..2f20818b6782 --- /dev/null +++ b/packages/time/NEWS.md @@ -0,0 +1,31 @@ +User-visible changes in @agoric/same-structure: + +## Next Release + +This entire package is now deprecated, with its code migrated +to `@agoric/store` with the exports renamed to their modern +names. This package remains for now in order to +re-export the new names from `@agoric/store` under the old +deprecated names that this package used to export. Please update +uses to the new names as imported from `@agoric/store`. +```js +import { + sameStructure, + isComparable, + mustBeComparable, + allComparable, +} from '@agoric/same-structure'; +``` +to +```js +import { + keyEQ, + isKey, + assertKey, + fulfillToKey, +} from '@endo/marshal'; + +## Release 0.0.1 (3-Feb-2020) + +Moved out of ERTP and created new package `@agoric/same-structure`. +Now depends on `@agoric/insist`. diff --git a/packages/time/README.md b/packages/time/README.md new file mode 100644 index 000000000000..d7564c8fff75 --- /dev/null +++ b/packages/time/README.md @@ -0,0 +1,61 @@ +# Time + +"Time is an illusion. Lunchtime doubly so." + -- Douglas Adams, The Hitchhiker's Guide to the Galaxy + +This package provides the definitions of branded time values, as well as "timerMath" functions to compute and combine timestamps and time deltas. It also defines the `TimerService`, a SwingSet service that provides notification when certain amounts of time have elapsed. The service itself is provided by the SwingSet kernel to the bootstrap vat, which might share it with other vat code. + +## TimerBrand + +In the Agoric platform, "time" is a number (a JS `BigInt`), but is not an absolute: there can be multiple sources of time, and their values are not comparable. A solo machine may have its own local clock ("wallclock time"), but this is different than the "chain time" that the voting members of a consensus machine (i.e. validators on a blockchain) agree upon. Two different chains will have unrelated clocks (they might both attempt to track UTC, but in general they won't track each other precisely, so any decisions about global ordering must involved messages and something like a Lamport Clock protocol). + +We must avoid confusion, in particular we must avoid security vulnerabilities that arise when two parties think they've agreed upon an e.g. contract expiration time, but it turns out they were speaking about different units. To this end, each timestamp is associated with a "TimerBrand". The timerMath functions refuse to mingle differently-branded time values. + +The TimerBrand is a powerless object, mainly used for its identity: you can compare two TimerBrands from different sources, and if they are equal, those sources are using compatible time values. + +The TimerBrand object has two methods to support comparison: + +* `timerbrand.isMyTimer(timerService)` returns `true` if the TimerService matches the brand +* `timerbrand.isMyClock(clock)` returns `true` if the Clock matches the brand + +## Absolute Time and Deltas + +The `Timestamp` is a record which describes a specific moment in time (along with its brand). Given two Timestamps with the same brand, you can ask about equality and inequality ("which one happened first?"). + +You can also subtract one from the other to obtain a `RelativeTime` record. These deltas can be positive or negative. Then you can add a `Timestamp` and a `RelativeTime` to get a new `Timestamp`. Deltas can also be multiplied by a `BigInt` to replace repeated addition, and divided in certain circumstances. + +The functions in `timeMath.js` describe the full range of things you can do with `Timestamp` and `RelativeTime` records. + +## Clocks + +A `Clock` is a read-only service that provides the "current" time. It is an object with two methods: + +* `getCurrentTimestamp() => Timestamp` +* `getTimerBrand() => TimerBrand` + +## TimerService + +The `TimerService` is a service that allows one-shot or repeating "alarms" to be set. These can trigger user code at some point in the future. + +This package defines the `TimerService` interfaces, but does not implement them. Time (specifically the ability to learn the current time, and to arrange for activity in the future) is a special IO authority, and must come from the host platform. The SwingSet kernel creates a "timer vat", and the host application must call special functions to teach it about the passage of time. Userspace code can only access `TimerService` if the bootstrap vat chooses to share access to this object. + +The `TimerService` API provides three "one-shot" mechanisms: + +* `ts.setWakeup(when, waker, cancelToken?)` : calls `E(waker).wake(when)` upon triggering +* `ts.wakeAt(when, cancelToken?)` : returns a Promise that resolves with `when` upon triggering +* `ts.delay(delay, cancelToken?)` : returns a Promise that resolves with `now+when` at `now` units in the future + +The optionsl `cancelToken` argument is an arbitrary remotely-referenceable object. If provided, a subsequent call to `ts.cancel(cancelToken)` will abandon the wakeup (unless it has fired already, in which case `ts.cancel()` is silently ignored). The waker is not notified of cancellation, but the APIs which use Promises will see those Promises rejected with an `Error('TimerCancelled')`. + +The API also provides three repeating mechanisms: + +* `ts.makeRepeater(delay, interval, cancelToken?)` returns a `TimerRepeater` configured to fire at `now+delay`, and then again at `now+delay+interval`, etc + * to use it, you must call `repeater.schedule(waker)`, which will be called just like `ts.setWakeup)` + * the repeater doesn't reset until the waker's `wake()` method's return promise resolves + * if that method throws an Error, the repeater is cancelled + * you can call `repeater.disable()` to stop the repeater + * each repeater can only have one active waker +* `ts.repeatAfter(delay, interval, handler, cancelToken?)` takes a warker as the `handler` argument directly, which removes the need to call `.schedule` +* `ts.makeNotifier(delay, interval, cancelToken?)` returns a Notifier, which fires with successive Timestamp values (`now+delay`, `now+delay+interval`, `now+delay+2*interval`, etc). As with all Notifiers, the subscriber must repeatedly call `getUpdateSince()` to keep getting new values. + +The `TimerService` API also provides `getClock()` to retrieve a limited-authority `Clock`, and `getTimerBrand()` to return the particular brand that this service uses for all Timestamps. It also provides `getCurrentTimestamp()` directly. diff --git a/packages/time/index.js b/packages/time/index.js new file mode 100644 index 000000000000..6a91734c5e78 --- /dev/null +++ b/packages/time/index.js @@ -0,0 +1,2 @@ +export * from './src/timeMath.js'; +export * from './src/typeGuards.js'; diff --git a/packages/time/jsconfig.json b/packages/time/jsconfig.json new file mode 100644 index 000000000000..d5e53766e0e4 --- /dev/null +++ b/packages/time/jsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "checkJs": true, + "noEmit": true, + "downlevelIteration": true, + "strictNullChecks": true, + "noImplicitThis": true, + "moduleResolution": "node", + }, + "include": [ + "build", + "scripts", + "src", + "test", + "tools", + ], +} diff --git a/packages/time/package.json b/packages/time/package.json new file mode 100644 index 000000000000..825842419d9b --- /dev/null +++ b/packages/time/package.json @@ -0,0 +1,49 @@ +{ + "name": "@agoric/time", + "version": "0.2.1", + "description": "Timestamps, time math, timer service API definition", + "type": "module", + "main": "index.js", + "engines": { + "node": ">=14.15.0" + }, + "scripts": { + "build": "exit 0", + "test": "ava", + "test:xs": "exit 0", + "lint": "yarn lint:types && yarn lint:eslint", + "lint:types": "tsc -p jsconfig.json", + "lint:eslint": "eslint .", + "lint-fix": "yarn lint:eslint --fix" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Agoric/agoric-sdk.git" + }, + "keywords": [ + "timestamp" + ], + "author": "Agoric", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/Agoric/agoric-sdk/issues" + }, + "homepage": "https://github.com/Agoric/agoric-sdk#readme", + "dependencies": { + "@agoric/assert": "^0.5.1", + "@agoric/nat": "^4.1.0", + "@agoric/store": "^0.8.3" + }, + "devDependencies": { + "@endo/far": "^0.2.14", + "@endo/init": "^0.5.52", + "ava": "^5.1.0" + }, + "files": [ + "*.js", + "NEWS.md" + ], + "publishConfig": { + "access": "public" + } +}