@axorum/client 0.0.0-stage → 1.0.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.
Files changed (79) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +530 -2
  3. package/dist/agent-uri.d.ts +30 -0
  4. package/dist/agent-uri.d.ts.map +1 -0
  5. package/dist/agent-uri.js +218 -0
  6. package/dist/agent-uri.js.map +1 -0
  7. package/dist/authorize.d.ts +671 -0
  8. package/dist/authorize.d.ts.map +1 -0
  9. package/dist/authorize.js +947 -0
  10. package/dist/authorize.js.map +1 -0
  11. package/dist/capabilities.d.ts +30 -0
  12. package/dist/capabilities.d.ts.map +1 -0
  13. package/dist/capabilities.js +40 -0
  14. package/dist/capabilities.js.map +1 -0
  15. package/dist/chart.d.ts +74 -0
  16. package/dist/chart.d.ts.map +1 -0
  17. package/dist/chart.js +107 -0
  18. package/dist/chart.js.map +1 -0
  19. package/dist/client.d.ts +644 -0
  20. package/dist/client.d.ts.map +1 -0
  21. package/dist/client.js +1302 -0
  22. package/dist/client.js.map +1 -0
  23. package/dist/errors.d.ts +646 -0
  24. package/dist/errors.d.ts.map +1 -0
  25. package/dist/errors.js +928 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/failover.d.ts +197 -0
  28. package/dist/failover.d.ts.map +1 -0
  29. package/dist/failover.js +289 -0
  30. package/dist/failover.js.map +1 -0
  31. package/dist/freshness.d.ts +65 -0
  32. package/dist/freshness.d.ts.map +1 -0
  33. package/dist/freshness.js +148 -0
  34. package/dist/freshness.js.map +1 -0
  35. package/dist/generated/agent-plane.d.ts +1863 -0
  36. package/dist/generated/agent-plane.d.ts.map +1 -0
  37. package/dist/generated/agent-plane.js +19 -0
  38. package/dist/generated/agent-plane.js.map +1 -0
  39. package/dist/idempotency.d.ts +160 -0
  40. package/dist/idempotency.d.ts.map +1 -0
  41. package/dist/idempotency.js +208 -0
  42. package/dist/idempotency.js.map +1 -0
  43. package/dist/index.d.ts +89 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +87 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/intent.d.ts +163 -0
  48. package/dist/intent.d.ts.map +1 -0
  49. package/dist/intent.js +82 -0
  50. package/dist/intent.js.map +1 -0
  51. package/dist/json.d.ts +49 -0
  52. package/dist/json.d.ts.map +1 -0
  53. package/dist/json.js +259 -0
  54. package/dist/json.js.map +1 -0
  55. package/dist/key.d.ts +64 -0
  56. package/dist/key.d.ts.map +1 -0
  57. package/dist/key.js +71 -0
  58. package/dist/key.js.map +1 -0
  59. package/dist/payment.d.ts +172 -0
  60. package/dist/payment.d.ts.map +1 -0
  61. package/dist/payment.js +178 -0
  62. package/dist/payment.js.map +1 -0
  63. package/dist/refusal.d.ts +121 -0
  64. package/dist/refusal.d.ts.map +1 -0
  65. package/dist/refusal.js +176 -0
  66. package/dist/refusal.js.map +1 -0
  67. package/dist/retry.d.ts +215 -0
  68. package/dist/retry.d.ts.map +1 -0
  69. package/dist/retry.js +297 -0
  70. package/dist/retry.js.map +1 -0
  71. package/dist/typeid.d.ts +64 -0
  72. package/dist/typeid.d.ts.map +1 -0
  73. package/dist/typeid.js +119 -0
  74. package/dist/typeid.js.map +1 -0
  75. package/dist/types.d.ts +245 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js +14 -0
  78. package/dist/types.js.map +1 -0
  79. package/package.json +58 -3
@@ -0,0 +1,218 @@
1
+ /**
2
+ * The `agent://` URIs a payment may name: exactly the canonical form `agent-uri` 0.5.0
3
+ * renders, which the Rust SDK and the service parse with.
4
+ *
5
+ * A keyed payment derives its transaction id from the agent URI's bytes, so two
6
+ * spellings of one agent would derive two ids for one payment. Accepting only the
7
+ * canonical spelling makes both SDKs derive the same id. The rules, all pinned against
8
+ * the Rust parser by `spec/fixtures/agent-uri-canonical-v1.json`:
9
+ *
10
+ * - the grammar: `agent://<trust root>/<capability path>/<agent id>`, within the length
11
+ * and segment limits;
12
+ * - N1: a domain is lowercase;
13
+ * - N2, N3: a port is decimal with no leading zero and no sign;
14
+ * - N4: an IPv6 address is written as RFC 5952 writes it, and an IPv4-mapped one in
15
+ * dotted form (`::ffff:192.0.2.1`), as Rust's `Ipv6Addr` displays it;
16
+ * - no query and no fragment.
17
+ *
18
+ * @packageDocumentation
19
+ */
20
+ const SCHEME = "agent://";
21
+ const MAX_URI_BYTES = 512;
22
+ const MAX_TRUST_ROOT_BYTES = 128;
23
+ const MAX_DOMAIN_BYTES = 253;
24
+ const MAX_LABEL_BYTES = 63;
25
+ const MAX_PATH_BYTES = 256;
26
+ const MAX_PATH_SEGMENTS = 32;
27
+ const MAX_SEGMENT_BYTES = 64;
28
+ const MAX_AGENT_ID_BYTES = 90;
29
+ const MAX_PREFIX_BYTES = 63;
30
+ const LABEL = /^[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?$/;
31
+ const SEGMENT = /^[a-z0-9-]+$/;
32
+ const PREFIX = /^[a-z](?:[a-z_]*[a-z])?$/;
33
+ const SUFFIX = /^[0-7][0-9a-hjkmnp-tv-z]{25}$/;
34
+ const MAPPED = /^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/;
35
+ const bytes = (text) => new TextEncoder().encode(text).length;
36
+ /**
37
+ * Why `uri` is not an agent URI in canonical form, or `undefined` when it is. When the
38
+ * part before any query or fragment parses, `canonical` names the form to pass. Pure.
39
+ */
40
+ export function agentUriProblem(uri) {
41
+ const cut = uri.search(/[?#]/);
42
+ const base = cut === -1 ? uri : uri.slice(0, cut);
43
+ const parsed = canonicalAgentUri(base);
44
+ const canonical = parsed.ok ? parsed.canonical : undefined;
45
+ if (cut !== -1) {
46
+ return { reason: "a paying agent's URI carries no query or fragment", canonical };
47
+ }
48
+ if (!parsed.ok) {
49
+ return { reason: parsed.problem, canonical: undefined };
50
+ }
51
+ return parsed.canonical === uri ? undefined : { reason: "it is not in canonical form", canonical };
52
+ }
53
+ const refuse = (problem) => ({ ok: false, problem });
54
+ /**
55
+ * The canonical form of `input`, a URI with no query or fragment, as `agent-uri`'s
56
+ * `AgentUri::parse(input).canonical()` renders it; or why it does not parse. Pure.
57
+ */
58
+ function canonicalAgentUri(input) {
59
+ if (input.length === 0) {
60
+ return refuse("it is empty");
61
+ }
62
+ if (bytes(input) > MAX_URI_BYTES) {
63
+ return refuse(`it is over ${MAX_URI_BYTES} bytes`);
64
+ }
65
+ if (!input.startsWith(SCHEME)) {
66
+ return refuse("it does not start with agent://");
67
+ }
68
+ const rest = input.slice(SCHEME.length);
69
+ const firstSlash = rest.indexOf("/");
70
+ if (firstSlash <= 0 || firstSlash === rest.length - 1) {
71
+ return refuse("expected agent://<trust root>/<capability path>/<agent id>");
72
+ }
73
+ const pathWithId = rest.slice(firstSlash + 1);
74
+ const lastSlash = pathWithId.lastIndexOf("/");
75
+ if (lastSlash <= 0 || lastSlash === pathWithId.length - 1) {
76
+ return refuse("expected agent://<trust root>/<capability path>/<agent id>");
77
+ }
78
+ const trustRoot = canonicalTrustRoot(rest.slice(0, firstSlash));
79
+ if (!trustRoot.ok) {
80
+ return trustRoot;
81
+ }
82
+ const path = pathWithId.slice(0, lastSlash);
83
+ const pathProblem = capabilityPathProblem(path);
84
+ if (pathProblem !== undefined) {
85
+ return refuse(pathProblem);
86
+ }
87
+ const id = pathWithId.slice(lastSlash + 1);
88
+ const idProblem = agentIdProblem(id);
89
+ if (idProblem !== undefined) {
90
+ return refuse(idProblem);
91
+ }
92
+ return { ok: true, canonical: `${SCHEME}${trustRoot.canonical}/${path}/${id}` };
93
+ }
94
+ /** A trust root's canonical form (host, then any port), or why it does not parse. Pure. */
95
+ function canonicalTrustRoot(input) {
96
+ if (bytes(input) > MAX_TRUST_ROOT_BYTES) {
97
+ return refuse(`the trust root is over ${MAX_TRUST_ROOT_BYTES} bytes`);
98
+ }
99
+ if (input.startsWith("[")) {
100
+ const close = input.indexOf("]");
101
+ if (close === -1) {
102
+ return refuse("the IPv6 literal has no closing bracket");
103
+ }
104
+ const address = canonicalIpv6(input.slice(1, close));
105
+ if (address === undefined) {
106
+ return refuse("the IPv6 address does not parse");
107
+ }
108
+ const after = input.slice(close + 1);
109
+ if (after.length === 0) {
110
+ return { ok: true, canonical: `[${address}]` };
111
+ }
112
+ // Rust's `u16::from_str`: an optional `+`, then decimal digits.
113
+ const port = after.startsWith(":") ? parsePort(after.slice(1), true) : undefined;
114
+ return port === undefined ? refuse("the port is not 0-65535") : { ok: true, canonical: `[${address}]:${port}` };
115
+ }
116
+ let host = input;
117
+ let port;
118
+ const colon = input.lastIndexOf(":");
119
+ if (colon !== -1 && /^[0-9]+$/.test(input.slice(colon + 1))) {
120
+ port = parsePort(input.slice(colon + 1), false);
121
+ if (port === undefined) {
122
+ return refuse("the port is not 0-65535");
123
+ }
124
+ host = input.slice(0, colon);
125
+ }
126
+ const problem = domainProblem(host);
127
+ if (problem !== undefined) {
128
+ return refuse(problem);
129
+ }
130
+ const lower = host.toLowerCase();
131
+ return { ok: true, canonical: port === undefined ? lower : `${lower}:${port}` };
132
+ }
133
+ /** A decimal port 0-65535, leading zeros allowed, and a leading `+` when `signed`. Pure. */
134
+ function parsePort(text, signed) {
135
+ const digits = signed && text.startsWith("+") ? text.slice(1) : text;
136
+ if (!/^[0-9]+$/.test(digits)) {
137
+ return undefined;
138
+ }
139
+ const value = Number(digits);
140
+ return value <= 65_535 ? value : undefined;
141
+ }
142
+ /** Why `host` is not a DNS name `agent-uri` accepts, or `undefined`. Pure. */
143
+ function domainProblem(host) {
144
+ if (bytes(host) > MAX_DOMAIN_BYTES) {
145
+ return `the domain is over ${MAX_DOMAIN_BYTES} bytes`;
146
+ }
147
+ for (const label of host.split(".")) {
148
+ if (label.length > MAX_LABEL_BYTES) {
149
+ return `a domain label is over ${MAX_LABEL_BYTES} bytes`;
150
+ }
151
+ if (!LABEL.test(label)) {
152
+ return "the domain's labels must be letters, digits and inner hyphens";
153
+ }
154
+ }
155
+ return undefined;
156
+ }
157
+ /**
158
+ * An IPv6 address as Rust's `Ipv6Addr` displays it: RFC 5952, with an IPv4-mapped
159
+ * address in dotted form. `undefined` when it does not parse. Pure.
160
+ */
161
+ function canonicalIpv6(text) {
162
+ let hostname;
163
+ try {
164
+ hostname = new URL(`http://[${text}]/`).hostname;
165
+ }
166
+ catch {
167
+ return undefined;
168
+ }
169
+ // The WHATWG serializer is RFC 5952 but never dotted.
170
+ const address = hostname.slice(1, -1);
171
+ const mapped = MAPPED.exec(address);
172
+ if (mapped === null) {
173
+ return address;
174
+ }
175
+ const high = Number.parseInt(mapped[1], 16);
176
+ const low = Number.parseInt(mapped[2], 16);
177
+ return `::ffff:${high >> 8}.${high & 0xff}.${low >> 8}.${low & 0xff}`;
178
+ }
179
+ /** Why `path` is not a capability path, or `undefined`. Pure. */
180
+ function capabilityPathProblem(path) {
181
+ if (bytes(path) > MAX_PATH_BYTES) {
182
+ return `the capability path is over ${MAX_PATH_BYTES} bytes`;
183
+ }
184
+ const segments = path.split("/");
185
+ if (segments.length > MAX_PATH_SEGMENTS) {
186
+ return `the capability path has over ${MAX_PATH_SEGMENTS} segments`;
187
+ }
188
+ for (const segment of segments) {
189
+ if (!SEGMENT.test(segment) || segment.length > MAX_SEGMENT_BYTES) {
190
+ return `each capability path segment must be 1 to ${MAX_SEGMENT_BYTES} of a-z, 0-9 and -`;
191
+ }
192
+ }
193
+ return undefined;
194
+ }
195
+ /** Why `id` is not a TypeID agent id, or `undefined`. Pure. */
196
+ function agentIdProblem(id) {
197
+ if (bytes(id) > MAX_AGENT_ID_BYTES) {
198
+ return `the agent id is over ${MAX_AGENT_ID_BYTES} bytes`;
199
+ }
200
+ const separator = id.lastIndexOf("_");
201
+ if (separator <= 0) {
202
+ return "the agent id must be <prefix>_<suffix>";
203
+ }
204
+ const prefix = id.slice(0, separator);
205
+ if (prefix.length > MAX_PREFIX_BYTES || !PREFIX.test(prefix)) {
206
+ return "the agent id's prefix must be lowercase letters and underscores, starting and ending with a letter";
207
+ }
208
+ // The type class, before the first underscore: a core class, or an extension of at
209
+ // least two letters. Every core class is longer, so length decides.
210
+ if (prefix.split("_")[0].length < 2) {
211
+ return "the agent id's type class must be at least 2 letters";
212
+ }
213
+ if (!SUFFIX.test(id.slice(separator + 1))) {
214
+ return "the agent id's suffix must be 26 lowercase Crockford base32 characters, the first 0-7";
215
+ }
216
+ return undefined;
217
+ }
218
+ //# sourceMappingURL=agent-uri.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-uri.js","sourceRoot":"","sources":["../src/agent-uri.ts"],"names":[],"mappings":"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"}