wao 0.32.2 → 0.33.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/cjs/erl_json.js +317 -0
- package/cjs/erl_str.js +1037 -0
- package/cjs/hb.js +8 -22
- package/cjs/http.js +674 -0
- package/cjs/{httpsig.js → httpsig2.js} +5 -5
- package/cjs/hyperbeam.js +2 -1
- package/cjs/utils.js +8 -36
- package/esm/erl_json.js +289 -0
- package/esm/erl_str.js +1139 -0
- package/esm/hb.js +4 -20
- package/esm/http.js +619 -0
- package/esm/{httpsig.js → httpsig2.js} +2 -1
- package/esm/hyperbeam.js +1 -1
- package/esm/utils.js +7 -1
- package/package.json +3 -2
- package/cjs/collect-body-keys.js +0 -470
- package/cjs/encode-utils.js +0 -241
- package/cjs/encode.js +0 -1338
- package/cjs/http-message-signatures/httpbis.js +0 -497
- package/cjs/http-message-signatures/index.js +0 -26
- package/cjs/http-message-signatures/structured-header.js +0 -129
- package/cjs/id.js +0 -470
- package/cjs/send.js +0 -192
- package/cjs/signer-utils.js +0 -631
- package/cjs/signer.js +0 -204
- package/esm/collect-body-keys.js +0 -436
- package/esm/encode-utils.js +0 -185
- package/esm/encode.js +0 -1216
- package/esm/http-message-signatures/httpbis.js +0 -438
- package/esm/http-message-signatures/index.js +0 -4
- package/esm/http-message-signatures/structured-header.js +0 -105
- package/esm/id.js +0 -459
- package/esm/send.js +0 -124
- package/esm/signer-utils.js +0 -494
- package/esm/signer.js +0 -89
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.verifyContentDigest = exports.toBuffer = exports.hasValidSignature = exports.getSignatureNames = exports.from = exports.extractKeys = void 0;
|
|
7
7
|
var _ramda = require("ramda");
|
|
8
|
-
var
|
|
8
|
+
var _hbsig = require("hbsig");
|
|
9
9
|
var _base64url = _interopRequireDefault(require("base64url"));
|
|
10
10
|
var _utils = require("./utils.js");
|
|
11
11
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
@@ -666,7 +666,7 @@ var parseStructuredItem = function parseStructuredItem(item) {
|
|
|
666
666
|
* Parse structured field dictionary
|
|
667
667
|
*/
|
|
668
668
|
var parseStructuredDict = function parseStructuredDict(value) {
|
|
669
|
-
var decoded = (0,
|
|
669
|
+
var decoded = (0, _hbsig.decodeSigInput)(value);
|
|
670
670
|
var result = {};
|
|
671
671
|
for (var _i9 = 0, _Object$entries9 = Object.entries(decoded); _i9 < _Object$entries9.length; _i9++) {
|
|
672
672
|
var _Object$entries9$_i = _slicedToArray(_Object$entries9[_i9], 2),
|
|
@@ -920,7 +920,7 @@ var from = exports.from = function from(http) {
|
|
|
920
920
|
}
|
|
921
921
|
|
|
922
922
|
// Decode signature inputs
|
|
923
|
-
var inputs = (0,
|
|
923
|
+
var inputs = (0, _hbsig.decodeSigInput)(input);
|
|
924
924
|
// Process the first signature (following the original logic)
|
|
925
925
|
for (var k in inputs) {
|
|
926
926
|
var _sigData$params$tag, _sigData$params;
|
|
@@ -1019,7 +1019,7 @@ var extractKeys = exports.extractKeys = function extractKeys(http) {
|
|
|
1019
1019
|
}
|
|
1020
1020
|
|
|
1021
1021
|
// Decode all signature inputs
|
|
1022
|
-
var inputs = (0,
|
|
1022
|
+
var inputs = (0, _hbsig.decodeSigInput)(signatureInput);
|
|
1023
1023
|
|
|
1024
1024
|
// Parse signature header to extract actual signatures
|
|
1025
1025
|
// Format: sig1=:base64signature:, sig2=:base64signature:
|
|
@@ -1155,6 +1155,6 @@ var verifyContentDigest = exports.verifyContentDigest = function verifyContentDi
|
|
|
1155
1155
|
var getSignatureNames = exports.getSignatureNames = function getSignatureNames(http) {
|
|
1156
1156
|
var signatureInput = http.headers["signature-input"] || http.headers["Signature-Input"];
|
|
1157
1157
|
if (!signatureInput) return [];
|
|
1158
|
-
var inputs = (0,
|
|
1158
|
+
var inputs = (0, _hbsig.decodeSigInput)(signatureInput);
|
|
1159
1159
|
return Object.keys(inputs);
|
|
1160
1160
|
};
|
package/cjs/hyperbeam.js
CHANGED
|
@@ -33,6 +33,7 @@ _dotenv["default"].config({
|
|
|
33
33
|
});
|
|
34
34
|
var HyperBEAM = exports["default"] = /*#__PURE__*/function () {
|
|
35
35
|
function HyperBEAM() {
|
|
36
|
+
var _process$env$CWD;
|
|
36
37
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
37
38
|
_ref$port = _ref.port,
|
|
38
39
|
port = _ref$port === void 0 ? 10001 : _ref$port,
|
|
@@ -44,7 +45,7 @@ var HyperBEAM = exports["default"] = /*#__PURE__*/function () {
|
|
|
44
45
|
wallet = _ref$wallet === void 0 ? ".wallet.json" : _ref$wallet,
|
|
45
46
|
reset = _ref.reset,
|
|
46
47
|
_ref$cwd = _ref.cwd,
|
|
47
|
-
cwd = _ref$cwd === void 0 ? "./HyperBEAM" : _ref$cwd,
|
|
48
|
+
cwd = _ref$cwd === void 0 ? (_process$env$CWD = process.env.CWD) !== null && _process$env$CWD !== void 0 ? _process$env$CWD : "./HyperBEAM" : _ref$cwd,
|
|
48
49
|
c = _ref.c,
|
|
49
50
|
cmake = _ref.cmake,
|
|
50
51
|
faff = _ref.faff,
|
package/cjs/utils.js
CHANGED
|
@@ -3,49 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.allChecked = exports.action = void 0;
|
|
7
|
-
Object.defineProperty(exports, "base", {
|
|
8
|
-
enumerable: true,
|
|
9
|
-
get: function get() {
|
|
10
|
-
return _id.base;
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
exports.getTagVal = exports.getTag = exports.dirname = exports.checkTag = exports.buildTags = void 0;
|
|
14
|
-
Object.defineProperty(exports, "hashpath", {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
get: function get() {
|
|
17
|
-
return _id.hashpath;
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
Object.defineProperty(exports, "hmacid", {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
get: function get() {
|
|
23
|
-
return _id.hmacid;
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(exports, "id", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
get: function get() {
|
|
29
|
-
return _id.id;
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
exports.isData = exports.isCheckComplete = void 0;
|
|
6
|
+
exports.isData = exports.isCheckComplete = exports.getTagVal = exports.getTag = exports.dirname = exports.checkTag = exports.buildTags = exports.allChecked = exports.action = void 0;
|
|
33
7
|
exports.isJSON = isJSON;
|
|
34
8
|
exports.optServer = exports.optAO = exports.mergeOut = exports.mergeChecks = exports.ltags = exports.jsonToStr = exports.isRegExp = exports.isOutComplete = exports.isLocalhost = void 0;
|
|
35
9
|
exports.parseSignatureInput = parseSignatureInput;
|
|
36
|
-
|
|
37
|
-
enumerable: true,
|
|
38
|
-
get: function get() {
|
|
39
|
-
return _id.rsaid;
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
exports.tags = exports.tagEq = exports.tag = exports.srcs = exports.searchTag = void 0;
|
|
10
|
+
exports.tags = exports.tagEq = exports.tag = exports.srcs = exports.seed = exports.searchTag = void 0;
|
|
43
11
|
exports.toANS104Request = toANS104Request;
|
|
44
12
|
exports.toAddr = toAddr;
|
|
45
13
|
exports.wait = exports.validAddress = exports.udl = exports.toGraphObj = void 0;
|
|
46
14
|
var _graphql = require("graphql");
|
|
47
15
|
var _fastSha = _interopRequireDefault(require("fast-sha256"));
|
|
48
|
-
var _id = require("./id.js");
|
|
49
16
|
var _ramda = require("ramda");
|
|
50
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
51
18
|
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
@@ -864,4 +831,9 @@ function toAddr(n) {
|
|
|
864
831
|
var pubBytes = base64urlDecode(n);
|
|
865
832
|
var hash = (0, _fastSha["default"])(pubBytes);
|
|
866
833
|
return base64urlEncode(hash);
|
|
867
|
-
}
|
|
834
|
+
}
|
|
835
|
+
var seed = exports.seed = function seed(num) {
|
|
836
|
+
var array = new Array(num);
|
|
837
|
+
for (var i = 0; i < num; i++) array[i] = Math.floor(Math.random() * 256);
|
|
838
|
+
return Buffer.from(array).toString("base64");
|
|
839
|
+
};
|
package/esm/erl_json.js
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec for converting between JS objects with Erlang types and annotated JSON
|
|
3
|
+
* Only handles types that HyperBEAM supports
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Convert annotated JSON to JS object with Erlang types
|
|
8
|
+
* @param {Object} json - Annotated JSON object
|
|
9
|
+
* @returns {*} - JS object with Buffer for binaries, Symbol for atoms
|
|
10
|
+
*/
|
|
11
|
+
export function erl_json_from(json) {
|
|
12
|
+
return convertFromAnnotatedJSON(json)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Convert JS object with Erlang types to annotated JSON
|
|
17
|
+
* @param {*} jsObj - JS object with Erlang types
|
|
18
|
+
* @returns {Object} - Annotated JSON object
|
|
19
|
+
*/
|
|
20
|
+
export function erl_json_to(jsObj) {
|
|
21
|
+
return convertToAnnotatedJSON(jsObj)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Normalize JS values to match what comes back from Erlang through erl_str_from
|
|
26
|
+
* This function is deterministic and matches the behavior of the Erlang round-trip
|
|
27
|
+
* @param {*} obj - JS object to normalize
|
|
28
|
+
* @param {boolean} binaryMode - true for binary mode, false for string mode (default)
|
|
29
|
+
* @returns {*} - Normalized JS object
|
|
30
|
+
*/
|
|
31
|
+
export function normalize(obj, binaryMode = false) {
|
|
32
|
+
if (obj === null) return null
|
|
33
|
+
if (obj === undefined) return undefined
|
|
34
|
+
|
|
35
|
+
// Handle symbols - convert to their special cases or match erl_str_from behavior
|
|
36
|
+
if (typeof obj === "symbol") {
|
|
37
|
+
const key = Symbol.keyFor(obj)
|
|
38
|
+
const name = key || obj.description || obj.toString().slice(7, -1)
|
|
39
|
+
|
|
40
|
+
// Special symbols that become primitives
|
|
41
|
+
if (name === "null") return null
|
|
42
|
+
if (name === "true") return true
|
|
43
|
+
if (name === "false") return false
|
|
44
|
+
|
|
45
|
+
// Note: Symbol('undefined') stays as Symbol.for('undefined')
|
|
46
|
+
// It does NOT become JavaScript undefined
|
|
47
|
+
// This matches what erl_str_from actually returns
|
|
48
|
+
|
|
49
|
+
// For all symbols (including 'undefined'), convert to global symbol
|
|
50
|
+
// This is because non-global symbols can't round-trip through JSON
|
|
51
|
+
// Symbol('ok') -> '%ok%' -> Symbol.for('ok')
|
|
52
|
+
return Symbol.for(name)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Strings
|
|
56
|
+
if (typeof obj === "string") {
|
|
57
|
+
// Special case: "::" becomes empty buffer through Erlang
|
|
58
|
+
if (obj === "::") {
|
|
59
|
+
return Buffer.alloc(0)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (binaryMode) {
|
|
63
|
+
// In binary mode, convert strings to buffers
|
|
64
|
+
return Buffer.from(obj, "utf8")
|
|
65
|
+
} else {
|
|
66
|
+
// In string mode, strings stay as strings
|
|
67
|
+
return obj
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Other primitives pass through
|
|
72
|
+
if (typeof obj === "number" || typeof obj === "boolean") {
|
|
73
|
+
return obj
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Buffers pass through
|
|
77
|
+
if (obj instanceof Buffer || obj instanceof Uint8Array) {
|
|
78
|
+
return Buffer.from(obj)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Arrays - normalize each element
|
|
82
|
+
if (Array.isArray(obj)) {
|
|
83
|
+
return obj.map(item => {
|
|
84
|
+
// undefined in arrays becomes null (JSON behavior)
|
|
85
|
+
if (item === undefined) {
|
|
86
|
+
return null
|
|
87
|
+
}
|
|
88
|
+
return normalize(item, binaryMode)
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Objects - normalize each value and remove undefined values
|
|
93
|
+
if (typeof obj === "object" && obj !== null) {
|
|
94
|
+
const result = {}
|
|
95
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
96
|
+
const normalized = normalize(v, binaryMode)
|
|
97
|
+
// Skip undefined values in objects
|
|
98
|
+
if (normalized !== undefined) {
|
|
99
|
+
result[k] = normalized
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return result
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return obj
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Convert from annotated JSON to JS with Erlang types
|
|
109
|
+
function convertFromAnnotatedJSON(json) {
|
|
110
|
+
// Handle null/undefined
|
|
111
|
+
if (json === null) {
|
|
112
|
+
return null
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (json === undefined) {
|
|
116
|
+
return undefined
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Handle booleans
|
|
120
|
+
if (json === true || json === false) {
|
|
121
|
+
return json
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Handle numbers and strings
|
|
125
|
+
if (typeof json === "number") {
|
|
126
|
+
return json
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (typeof json === "string") {
|
|
130
|
+
// Check for binary structured field format :base64:
|
|
131
|
+
if (json.startsWith(":") && json.endsWith(":") && json.length >= 2) {
|
|
132
|
+
try {
|
|
133
|
+
// Handle empty binary special case
|
|
134
|
+
if (json === "::") {
|
|
135
|
+
return Buffer.alloc(0)
|
|
136
|
+
}
|
|
137
|
+
// Simple base64 decode for structured field binaries
|
|
138
|
+
const base64 = json.slice(1, -1)
|
|
139
|
+
return Buffer.from(base64, "base64")
|
|
140
|
+
} catch (e) {
|
|
141
|
+
// Not valid base64, return as-is
|
|
142
|
+
return json
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Check for token structured field format %token%
|
|
146
|
+
if (json.startsWith("%") && json.endsWith("%") && json.length >= 2) {
|
|
147
|
+
// Handle empty token special case
|
|
148
|
+
if (json === "%%") {
|
|
149
|
+
return Symbol.for("")
|
|
150
|
+
}
|
|
151
|
+
// Extract token and convert to symbol
|
|
152
|
+
const token = json.slice(1, -1)
|
|
153
|
+
return Symbol.for(token)
|
|
154
|
+
}
|
|
155
|
+
// Handle empty string from empty binary conversion
|
|
156
|
+
if (json === "") {
|
|
157
|
+
// In context, this might be an empty binary, but we can't be sure
|
|
158
|
+
// so we return it as-is
|
|
159
|
+
return json
|
|
160
|
+
}
|
|
161
|
+
return json
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Handle arrays
|
|
165
|
+
if (Array.isArray(json)) {
|
|
166
|
+
return json.map(item => convertFromAnnotatedJSON(item))
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Handle objects
|
|
170
|
+
if (json && typeof json === "object") {
|
|
171
|
+
const keys = Object.keys(json)
|
|
172
|
+
|
|
173
|
+
// Check for type annotations (single key objects)
|
|
174
|
+
if (keys.length === 1) {
|
|
175
|
+
const [key] = keys
|
|
176
|
+
const value = json[key]
|
|
177
|
+
|
|
178
|
+
switch (key) {
|
|
179
|
+
case "$empty":
|
|
180
|
+
switch (value) {
|
|
181
|
+
case "binary":
|
|
182
|
+
return Buffer.alloc(0)
|
|
183
|
+
case "list":
|
|
184
|
+
return []
|
|
185
|
+
case "map":
|
|
186
|
+
return {}
|
|
187
|
+
default:
|
|
188
|
+
return json
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Regular object - convert recursively
|
|
194
|
+
const result = {}
|
|
195
|
+
for (const [k, v] of Object.entries(json)) {
|
|
196
|
+
result[k] = convertFromAnnotatedJSON(v)
|
|
197
|
+
}
|
|
198
|
+
return result
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Fallback
|
|
202
|
+
return json
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Convert from JS with Erlang types to annotated JSON
|
|
206
|
+
function convertToAnnotatedJSON(obj) {
|
|
207
|
+
// Handle null - pass through as JSON null
|
|
208
|
+
if (obj === null) {
|
|
209
|
+
return null
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Handle undefined - convert to null (JSON doesn't support undefined)
|
|
213
|
+
if (obj === undefined) {
|
|
214
|
+
return null
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Handle booleans - pass through as JSON booleans
|
|
218
|
+
if (typeof obj === "boolean") {
|
|
219
|
+
return obj
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Handle numbers - pass through
|
|
223
|
+
if (typeof obj === "number") {
|
|
224
|
+
return obj
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Handle strings - pass through
|
|
228
|
+
if (typeof obj === "string") {
|
|
229
|
+
return obj
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Handle symbols (atoms) - use token structured field format
|
|
233
|
+
if (typeof obj === "symbol") {
|
|
234
|
+
// Try to get the key from the global symbol registry
|
|
235
|
+
const key = Symbol.keyFor(obj)
|
|
236
|
+
// If it's not a global symbol, use its description
|
|
237
|
+
const name = key || obj.description || obj.toString().slice(7, -1)
|
|
238
|
+
|
|
239
|
+
// Special atoms that become JSON values
|
|
240
|
+
if (name === "null") return null
|
|
241
|
+
if (name === "true") return true
|
|
242
|
+
if (name === "false") return false
|
|
243
|
+
|
|
244
|
+
// Other atoms become token structured fields
|
|
245
|
+
return `%${name}%`
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Handle Buffers/Uint8Arrays (binaries)
|
|
249
|
+
if (obj instanceof Buffer || obj instanceof Uint8Array) {
|
|
250
|
+
if (obj.length === 0) {
|
|
251
|
+
return { $empty: "binary" }
|
|
252
|
+
}
|
|
253
|
+
// Use structured fields format for binaries
|
|
254
|
+
return `:${Buffer.from(obj).toString("base64")}:`
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Handle arrays
|
|
258
|
+
if (Array.isArray(obj)) {
|
|
259
|
+
if (obj.length === 0) {
|
|
260
|
+
return { $empty: "list" }
|
|
261
|
+
}
|
|
262
|
+
return obj.map(item => convertToAnnotatedJSON(item))
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Handle objects
|
|
266
|
+
if (typeof obj === "object" && obj !== null) {
|
|
267
|
+
const result = {}
|
|
268
|
+
let hasKeys = false
|
|
269
|
+
|
|
270
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
271
|
+
// Skip undefined values completely
|
|
272
|
+
if (v === undefined) {
|
|
273
|
+
continue
|
|
274
|
+
}
|
|
275
|
+
hasKeys = true
|
|
276
|
+
result[k] = convertToAnnotatedJSON(v)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Return $empty annotation if no keys remain
|
|
280
|
+
if (!hasKeys) {
|
|
281
|
+
return { $empty: "map" }
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return result
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Fallback
|
|
288
|
+
return obj
|
|
289
|
+
}
|