@grantex/sdk 0.5.1 → 0.7.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 (185) hide show
  1. package/LICENSE +185 -0
  2. package/NOTICE +16 -0
  3. package/README.md +34 -2
  4. package/dist/authorization-details.d.ts +86 -0
  5. package/dist/authorization-details.d.ts.map +1 -0
  6. package/dist/authorization-details.js +209 -0
  7. package/dist/authorization-details.js.map +1 -0
  8. package/dist/canonical.d.ts +47 -0
  9. package/dist/canonical.d.ts.map +1 -0
  10. package/dist/canonical.js +163 -0
  11. package/dist/canonical.js.map +1 -0
  12. package/dist/caps/index.d.ts +19 -0
  13. package/dist/caps/index.d.ts.map +1 -0
  14. package/dist/caps/index.js +19 -0
  15. package/dist/caps/index.js.map +1 -0
  16. package/dist/caps/limits.d.ts +40 -0
  17. package/dist/caps/limits.d.ts.map +1 -0
  18. package/dist/caps/limits.js +109 -0
  19. package/dist/caps/limits.js.map +1 -0
  20. package/dist/caps/memory.d.ts +15 -0
  21. package/dist/caps/memory.d.ts.map +1 -0
  22. package/dist/caps/memory.js +57 -0
  23. package/dist/caps/memory.js.map +1 -0
  24. package/dist/caps/meter.d.ts +107 -0
  25. package/dist/caps/meter.d.ts.map +1 -0
  26. package/dist/caps/meter.js +200 -0
  27. package/dist/caps/meter.js.map +1 -0
  28. package/dist/caps/postgres.d.ts +64 -0
  29. package/dist/caps/postgres.d.ts.map +1 -0
  30. package/dist/caps/postgres.js +221 -0
  31. package/dist/caps/postgres.js.map +1 -0
  32. package/dist/caps/redis.d.ts +45 -0
  33. package/dist/caps/redis.d.ts.map +1 -0
  34. package/dist/caps/redis.js +173 -0
  35. package/dist/caps/redis.js.map +1 -0
  36. package/dist/client.d.ts +12 -0
  37. package/dist/client.d.ts.map +1 -1
  38. package/dist/client.js +517 -57
  39. package/dist/client.js.map +1 -1
  40. package/dist/decisions/action.d.ts +51 -0
  41. package/dist/decisions/action.d.ts.map +1 -0
  42. package/dist/decisions/action.js +237 -0
  43. package/dist/decisions/action.js.map +1 -0
  44. package/dist/decisions/index.d.ts +11 -0
  45. package/dist/decisions/index.d.ts.map +1 -0
  46. package/dist/decisions/index.js +8 -0
  47. package/dist/decisions/index.js.map +1 -0
  48. package/dist/decisions/verify.d.ts +103 -0
  49. package/dist/decisions/verify.d.ts.map +1 -0
  50. package/dist/decisions/verify.js +277 -0
  51. package/dist/decisions/verify.js.map +1 -0
  52. package/dist/denials.d.ts +132 -0
  53. package/dist/denials.d.ts.map +1 -0
  54. package/dist/denials.js +129 -0
  55. package/dist/denials.js.map +1 -0
  56. package/dist/evidence/build.d.ts +63 -0
  57. package/dist/evidence/build.d.ts.map +1 -0
  58. package/dist/evidence/build.js +201 -0
  59. package/dist/evidence/build.js.map +1 -0
  60. package/dist/evidence/canonical.d.ts +3 -0
  61. package/dist/evidence/canonical.d.ts.map +1 -0
  62. package/dist/evidence/canonical.js +3 -0
  63. package/dist/evidence/canonical.js.map +1 -0
  64. package/dist/evidence/checks.d.ts +13 -0
  65. package/dist/evidence/checks.d.ts.map +1 -0
  66. package/dist/evidence/checks.js +406 -0
  67. package/dist/evidence/checks.js.map +1 -0
  68. package/dist/evidence/document.d.ts +8 -0
  69. package/dist/evidence/document.d.ts.map +1 -0
  70. package/dist/evidence/document.js +298 -0
  71. package/dist/evidence/document.js.map +1 -0
  72. package/dist/evidence/hashing.d.ts +37 -0
  73. package/dist/evidence/hashing.d.ts.map +1 -0
  74. package/dist/evidence/hashing.js +106 -0
  75. package/dist/evidence/hashing.js.map +1 -0
  76. package/dist/evidence/index.d.ts +24 -0
  77. package/dist/evidence/index.d.ts.map +1 -0
  78. package/dist/evidence/index.js +24 -0
  79. package/dist/evidence/index.js.map +1 -0
  80. package/dist/evidence/result.d.ts +88 -0
  81. package/dist/evidence/result.d.ts.map +1 -0
  82. package/dist/evidence/result.js +88 -0
  83. package/dist/evidence/result.js.map +1 -0
  84. package/dist/evidence/schema-1.0.d.ts +2 -0
  85. package/dist/evidence/schema-1.0.d.ts.map +1 -0
  86. package/dist/evidence/schema-1.0.js +1398 -0
  87. package/dist/evidence/schema-1.0.js.map +1 -0
  88. package/dist/evidence/schema.d.ts +13 -0
  89. package/dist/evidence/schema.d.ts.map +1 -0
  90. package/dist/evidence/schema.js +264 -0
  91. package/dist/evidence/schema.js.map +1 -0
  92. package/dist/evidence/signature.d.ts +23 -0
  93. package/dist/evidence/signature.d.ts.map +1 -0
  94. package/dist/evidence/signature.js +136 -0
  95. package/dist/evidence/signature.js.map +1 -0
  96. package/dist/evidence/trace.d.ts +23 -0
  97. package/dist/evidence/trace.d.ts.map +1 -0
  98. package/dist/evidence/trace.js +69 -0
  99. package/dist/evidence/trace.js.map +1 -0
  100. package/dist/evidence/verify.d.ts +29 -0
  101. package/dist/evidence/verify.d.ts.map +1 -0
  102. package/dist/evidence/verify.js +163 -0
  103. package/dist/evidence/verify.js.map +1 -0
  104. package/dist/http.d.ts +12 -1
  105. package/dist/http.d.ts.map +1 -1
  106. package/dist/http.js +11 -5
  107. package/dist/http.js.map +1 -1
  108. package/dist/index.d.ts +16 -3
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +16 -2
  111. package/dist/index.js.map +1 -1
  112. package/dist/manifest.d.ts +178 -9
  113. package/dist/manifest.d.ts.map +1 -1
  114. package/dist/manifest.js +379 -16
  115. package/dist/manifest.js.map +1 -1
  116. package/dist/prepaid-wallets.d.ts +21 -0
  117. package/dist/prepaid-wallets.d.ts.map +1 -1
  118. package/dist/prepaid-wallets.js +6 -0
  119. package/dist/prepaid-wallets.js.map +1 -1
  120. package/dist/purpose.d.ts +29 -0
  121. package/dist/purpose.d.ts.map +1 -0
  122. package/dist/purpose.js +60 -0
  123. package/dist/purpose.js.map +1 -0
  124. package/dist/resources/agents.js +3 -3
  125. package/dist/resources/agents.js.map +1 -1
  126. package/dist/resources/anomalies.d.ts +3 -1
  127. package/dist/resources/anomalies.d.ts.map +1 -1
  128. package/dist/resources/anomalies.js +7 -1
  129. package/dist/resources/anomalies.js.map +1 -1
  130. package/dist/resources/audit.js +1 -1
  131. package/dist/resources/audit.js.map +1 -1
  132. package/dist/resources/budgets.js +2 -2
  133. package/dist/resources/budgets.js.map +1 -1
  134. package/dist/resources/credentials.js +1 -1
  135. package/dist/resources/credentials.js.map +1 -1
  136. package/dist/resources/decisions.d.ts +69 -0
  137. package/dist/resources/decisions.d.ts.map +1 -0
  138. package/dist/resources/decisions.js +115 -0
  139. package/dist/resources/decisions.js.map +1 -0
  140. package/dist/resources/domains.js +2 -2
  141. package/dist/resources/domains.js.map +1 -1
  142. package/dist/resources/dpdp.js +4 -4
  143. package/dist/resources/dpdp.js.map +1 -1
  144. package/dist/resources/grants.js +2 -2
  145. package/dist/resources/grants.js.map +1 -1
  146. package/dist/resources/policies.js +3 -3
  147. package/dist/resources/policies.js.map +1 -1
  148. package/dist/resources/scim.js +5 -5
  149. package/dist/resources/scim.js.map +1 -1
  150. package/dist/resources/tokens.d.ts.map +1 -1
  151. package/dist/resources/tokens.js +5 -1
  152. package/dist/resources/tokens.js.map +1 -1
  153. package/dist/resources/vault.js +2 -2
  154. package/dist/resources/vault.js.map +1 -1
  155. package/dist/resources/webauthn.d.ts +6 -1
  156. package/dist/resources/webauthn.d.ts.map +1 -1
  157. package/dist/resources/webauthn.js +5 -1
  158. package/dist/resources/webauthn.js.map +1 -1
  159. package/dist/resources/webhooks.js +1 -1
  160. package/dist/resources/webhooks.js.map +1 -1
  161. package/dist/revocations/feed.d.ts +61 -0
  162. package/dist/revocations/feed.d.ts.map +1 -0
  163. package/dist/revocations/feed.js +282 -0
  164. package/dist/revocations/feed.js.map +1 -0
  165. package/dist/revocations/index.d.ts +20 -0
  166. package/dist/revocations/index.d.ts.map +1 -0
  167. package/dist/revocations/index.js +19 -0
  168. package/dist/revocations/index.js.map +1 -0
  169. package/dist/revocations/set.d.ts +59 -0
  170. package/dist/revocations/set.d.ts.map +1 -0
  171. package/dist/revocations/set.js +87 -0
  172. package/dist/revocations/set.js.map +1 -0
  173. package/dist/scopes.d.ts +26 -0
  174. package/dist/scopes.d.ts.map +1 -0
  175. package/dist/scopes.js +37 -0
  176. package/dist/scopes.js.map +1 -0
  177. package/dist/types.d.ts +121 -4
  178. package/dist/types.d.ts.map +1 -1
  179. package/dist/types.js +0 -1
  180. package/dist/types.js.map +1 -1
  181. package/dist/verify.d.ts +31 -2
  182. package/dist/verify.d.ts.map +1 -1
  183. package/dist/verify.js +236 -29
  184. package/dist/verify.js.map +1 -1
  185. package/package.json +13 -4
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Redis caps backend: one Lua script reserves every limit atomically.
3
+ *
4
+ * Keys are tenant-scoped and share a hash tag, `grantex:caps:{<tenant>}:...`,
5
+ * so one reservation touches a single Redis Cluster slot. Each counter is a
6
+ * sorted set of `<reservation id>:<units>` members scored by reservation time
7
+ * plus a running total; rolling windows drop members older than the window
8
+ * before checking. Time comes from the Redis server (`TIME`) unless a clock is
9
+ * injected for tests.
10
+ *
11
+ * Requires Redis 6.0 or later (`SET ... KEEPTTL`). Run it with
12
+ * `maxmemory-policy noeviction`: an evicted counter would forget reservations
13
+ * and let calls exceed a cap. Per-hour and per-day keys expire one window plus
14
+ * 60 seconds after the last reservation on the counter; per-case keys only with
15
+ * `caseTtlSeconds`.
16
+ *
17
+ * The scripts are byte-identical to the Python SDK's (`grantex/caps/_redis.py`);
18
+ * a test in each SDK checks this.
19
+ */
20
+ import { CapExceededError, WINDOW_MS, tenantHash } from './meter.js';
21
+ // grantex caps redis script v1 begin
22
+ export const RESERVE_SCRIPT = `
23
+ local now
24
+ if ARGV[1] ~= '' then
25
+ now = tonumber(ARGV[1])
26
+ else
27
+ local t = redis.call('TIME')
28
+ now = tonumber(t[1]) * 1000 + math.floor(tonumber(t[2]) / 1000)
29
+ end
30
+ local rid = ARGV[2]
31
+ local n = tonumber(ARGV[3])
32
+ local case_ttl = tonumber(ARGV[4])
33
+ for i = 1, n do
34
+ local a = 4 + (i - 1) * 3
35
+ local limit = tonumber(ARGV[a + 1])
36
+ local window = tonumber(ARGV[a + 2])
37
+ local units = tonumber(ARGV[a + 3])
38
+ local zkey = KEYS[(i - 1) * 2 + 1]
39
+ local skey = KEYS[(i - 1) * 2 + 2]
40
+ local sum = tonumber(redis.call('GET', skey) or '0')
41
+ if window > 0 then
42
+ local expired = redis.call('ZRANGEBYSCORE', zkey, '-inf', now - window)
43
+ if #expired > 0 then
44
+ for _, member in ipairs(expired) do
45
+ sum = sum - tonumber(string.match(member, ':(%d+)$'))
46
+ end
47
+ if sum < 0 then sum = 0 end
48
+ redis.call('ZREMRANGEBYSCORE', zkey, '-inf', now - window)
49
+ redis.call('SET', skey, sum, 'KEEPTTL')
50
+ end
51
+ end
52
+ if sum + units > limit then
53
+ return {0, i, sum}
54
+ end
55
+ end
56
+ for i = 1, n do
57
+ local a = 4 + (i - 1) * 3
58
+ local window = tonumber(ARGV[a + 2])
59
+ local units = tonumber(ARGV[a + 3])
60
+ local zkey = KEYS[(i - 1) * 2 + 1]
61
+ local skey = KEYS[(i - 1) * 2 + 2]
62
+ redis.call('ZADD', zkey, now, rid .. ':' .. units)
63
+ redis.call('INCRBY', skey, units)
64
+ local ttl = case_ttl
65
+ if window > 0 then ttl = window + 60000 end
66
+ if ttl > 0 then
67
+ redis.call('PEXPIRE', zkey, ttl)
68
+ redis.call('PEXPIRE', skey, ttl)
69
+ end
70
+ end
71
+ return {1, 0, 0}
72
+ `;
73
+ export const REFUND_SCRIPT = `
74
+ local rid = ARGV[1]
75
+ local n = tonumber(ARGV[2])
76
+ for i = 1, n do
77
+ local units = ARGV[2 + i]
78
+ local zkey = KEYS[(i - 1) * 2 + 1]
79
+ local skey = KEYS[(i - 1) * 2 + 2]
80
+ if redis.call('ZREM', zkey, rid .. ':' .. units) == 1 then
81
+ local left = redis.call('DECRBY', skey, tonumber(units))
82
+ if left < 0 then redis.call('SET', skey, 0, 'KEEPTTL') end
83
+ end
84
+ end
85
+ return 1
86
+ `;
87
+ export const USAGE_SCRIPT = `
88
+ local now
89
+ if ARGV[1] ~= '' then
90
+ now = tonumber(ARGV[1])
91
+ else
92
+ local t = redis.call('TIME')
93
+ now = tonumber(t[1]) * 1000 + math.floor(tonumber(t[2]) / 1000)
94
+ end
95
+ local window = tonumber(ARGV[2])
96
+ local sum = tonumber(redis.call('GET', KEYS[2]) or '0')
97
+ if window > 0 then
98
+ for _, member in ipairs(redis.call('ZRANGEBYSCORE', KEYS[1], '-inf', now - window)) do
99
+ sum = sum - tonumber(string.match(member, ':(%d+)$'))
100
+ end
101
+ end
102
+ if sum < 0 then sum = 0 end
103
+ return sum
104
+ `;
105
+ /** Adapter for an ioredis client (`client.eval(script, numKeys, ...keysAndArgs)`). */
106
+ export function ioredisRunner(client) {
107
+ return {
108
+ evalScript: (script, keys, args) => client.eval(script, keys.length, ...keys, ...args),
109
+ };
110
+ }
111
+ async function keysFor(tenantId, limit) {
112
+ const base = `grantex:caps:{${await tenantHash(tenantId)}}:${limit.key}`;
113
+ return [`${base}:z`, `${base}:s`];
114
+ }
115
+ function toInt(value) {
116
+ const n = typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN;
117
+ if (!Number.isInteger(n))
118
+ throw new Error('unexpected caps script result');
119
+ return n;
120
+ }
121
+ export class RedisCapsBackend {
122
+ #redis;
123
+ #caseTtlMs;
124
+ /**
125
+ * `caseTtlSeconds` optionally expires per-case counters; by default they never
126
+ * expire, because an expired per-case counter would reset the cap.
127
+ */
128
+ constructor(redis, options = {}) {
129
+ const ttl = options.caseTtlSeconds;
130
+ if (ttl !== undefined && (!Number.isInteger(ttl) || ttl <= 0)) {
131
+ throw new Error('caseTtlSeconds must be a positive integer');
132
+ }
133
+ this.#redis = redis;
134
+ this.#caseTtlMs = ttl === undefined ? 0 : ttl * 1000;
135
+ }
136
+ async reserve(tenantId, reservationId, limits, nowMs) {
137
+ const keys = [];
138
+ const args = [nowMs === undefined ? '' : String(nowMs), reservationId, limits.length, this.#caseTtlMs];
139
+ for (const limit of limits) {
140
+ keys.push(...(await keysFor(tenantId, limit)));
141
+ args.push(limit.limit, WINDOW_MS[limit.window], limit.units);
142
+ }
143
+ const result = await this.#redis.evalScript(RESERVE_SCRIPT, keys, args);
144
+ if (!Array.isArray(result) || result.length !== 3)
145
+ throw new Error('unexpected caps script result');
146
+ const [ok, index, used] = result.map(toInt);
147
+ if (ok === 1)
148
+ return;
149
+ const limit = limits[index - 1];
150
+ if (limit === undefined)
151
+ throw new Error('unexpected caps script result');
152
+ throw new CapExceededError({
153
+ limit: limit.limit, window: limit.window, used, requested: limit.units, scope: limit.scope, kind: limit.kind,
154
+ });
155
+ }
156
+ async refund(tenantId, reservationId, limits) {
157
+ const keys = [];
158
+ const args = [reservationId, limits.length];
159
+ for (const limit of limits) {
160
+ keys.push(...(await keysFor(tenantId, limit)));
161
+ args.push(limit.units);
162
+ }
163
+ await this.#redis.evalScript(REFUND_SCRIPT, keys, args);
164
+ }
165
+ async usage(tenantId, limit, nowMs) {
166
+ const result = await this.#redis.evalScript(USAGE_SCRIPT, await keysFor(tenantId, limit), [
167
+ nowMs === undefined ? '' : String(nowMs),
168
+ WINDOW_MS[limit.window],
169
+ ]);
170
+ return toInt(result);
171
+ }
172
+ }
173
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/caps/redis.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -21,6 +21,8 @@ import { PassportsClient } from './resources/passports.js';
21
21
  import { DpdpClient } from './resources/dpdp.js';
22
22
  import { CommerceClient } from './resources/commerce.js';
23
23
  import { ToolManifest, type EnforceOptions, type EnforceResult, type WrapToolOptions, type EnforceMiddlewareOptions } from './manifest.js';
24
+ import { RevocationFeed, type RevocationFeedState } from './revocations/index.js';
25
+ import { DecisionsClient } from './resources/decisions.js';
24
26
  import type { AuthorizationRequest, AuthorizeParams, GrantexClientOptions, RateLimit, RotateKeyResponse, SignupParams, SignupResponse, UpdateDeveloperSettingsParams, UpdateDeveloperSettingsResponse } from './types.js';
25
27
  export declare class Grantex {
26
28
  #private;
@@ -46,6 +48,7 @@ export declare class Grantex {
46
48
  readonly passports: PassportsClient;
47
49
  readonly dpdp: DpdpClient;
48
50
  readonly commerce: CommerceClient;
51
+ readonly decisions: DecisionsClient;
49
52
  get lastRateLimit(): RateLimit | undefined;
50
53
  constructor(options?: GrantexClientOptions);
51
54
  /**
@@ -101,6 +104,15 @@ export declare class Grantex {
101
104
  * if (!result.allowed) throw new Error(result.reason);
102
105
  * ```
103
106
  */
107
+ /**
108
+ * The revocation feed this client uses for `revocationCheck: 'feed'`,
109
+ * started on first use. Call `stopRevocationFeed()` to close it.
110
+ */
111
+ revocationFeed(): RevocationFeed;
112
+ /** What the revocation feed knows, and whether it is fresh enough to be trusted. */
113
+ revocationFeedState(): RevocationFeedState | undefined;
114
+ /** Stop following the revocation feed and release its connection. */
115
+ stopRevocationFeed(): Promise<void>;
104
116
  enforce(options: EnforceOptions): Promise<EnforceResult>;
105
117
  /**
106
118
  * Wrap a LangChain StructuredTool with automatic Grantex scope enforcement.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}