payid 0.4.1 → 0.4.6

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.
@@ -0,0 +1,18 @@
1
+ import {
2
+ __require
3
+ } from "./chunk-R5U7XKVJ.js";
4
+
5
+ // src/utils/randomHex.ts
6
+ function randomHex(bytes) {
7
+ if (typeof globalThis.crypto !== "undefined" && crypto.getRandomValues) {
8
+ const arr = new Uint8Array(bytes);
9
+ crypto.getRandomValues(arr);
10
+ return "0x" + Array.from(arr, (b) => b.toString(16).padStart(2, "0")).join("");
11
+ }
12
+ const { randomBytes } = __require("crypto");
13
+ return "0x" + randomBytes(bytes).toString("hex");
14
+ }
15
+
16
+ export {
17
+ randomHex
18
+ };
@@ -0,0 +1,53 @@
1
+ // src/rule/canonicalize.ts
2
+ function canonicalizeRuleSet(ruleSet) {
3
+ return {
4
+ version: ruleSet.version ?? "1",
5
+ logic: ruleSet.logic,
6
+ rules: ruleSet.rules.map((rule) => canonicalizeRule(rule)).sort((a, b) => a.id.localeCompare(b.id))
7
+ };
8
+ }
9
+ function canonicalizeRule(rule) {
10
+ const base = { id: rule.id, ...rule.message ? { message: rule.message } : {} };
11
+ if ("rules" in rule && Array.isArray(rule.rules)) {
12
+ return {
13
+ ...base,
14
+ logic: rule.logic,
15
+ rules: rule.rules.map((r) => canonicalizeRule(r)).sort((a, b) => a.id.localeCompare(b.id))
16
+ };
17
+ }
18
+ if ("conditions" in rule && Array.isArray(rule.conditions)) {
19
+ return {
20
+ ...base,
21
+ logic: rule.logic,
22
+ conditions: rule.conditions.map((c) => canonicalizeObject(c))
23
+ };
24
+ }
25
+ return {
26
+ ...base,
27
+ if: canonicalizeObject(rule.if)
28
+ };
29
+ }
30
+ function canonicalizeObject(obj) {
31
+ if (obj === void 0) {
32
+ throw new Error("Undefined value not allowed in canonical object");
33
+ }
34
+ if (typeof obj === "function" || typeof obj === "symbol") {
35
+ throw new Error("Non-JSON value not allowed in canonical object");
36
+ }
37
+ if (obj instanceof Date) return obj.toISOString();
38
+ if (typeof obj === "bigint") return obj.toString();
39
+ if (Array.isArray(obj)) {
40
+ return obj.map(canonicalizeObject);
41
+ }
42
+ if (typeof obj === "object" && obj !== null) {
43
+ return Object.keys(obj).sort().reduce((acc, key) => {
44
+ acc[key] = canonicalizeObject(obj[key]);
45
+ return acc;
46
+ }, {});
47
+ }
48
+ return obj;
49
+ }
50
+
51
+ export {
52
+ canonicalizeRuleSet
53
+ };
@@ -0,0 +1,67 @@
1
+ // src/issuer/signAttestation.ts
2
+ import { keccak256, toUtf8Bytes } from "ethers";
3
+ async function signAttestation(issuerWallet, payload, ttlSeconds = 60) {
4
+ const issuedAt = Math.floor(Date.now() / 1e3);
5
+ const expiresAt = issuedAt + ttlSeconds;
6
+ const hash = keccak256(
7
+ toUtf8Bytes(JSON.stringify(payload))
8
+ );
9
+ const signature = await issuerWallet.signMessage(
10
+ Buffer.from(hash.slice(2), "hex")
11
+ );
12
+ return {
13
+ issuer: issuerWallet.address,
14
+ issuedAt,
15
+ expiresAt,
16
+ signature
17
+ };
18
+ }
19
+
20
+ // src/issuer/issueEnvContext.ts
21
+ import "ethers";
22
+ async function issueEnvContext(wallet) {
23
+ const payload = {
24
+ timestamp: Math.floor(Date.now() / 1e3)
25
+ };
26
+ return {
27
+ ...payload,
28
+ proof: await signAttestation(wallet, payload, 30)
29
+ };
30
+ }
31
+
32
+ // src/issuer/issueOracleContext.ts
33
+ async function issueOracleContext(wallet, data) {
34
+ const proof = await signAttestation(wallet, data, 120);
35
+ return { ...data, proof };
36
+ }
37
+
38
+ // src/issuer/issueRiskContext.ts
39
+ async function issueRiskContext(wallet, score, category, modelHash) {
40
+ const payload = { score, category, modelHash };
41
+ const signAttestationData = await signAttestation(wallet, payload, 120);
42
+ return {
43
+ score,
44
+ category,
45
+ proof: {
46
+ ...signAttestationData,
47
+ modelHash
48
+ }
49
+ };
50
+ }
51
+
52
+ // src/issuer/issueStateContext.ts
53
+ async function issueStateContext(wallet, spentToday, period) {
54
+ const payload = { spentToday, period };
55
+ return {
56
+ ...payload,
57
+ proof: await signAttestation(wallet, payload, 60)
58
+ };
59
+ }
60
+
61
+ export {
62
+ signAttestation,
63
+ issueEnvContext,
64
+ issueOracleContext,
65
+ issueRiskContext,
66
+ issueStateContext
67
+ };
@@ -0,0 +1,324 @@
1
+ import {
2
+ randomHex
3
+ } from "./chunk-5ZEKI5Y2.js";
4
+ import {
5
+ __require
6
+ } from "./chunk-R5U7XKVJ.js";
7
+
8
+ // src/evaluate.ts
9
+ import { executeRule, preprocessContextV2 } from "payid-rule-engine";
10
+
11
+ // src/normalize.ts
12
+ function normalizeContext(ctx) {
13
+ return {
14
+ ...ctx,
15
+ tx: {
16
+ ...ctx.tx,
17
+ sender: ctx.tx.sender?.toLowerCase(),
18
+ receiver: ctx.tx.receiver?.toLowerCase(),
19
+ asset: ctx.tx.asset.toUpperCase()
20
+ }
21
+ };
22
+ }
23
+
24
+ // src/core/dicisionTrace.ts
25
+ function toBigIntSafe(v) {
26
+ try {
27
+ if (typeof v === "bigint") return v;
28
+ if (typeof v === "number" && Number.isFinite(v)) return BigInt(Math.trunc(v));
29
+ if (typeof v === "string" && v !== "") return BigInt(v);
30
+ return null;
31
+ } catch {
32
+ return null;
33
+ }
34
+ }
35
+ function resolveField(obj, fieldExpr) {
36
+ const [path, ...transforms] = fieldExpr.split("|");
37
+ let value = path?.split(".").reduce((o, k) => o?.[k], obj);
38
+ for (const t of transforms) {
39
+ if (value === void 0 || value === null) break;
40
+ if (t.startsWith("div:")) {
41
+ const n = Number(t.slice(4));
42
+ value = Number(value) / n;
43
+ } else if (t.startsWith("mod:")) {
44
+ const n = BigInt(t.slice(4));
45
+ value = BigInt(value) % n;
46
+ } else if (t === "abs") {
47
+ value = Math.abs(Number(value));
48
+ } else if (t === "hour") {
49
+ value = new Date(Number(value) * 1e3).getUTCHours();
50
+ } else if (t === "day") {
51
+ value = new Date(Number(value) * 1e3).getUTCDay();
52
+ } else if (t === "date") {
53
+ value = new Date(Number(value) * 1e3).getUTCDate();
54
+ } else if (t === "month") {
55
+ value = new Date(Number(value) * 1e3).getUTCMonth() + 1;
56
+ } else if (t === "len") {
57
+ value = String(value).length;
58
+ } else if (t === "lower") {
59
+ value = String(value).toLowerCase();
60
+ } else if (t === "upper") {
61
+ value = String(value).toUpperCase();
62
+ }
63
+ }
64
+ return value;
65
+ }
66
+ function resolveValue(context, value) {
67
+ if (typeof value === "string" && value.startsWith("$")) {
68
+ return resolveField(context, value.slice(1));
69
+ }
70
+ return value;
71
+ }
72
+ function evaluateCondition(actual, op, expected) {
73
+ switch (op) {
74
+ case ">=":
75
+ case "<=":
76
+ case ">":
77
+ case "<": {
78
+ const a = toBigIntSafe(actual);
79
+ const b = toBigIntSafe(expected);
80
+ if (a === null || b === null) return false;
81
+ if (op === ">=") return a >= b;
82
+ if (op === "<=") return a <= b;
83
+ if (op === ">") return a > b;
84
+ if (op === "<") return a < b;
85
+ return false;
86
+ }
87
+ case "==":
88
+ return actual == expected;
89
+ case "!=":
90
+ return actual != expected;
91
+ case "in":
92
+ return Array.isArray(expected) && expected.includes(actual);
93
+ case "not_in":
94
+ return Array.isArray(expected) && !expected.includes(actual);
95
+ case "between":
96
+ return Array.isArray(expected) && actual >= expected[0] && actual <= expected[1];
97
+ case "not_between":
98
+ return Array.isArray(expected) && !(actual >= expected[0] && actual <= expected[1]);
99
+ case "exists":
100
+ return actual !== void 0 && actual !== null;
101
+ case "not_exists":
102
+ return actual === void 0 || actual === null;
103
+ default:
104
+ return false;
105
+ }
106
+ }
107
+ function traceCondition(context, ruleId, cond) {
108
+ const actual = resolveField(context, cond.field);
109
+ const expected = resolveValue(context, cond.value);
110
+ const pass = evaluateCondition(actual, cond.op, expected);
111
+ return {
112
+ ruleId,
113
+ field: cond.field,
114
+ op: cond.op,
115
+ expected: cond.value,
116
+ actual,
117
+ result: actual === void 0 ? "FAIL" : pass ? "PASS" : "FAIL"
118
+ };
119
+ }
120
+ function traceRule(context, rule) {
121
+ if ("if" in rule) {
122
+ return [traceCondition(context, rule.id, rule.if)];
123
+ }
124
+ if ("conditions" in rule) {
125
+ return rule.conditions.map((cond) => traceCondition(context, rule.id, cond));
126
+ }
127
+ if ("rules" in rule) {
128
+ return rule.rules.flatMap((child) => traceRule(context, child));
129
+ }
130
+ return [];
131
+ }
132
+ function buildDecisionTrace(context, ruleConfig) {
133
+ return ruleConfig.rules.flatMap((rule) => traceRule(context, rule));
134
+ }
135
+
136
+ // src/evaluate.ts
137
+ async function evaluate(context, ruleConfig, options, wasmBinary) {
138
+ if (!context || typeof context !== "object") {
139
+ throw new Error("evaluate(): context is required");
140
+ }
141
+ if (!context.tx) {
142
+ throw new Error("evaluate(): context.tx is required");
143
+ }
144
+ if (!ruleConfig || typeof ruleConfig !== "object") {
145
+ throw new Error("evaluate(): ruleConfig is required");
146
+ }
147
+ let result;
148
+ try {
149
+ const preparedContext = options?.trustedIssuers ? preprocessContextV2(
150
+ context,
151
+ ruleConfig,
152
+ options.trustedIssuers
153
+ ) : context;
154
+ const normalized = normalizeContext(preparedContext);
155
+ let wasmForEngine;
156
+ if (wasmBinary == null) {
157
+ wasmForEngine = void 0;
158
+ } else if (typeof Buffer !== "undefined") {
159
+ wasmForEngine = Buffer.isBuffer(wasmBinary) ? wasmBinary : Buffer.from(wasmBinary);
160
+ } else {
161
+ wasmForEngine = wasmBinary;
162
+ }
163
+ result = await executeRule(
164
+ normalized,
165
+ ruleConfig,
166
+ wasmForEngine
167
+ );
168
+ } catch (err) {
169
+ return {
170
+ decision: "REJECT",
171
+ code: "CONTEXT_OR_ENGINE_ERROR",
172
+ reason: err?.message ?? "rule evaluation failed"
173
+ };
174
+ }
175
+ if (result.decision !== "ALLOW" && result.decision !== "REJECT") {
176
+ return {
177
+ decision: "REJECT",
178
+ code: "INVALID_ENGINE_OUTPUT",
179
+ reason: "invalid decision value"
180
+ };
181
+ }
182
+ const baseResult = {
183
+ decision: result.decision,
184
+ code: result.code || "UNKNOWN",
185
+ reason: result.reason
186
+ };
187
+ if (options?.debug) {
188
+ return {
189
+ ...baseResult,
190
+ debug: {
191
+ trace: buildDecisionTrace(context, ruleConfig)
192
+ }
193
+ };
194
+ }
195
+ return baseResult;
196
+ }
197
+
198
+ // src/utils/subtle.ts
199
+ var subtleCrypto = globalThis.crypto?.subtle ?? __require("crypto").webcrypto.subtle;
200
+
201
+ // src/utils/fetchJson.ts
202
+ async function fetchJsonWithHashCheck(url, expectedHash) {
203
+ const res = await fetch(url);
204
+ if (!res.ok) {
205
+ throw new Error("RULE_FETCH_FAILED");
206
+ }
207
+ const buffer = await res.arrayBuffer();
208
+ if (expectedHash) {
209
+ const digest = await subtleCrypto.digest(
210
+ "SHA-256",
211
+ buffer
212
+ );
213
+ const actualHash = bufferToHex(digest);
214
+ if (actualHash !== expectedHash) {
215
+ throw new Error("RULE_HASH_MISMATCH");
216
+ }
217
+ }
218
+ return JSON.parse(new TextDecoder().decode(buffer));
219
+ }
220
+ function bufferToHex(buffer) {
221
+ return [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, "0")).join("");
222
+ }
223
+
224
+ // src/resolver/resolver.ts
225
+ async function resolveRule(source) {
226
+ const { uri, hash: hash2 } = source;
227
+ if (uri.startsWith("inline://")) {
228
+ const encoded = uri.replace("inline://", "");
229
+ const json = JSON.parse(atob(encoded));
230
+ return { config: json, source };
231
+ }
232
+ if (uri.startsWith("ipfs://")) {
233
+ const cid = uri.replace("ipfs://", "");
234
+ const url = `https://ipfs.io/ipfs/${cid}`;
235
+ const config = await fetchJsonWithHashCheck(url, hash2);
236
+ return { config, source };
237
+ }
238
+ if (uri.startsWith("http://") || uri.startsWith("https://")) {
239
+ const config = await fetchJsonWithHashCheck(uri, hash2);
240
+ return { config, source };
241
+ }
242
+ throw new Error("UNSUPPORTED_RULE_URI");
243
+ }
244
+
245
+ // src/decision-proof/hash.ts
246
+ import { keccak256 } from "ethers";
247
+ function stableStringify(obj) {
248
+ if (Array.isArray(obj)) {
249
+ return `[${obj.map(stableStringify).join(",")}]`;
250
+ }
251
+ if (obj && typeof obj === "object") {
252
+ return `{${Object.keys(obj).sort().map(
253
+ (k) => `"${k}":${stableStringify(obj[k])}`
254
+ ).join(",")}}`;
255
+ }
256
+ return JSON.stringify(obj);
257
+ }
258
+ function hashContext(context) {
259
+ return keccak256(Buffer.from(stableStringify(context)));
260
+ }
261
+ function hashRuleSet(ruleConfig) {
262
+ return keccak256(Buffer.from(stableStringify(ruleConfig)));
263
+ }
264
+
265
+ // src/decision-proof/generate.ts
266
+ import { ethers, ZeroAddress } from "ethers";
267
+ var hash = (v) => ethers.keccak256(ethers.toUtf8Bytes(v));
268
+ async function generateDecisionProof(params) {
269
+ const now = params.blockTimestamp ?? Math.floor(Date.now() / 1e3);
270
+ const issuedAt = now - 30;
271
+ const expiresAt = now + (params.ttlSeconds ?? 300);
272
+ const chainId = params.chainId ?? Number((await params.signer.provider.getNetwork()).chainId);
273
+ const requiresAttestation = Array.isArray(params.ruleConfig?.requires) && params.ruleConfig.requires.length > 0;
274
+ const payload = {
275
+ version: hash("2"),
276
+ payId: hash(params.payId),
277
+ payer: params.payer,
278
+ receiver: params.receiver,
279
+ asset: params.asset,
280
+ amount: params.amount,
281
+ contextHash: hashContext(params.context),
282
+ ruleSetHash: hashRuleSet(params.ruleConfig),
283
+ ruleAuthority: params.ruleAuthority ?? ZeroAddress,
284
+ issuedAt: BigInt(issuedAt),
285
+ expiresAt: BigInt(expiresAt),
286
+ nonce: randomHex(32),
287
+ requiresAttestation
288
+ };
289
+ const domain = {
290
+ name: "PAY.ID Decision",
291
+ version: "2",
292
+ chainId,
293
+ verifyingContract: params.verifyingContract
294
+ };
295
+ const types = {
296
+ Decision: [
297
+ { name: "version", type: "bytes32" },
298
+ { name: "payId", type: "bytes32" },
299
+ { name: "payer", type: "address" },
300
+ { name: "receiver", type: "address" },
301
+ { name: "asset", type: "address" },
302
+ { name: "amount", type: "uint256" },
303
+ { name: "contextHash", type: "bytes32" },
304
+ { name: "ruleSetHash", type: "bytes32" },
305
+ { name: "ruleAuthority", type: "address" },
306
+ { name: "issuedAt", type: "uint64" },
307
+ { name: "expiresAt", type: "uint64" },
308
+ { name: "nonce", type: "bytes32" },
309
+ { name: "requiresAttestation", type: "bool" }
310
+ ]
311
+ };
312
+ const signature = await params.signer.signTypedData(domain, types, payload);
313
+ const recovered = ethers.verifyTypedData(domain, types, payload, signature);
314
+ if (recovered.toLowerCase() !== params.payer.toLowerCase()) {
315
+ throw new Error("SIGNATURE_MISMATCH");
316
+ }
317
+ return { payload, signature };
318
+ }
319
+
320
+ export {
321
+ evaluate,
322
+ resolveRule,
323
+ generateDecisionProof
324
+ };
@@ -0,0 +1,24 @@
1
+ import {
2
+ issueEnvContext,
3
+ issueOracleContext,
4
+ issueRiskContext,
5
+ issueStateContext,
6
+ signAttestation
7
+ } from "./chunk-7U3P7XJE.js";
8
+ import {
9
+ __export
10
+ } from "./chunk-R5U7XKVJ.js";
11
+
12
+ // src/issuer/index.ts
13
+ var issuer_exports = {};
14
+ __export(issuer_exports, {
15
+ issueEnvContext: () => issueEnvContext,
16
+ issueOracleContext: () => issueOracleContext,
17
+ issueRiskContext: () => issueRiskContext,
18
+ issueStateContext: () => issueStateContext,
19
+ signAttestation: () => signAttestation
20
+ });
21
+
22
+ export {
23
+ issuer_exports
24
+ };
@@ -0,0 +1,84 @@
1
+ import {
2
+ combineRules
3
+ } from "./chunk-GG34PNTF.js";
4
+ import {
5
+ decodeSessionPolicy
6
+ } from "./chunk-MXKZJKXE.js";
7
+ import {
8
+ evaluate,
9
+ generateDecisionProof,
10
+ resolveRule
11
+ } from "./chunk-ANG3SJGI.js";
12
+ import {
13
+ __export
14
+ } from "./chunk-R5U7XKVJ.js";
15
+
16
+ // src/core/client/index.ts
17
+ var client_exports = {};
18
+ __export(client_exports, {
19
+ createPayID: () => createPayID
20
+ });
21
+
22
+ // src/core/client/client.ts
23
+ import "ethers";
24
+ function isRuleSource(rule) {
25
+ return typeof rule === "object" && rule !== null && "uri" in rule;
26
+ }
27
+ var PayIDClient = class {
28
+ constructor(debugTrace, wasm) {
29
+ this.debugTrace = debugTrace;
30
+ this.wasm = wasm;
31
+ }
32
+ async evaluate(context, rule) {
33
+ const config = isRuleSource(rule) ? (await resolveRule(rule)).config : rule;
34
+ return evaluate(context, config, { debug: this.debugTrace }, this.wasm);
35
+ }
36
+ async evaluateAndProve(params) {
37
+ const authorityConfig = isRuleSource(params.authorityRule) ? (await resolveRule(params.authorityRule)).config : params.authorityRule;
38
+ const evalConfig = params.evaluationRule ?? (params.sessionPolicy ? combineRules(
39
+ authorityConfig,
40
+ decodeSessionPolicy(
41
+ params.sessionPolicy,
42
+ Math.floor(Date.now() / 1e3)
43
+ ).rules
44
+ ) : authorityConfig);
45
+ const result = await evaluate(
46
+ params.context,
47
+ evalConfig,
48
+ { debug: this.debugTrace },
49
+ this.wasm
50
+ );
51
+ if (result.decision !== "ALLOW") {
52
+ return { result, proof: null };
53
+ }
54
+ const proof = await generateDecisionProof({
55
+ payId: params.payId,
56
+ payer: params.payer,
57
+ receiver: params.receiver,
58
+ asset: params.asset,
59
+ amount: params.amount,
60
+ context: params.context,
61
+ ruleConfig: authorityConfig,
62
+ signer: params.signer,
63
+ verifyingContract: params.verifyingContract,
64
+ ruleAuthority: params.ruleAuthority,
65
+ chainId: params.chainId ?? params.context?.tx?.chainId,
66
+ ttlSeconds: params.ttlSeconds,
67
+ blockTimestamp: params.blockTimestamp
68
+ });
69
+ return { result, proof };
70
+ }
71
+ };
72
+
73
+ // src/core/client/index.ts
74
+ function createPayID(params) {
75
+ return new PayIDClient(
76
+ params.debugTrace ?? false,
77
+ params.wasm
78
+ );
79
+ }
80
+
81
+ export {
82
+ createPayID,
83
+ client_exports
84
+ };
@@ -0,0 +1,19 @@
1
+ import {
2
+ canonicalizeRuleSet
3
+ } from "./chunk-6VPSJFO4.js";
4
+
5
+ // src/rule/combine.ts
6
+ function combineRules(defaultRuleSet, sessionRule) {
7
+ return canonicalizeRuleSet({
8
+ version: defaultRuleSet.version ?? "1",
9
+ logic: "AND",
10
+ rules: [
11
+ ...defaultRuleSet.rules,
12
+ ...sessionRule
13
+ ]
14
+ });
15
+ }
16
+
17
+ export {
18
+ combineRules
19
+ };
@@ -0,0 +1,30 @@
1
+ import {
2
+ combineRules
3
+ } from "./chunk-GG34PNTF.js";
4
+ import {
5
+ canonicalizeRuleSet
6
+ } from "./chunk-6VPSJFO4.js";
7
+ import {
8
+ __export
9
+ } from "./chunk-R5U7XKVJ.js";
10
+
11
+ // src/rule/index.ts
12
+ var rule_exports = {};
13
+ __export(rule_exports, {
14
+ canonicalizeRuleSet: () => canonicalizeRuleSet,
15
+ combineRules: () => combineRules,
16
+ hashRuleSet: () => hashRuleSet
17
+ });
18
+
19
+ // src/rule/hash.ts
20
+ import { keccak256, toUtf8Bytes } from "ethers";
21
+ function hashRuleSet(ruleSet) {
22
+ return keccak256(
23
+ toUtf8Bytes(JSON.stringify(ruleSet))
24
+ );
25
+ }
26
+
27
+ export {
28
+ hashRuleSet,
29
+ rule_exports
30
+ };
@@ -0,0 +1,33 @@
1
+ // src/sessionPolicy/decode.ts
2
+ import { ethers } from "ethers";
3
+ function decodeSessionPolicy(sessionPolicy, now) {
4
+ if (sessionPolicy.version !== "payid.session.policy.v1") {
5
+ throw new Error("INVALID_SESSION_POLICY_VERSION");
6
+ }
7
+ if (now > sessionPolicy.expiresAt) {
8
+ throw new Error("SESSION_POLICY_EXPIRED");
9
+ }
10
+ const payload = {
11
+ version: sessionPolicy.version,
12
+ receiver: sessionPolicy.receiver,
13
+ rule: sessionPolicy.rule,
14
+ issuedAt: sessionPolicy.issuedAt,
15
+ expiresAt: sessionPolicy.expiresAt,
16
+ nonce: sessionPolicy.nonce
17
+ };
18
+ const message = ethers.keccak256(
19
+ ethers.toUtf8Bytes(JSON.stringify(payload))
20
+ );
21
+ const recovered = ethers.verifyMessage(
22
+ message,
23
+ sessionPolicy.signature
24
+ );
25
+ if (recovered.toLowerCase() !== sessionPolicy.receiver.toLowerCase()) {
26
+ throw new Error("INVALID_SESSION_POLICY_SIGNATURE");
27
+ }
28
+ return sessionPolicy.rule;
29
+ }
30
+
31
+ export {
32
+ decodeSessionPolicy
33
+ };
@@ -0,0 +1,16 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
3
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
4
+ }) : x)(function(x) {
5
+ if (typeof require !== "undefined") return require.apply(this, arguments);
6
+ throw Error('Dynamic require of "' + x + '" is not supported');
7
+ });
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+
13
+ export {
14
+ __require,
15
+ __export
16
+ };