xrpjson 1.0.1 → 1.0.3
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/README.md
CHANGED
|
@@ -131,13 +131,13 @@ construct thousands of transactions per second.
|
|
|
131
131
|
Every factory is verified against **three canonical sources** before
|
|
132
132
|
landing:
|
|
133
133
|
|
|
134
|
-
1. **xrpl.js 5.3.0** at
|
|
134
|
+
1. **xrpl.js 5.3.0** at `xrpl.js` — the canonical
|
|
135
135
|
JavaScript validator. We check what `validate<Transaction>` does and
|
|
136
136
|
*what it skips*.
|
|
137
|
-
2. **xrpl.org docs** at
|
|
137
|
+
2. **xrpl.org docs** at `xrpl-dev-portal` — the
|
|
138
138
|
human-readable reference. We extract the field tables, internal
|
|
139
139
|
types, and error code catalog.
|
|
140
|
-
3. **XLS specs** at
|
|
140
|
+
3. **XLS specs** at `xrpl-standards` — the
|
|
141
141
|
authoritative spec text. We read the amendment's field table,
|
|
142
142
|
preclaim rules, and cross-field invariants.
|
|
143
143
|
|
|
@@ -60,6 +60,9 @@
|
|
|
60
60
|
* non-negative integers when provided.**
|
|
61
61
|
* Source: xrpl.org `escrowcreate.md` — fields are typed `UInt32`.
|
|
62
62
|
* The class accepts negative numbers as JavaScript `number`s.
|
|
63
|
+
* Note: the lower bound is `>= 0` (seconds since the Ripple Epoch),
|
|
64
|
+
* NOT `>= RIPPLE_EPOCH_OFFSET` (which would incorrectly reject every
|
|
65
|
+
* valid pre-2030 timestamp).
|
|
63
66
|
*/
|
|
64
67
|
import type { Amount } from '../../types/amounts.js';
|
|
65
68
|
export interface EscrowCreateProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escrow-create.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/escrow-create.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"escrow-create.d.ts","sourceRoot":"","sources":["../../../src/fp/factories/escrow-create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAarD,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,YAAa,SAAQ,QAAQ,CAAC,iBAAiB,CAAC;IAC/D,QAAQ,CAAC,eAAe,EAAE,cAAc,CAAC;IACzC,QAAQ,IAAI,IAAI,CAAC;IACjB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,YAAY,CAAC;CAC3D;AAqED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CA4GnE"}
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import { isAccount, isAmount, isHex, isNumber, isString, } from '../../validation/helpers.js';
|
|
2
2
|
import { ValidationError } from '../../errors.js';
|
|
3
3
|
import { buildFrozenTx, mergeForWith, require } from '../shape.js';
|
|
4
|
-
// ─── Spec constants ──────────────────────────────────────────────────
|
|
5
|
-
/**
|
|
6
|
-
* Ripple Epoch offset (seconds) between UNIX epoch (1970-01-01) and the
|
|
7
|
-
* XRPL reference epoch (2000-01-01).
|
|
8
|
-
*/
|
|
9
|
-
const RIPPLE_EPOCH_OFFSET = 946684800;
|
|
10
4
|
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
11
5
|
/**
|
|
12
6
|
* Per xrpl.js docs (escrowCreate.ts:25–28): "Amount … Must always be a
|
|
@@ -45,13 +39,25 @@ function isUInt32(value) {
|
|
|
45
39
|
value <= 0xffffffff);
|
|
46
40
|
}
|
|
47
41
|
/**
|
|
48
|
-
* Validate a Ripple Epoch timestamp (`UInt32`,
|
|
49
|
-
*
|
|
42
|
+
* Validate a Ripple Epoch timestamp (`UInt32`, seconds since 2000-01-01).
|
|
43
|
+
*
|
|
44
|
+
* The value is "seconds since the Ripple Epoch" — so any non-negative
|
|
45
|
+
* integer up to 2^32-1 is valid. The lower bound is 0, NOT the
|
|
46
|
+
* Ripple Epoch offset (`946684800`) — that would compare a Ripple Epoch
|
|
47
|
+
* value against a UNIX timestamp value and reject every valid timestamp
|
|
48
|
+
* before 2030.
|
|
49
|
+
*
|
|
50
|
+
* Source: xrpl-dev-portal/repo/docs/references/protocol/transactions/types/escrowcreate.md
|
|
51
|
+
* — "`CancelAfter` … The time, in seconds since the Ripple Epoch, when this
|
|
52
|
+
* escrow expires." Internal type `UInt32`. Example value in the docs:
|
|
53
|
+
* `533257958` (≈ 2016-12-01), well below `RIPPLE_EPOCH_OFFSET`.
|
|
54
|
+
*
|
|
55
|
+
* Used for `CancelAfter` / `FinishAfter`.
|
|
50
56
|
*/
|
|
51
57
|
function isRippleEpochUInt32(value) {
|
|
52
58
|
return (isNumber(value) &&
|
|
53
59
|
Number.isInteger(value) &&
|
|
54
|
-
value >=
|
|
60
|
+
value >= 0 &&
|
|
55
61
|
value <= 0xffffffff);
|
|
56
62
|
}
|
|
57
63
|
// ─── Factory ─────────────────────────────────────────────────────────
|
|
@@ -79,10 +85,10 @@ export function escrowCreate(props) {
|
|
|
79
85
|
throw new ValidationError('EscrowCreate: either CancelAfter or FinishAfter must be specified');
|
|
80
86
|
}
|
|
81
87
|
if (props.CancelAfter !== undefined && !isRippleEpochUInt32(props.CancelAfter)) {
|
|
82
|
-
throw new ValidationError('EscrowCreate: CancelAfter must be a
|
|
88
|
+
throw new ValidationError('EscrowCreate: CancelAfter must be a non-negative integer in seconds since the Ripple Epoch (UInt32)');
|
|
83
89
|
}
|
|
84
90
|
if (props.FinishAfter !== undefined && !isRippleEpochUInt32(props.FinishAfter)) {
|
|
85
|
-
throw new ValidationError('EscrowCreate: FinishAfter must be a
|
|
91
|
+
throw new ValidationError('EscrowCreate: FinishAfter must be a non-negative integer in seconds since the Ripple Epoch (UInt32)');
|
|
86
92
|
}
|
|
87
93
|
if (props.CancelAfter !== undefined &&
|
|
88
94
|
props.FinishAfter !== undefined &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escrow-create.js","sourceRoot":"","sources":["../../../src/fp/factories/escrow-create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"escrow-create.js","sourceRoot":"","sources":["../../../src/fp/factories/escrow-create.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xrpjson",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Functional transaction factories for the XRP Ledger — 79 frozen-shape builders verified against xrpl.js, xrpl.org, and XLS specs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/fp/index.js",
|
|
@@ -64,4 +64,4 @@
|
|
|
64
64
|
"url": "https://github.com/Jonathan-Dobson/xrpjson/issues"
|
|
65
65
|
},
|
|
66
66
|
"homepage": "https://github.com/Jonathan-Dobson/xrpjson#readme"
|
|
67
|
-
}
|
|
67
|
+
}
|