@provian/agent-sdk 1.12.0 → 1.12.1

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/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # @provian/agent-sdk release notes
2
2
 
3
- **Version: 1.12.0.** The package manifest in this directory defines the installed version.
3
+ ## 1.12.1
4
+
5
+ - Pace public RPC verification reads and honor rate-limit retry delays without weakening independent chain verification.
6
+
7
+ **Version: 1.12.1.** The package manifest in this directory defines the installed version.
4
8
 
5
9
  Ownership and recovery are independent of a wallet key. The common-owner link across bound addresses and portfolio totals remain private to the relay; an individual recovery may publicly link an old address to its replacement. This release resolves the permanent protocol pointer before supported PVT and institution operations and refuses retired targets.
6
10
 
@@ -0,0 +1,8 @@
1
+ /** Public RPC reads share one paced lane per endpoint, including across transport
2
+ * factories. Verification still reads both providers and never reuses a result. */
3
+ type RpcFetch = (url: string, init: RequestInit) => Promise<Response>;
4
+ export declare function protocolRpc(url: string, fetcher: RpcFetch): {
5
+ request(method: string, params: readonly unknown[]): Promise<unknown>;
6
+ };
7
+ export {};
8
+ //# sourceMappingURL=protocol-rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-rpc.d.ts","sourceRoot":"","sources":["../src/protocol-rpc.ts"],"names":[],"mappings":"AAAA;mFACmF;AACnF,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAiBtE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG;IAC3D,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvE,CAuCA"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.protocolRpc = protocolRpc;
4
+ const lanes = new Map();
5
+ // Public endpoint limits can be stricter than the advertised account limit.
6
+ const spacingMs = 1000;
7
+ const maxRetryDelayMs = 30000;
8
+ const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
9
+ function retryDelay(value, attempt) {
10
+ if (value === null)
11
+ return 5000 * 2 ** attempt;
12
+ const delay = /^\d+(?:\.\d+)?$/.test(value.trim())
13
+ ? Number(value) * 1000 : Date.parse(value) - Date.now();
14
+ // Never retry earlier than the provider requests, or wait without a bound.
15
+ if (!Number.isFinite(delay))
16
+ throw new Error('protocol_rpc_unavailable');
17
+ return Math.max(spacingMs, delay);
18
+ }
19
+ function protocolRpc(url, fetcher) {
20
+ let lane = lanes.get(url);
21
+ if (!lane) {
22
+ lane = { tail: Promise.resolve(), nextAt: 0 };
23
+ lanes.set(url, lane);
24
+ }
25
+ const endpoint = lane;
26
+ return { request(method, params) {
27
+ const work = endpoint.tail.then(async () => {
28
+ for (let attempt = 0; attempt < 3; attempt++) {
29
+ while (endpoint.nextAt > Date.now()) {
30
+ if (endpoint.nextAt - Date.now() > maxRetryDelayMs)
31
+ throw new Error('protocol_rpc_unavailable');
32
+ await sleep(endpoint.nextAt - Date.now());
33
+ }
34
+ endpoint.nextAt = Date.now() + spacingMs;
35
+ const response = await fetcher(url, { method: 'POST', redirect: 'error',
36
+ headers: { 'content-type': 'application/json' },
37
+ body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params }),
38
+ signal: AbortSignal.timeout(20000) });
39
+ if (response.status === 429) {
40
+ // Consume the response before another request uses the connection.
41
+ await response.text();
42
+ // Even an invalid or too-long delay must not let queued reads bypass
43
+ // the cooldown after this individual request refuses to wait.
44
+ endpoint.nextAt = Date.now() + maxRetryDelayMs;
45
+ endpoint.nextAt = Date.now() + retryDelay(response.headers.get('retry-after'), attempt);
46
+ if (endpoint.nextAt - Date.now() > maxRetryDelayMs)
47
+ throw new Error('protocol_rpc_unavailable');
48
+ if (attempt < 2)
49
+ continue;
50
+ }
51
+ if (!response.ok)
52
+ throw new Error('protocol_rpc_unavailable');
53
+ const reply = await response.json();
54
+ if (!reply || typeof reply !== 'object' || 'error' in reply || !('result' in reply)) {
55
+ throw new Error('protocol_rpc_invalid');
56
+ }
57
+ return reply.result;
58
+ }
59
+ throw new Error('protocol_rpc_unavailable');
60
+ });
61
+ // One failed read must not poison later independent verification attempts.
62
+ endpoint.tail = work.then(() => { }, () => { });
63
+ return work;
64
+ } };
65
+ }
66
+ //# sourceMappingURL=protocol-rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-rpc.js","sourceRoot":"","sources":["../src/protocol-rpc.ts"],"names":[],"mappings":";;AAmBA,kCAyCC;AAxDD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;AACtC,4EAA4E;AAC5E,MAAM,SAAS,GAAG,IAAK,CAAC;AACxB,MAAM,eAAe,GAAG,KAAM,CAAC;AAC/B,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAE7F,SAAS,UAAU,CAAC,KAAoB,EAAE,OAAe;IACvD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAK,GAAG,CAAC,IAAI,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3D,2EAA2E;IAC3E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,WAAW,CAAC,GAAW,EAAE,OAAiB;IAGxD,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;QAAC,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM;YAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACzC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;oBAC7C,OAAO,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;wBACpC,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe;4BAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;wBAChG,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC5C,CAAC;oBACD,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBACzC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;wBACrE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;wBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;wBAC/D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC;oBACzC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;wBAC5B,mEAAmE;wBACnE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACtB,qEAAqE;wBACrE,8DAA8D;wBAC9D,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;wBAC/C,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;wBACxF,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe;4BAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;wBAChG,IAAI,OAAO,GAAG,CAAC;4BAAE,SAAS;oBAC5B,CAAC;oBACD,IAAI,CAAC,QAAQ,CAAC,EAAE;wBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;oBAC9D,MAAM,KAAK,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC;wBACpF,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBAC1C,CAAC;oBACD,OAAO,KAAK,CAAC,MAAM,CAAC;gBACtB,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;YACH,2EAA2E;YAC3E,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-runtime.d.ts","sourceRoot":"","sources":["../src/protocol-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAA8C,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAKzG;+EAC+E;AAC/E,wBAAgB,wBAAwB,IAAI,kBAAkB,CAG7D;AAWD,4EAA4E;AAC5E,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAQ7E;AAED,wBAAgB,iBAAiB,IAAI,iBAAiB,CAErD"}
1
+ {"version":3,"file":"protocol-runtime.d.ts","sourceRoot":"","sources":["../src/protocol-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAA8C,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAKzG;+EAC+E;AAC/E,wBAAgB,wBAAwB,IAAI,kBAAkB,CAG7D;AAID,4EAA4E;AAC5E,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAQ7E;AAED,wBAAgB,iBAAiB,IAAI,iBAAiB,CAErD"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.verifiedProtocolSnapshot = verifiedProtocolSnapshot;
4
4
  exports.currentProtocolDeployment = currentProtocolDeployment;
5
5
  exports.ownerChainNetwork = ownerChainNetwork;
6
+ const protocol_rpc_1 = require("./protocol-rpc");
6
7
  const guarded_fetch_1 = require("./guarded-fetch");
7
8
  const protocol_pointer_pin_generated_1 = require("./protocol-pointer-pin.generated");
8
9
  const protocol_pointer_1 = require("./protocol-pointer");
@@ -17,16 +18,7 @@ function verifiedProtocolSnapshot() {
17
18
  return lastVerifiedDeployment;
18
19
  }
19
20
  function transport(url) {
20
- return { async request(method, params) {
21
- const response = await (0, guarded_fetch_1.guardedFetch)(url, { method: 'POST', headers: { 'content-type': 'application/json' },
22
- body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params }), signal: AbortSignal.timeout(20000) });
23
- if (!response.ok)
24
- throw new Error('protocol_rpc_unavailable');
25
- const result = await response.json();
26
- if (!result || typeof result !== 'object' || 'error' in result || !('result' in result))
27
- throw new Error('protocol_rpc_invalid');
28
- return result.result;
29
- } };
21
+ return (0, protocol_rpc_1.protocolRpc)(url, guarded_fetch_1.guardedFetch);
30
22
  }
31
23
  /** Every signing operation obtains a fresh independent chain resolution. */
32
24
  async function currentProtocolDeployment() {
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-runtime.js","sourceRoot":"","sources":["../src/protocol-runtime.ts"],"names":[],"mappings":";;AAUA,4DAGC;AAYD,8DAQC;AAED,8CAEC;AApCD,mDAA+C;AAC/C,qFAAwE;AACxE,yDAAyG;AAEzG,MAAM,IAAI,GAAG,CAAC,0BAA0B,EAAE,uBAAuB,CAAU,CAAC;AAC5E,IAAI,eAAe,GAAG,EAAE,CAAC;AACzB,IAAI,sBAAsD,CAAC;AAC3D;+EAC+E;AAC/E,SAAgB,wBAAwB;IACtC,IAAI,CAAC,sBAAsB;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACrF,OAAO,sBAAsB,CAAC;AAChC,CAAC;AACD,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;YACnC,MAAM,QAAQ,GAAG,MAAM,IAAA,4BAAY,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBACxG,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC;YAC1G,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACjI,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC,EAAE,CAAC;AACN,CAAC;AACD,4EAA4E;AACrE,KAAK,UAAU,yBAAyB;IAC7C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,qDAAoB,CAAC;IACtD,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,MAAM,IAAA,4CAAyB,EAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IACpI,IAAI,UAAU,CAAC,QAAQ,GAAG,eAAe;QAAE,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC;IACjF,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QAC3G,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAAC;AACnG,CAAC"}
1
+ {"version":3,"file":"protocol-runtime.js","sourceRoot":"","sources":["../src/protocol-runtime.ts"],"names":[],"mappings":";;AAWA,4DAGC;AAKD,8DAQC;AAED,8CAEC;AA/BD,iDAA6C;AAE7C,mDAA+C;AAC/C,qFAAwE;AACxE,yDAAyG;AAEzG,MAAM,IAAI,GAAG,CAAC,0BAA0B,EAAE,uBAAuB,CAAU,CAAC;AAC5E,IAAI,eAAe,GAAG,EAAE,CAAC;AACzB,IAAI,sBAAsD,CAAC;AAC3D;+EAC+E;AAC/E,SAAgB,wBAAwB;IACtC,IAAI,CAAC,sBAAsB;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACrF,OAAO,sBAAsB,CAAC;AAChC,CAAC;AACD,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,IAAA,0BAAW,EAAC,GAAG,EAAE,4BAAY,CAAC,CAAC;AACxC,CAAC;AACD,4EAA4E;AACrE,KAAK,UAAU,yBAAyB;IAC7C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,qDAAoB,CAAC;IACtD,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,MAAM,IAAA,4CAAyB,EAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IACpI,IAAI,UAAU,CAAC,QAAQ,GAAG,eAAe;QAAE,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC;IACjF,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QAC3G,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAAC;AACnG,CAAC"}
package/dist/version.d.ts CHANGED
@@ -9,5 +9,5 @@
9
9
  * the moment the two drift — so bumping the package version without bumping this
10
10
  * is a build failure, not a silent skew.
11
11
  */
12
- export declare const SDK_VERSION = "1.12.0";
12
+ export declare const SDK_VERSION = "1.12.1";
13
13
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -12,5 +12,5 @@ exports.SDK_VERSION = void 0;
12
12
  * the moment the two drift — so bumping the package version without bumping this
13
13
  * is a build failure, not a silent skew.
14
14
  */
15
- exports.SDK_VERSION = '1.12.0';
15
+ exports.SDK_VERSION = '1.12.1';
16
16
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@provian/agent-sdk",
3
- "version": "1.12.0",
3
+ "version": "1.12.1",
4
4
  "description": "SDK for AI agents to connect to Provian Wallet via Cloud Relay",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",