@axtary/actionpass 0.1.0 → 0.3.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/README.md +92 -6
- package/dist/caep.d.ts +89 -0
- package/dist/caep.d.ts.map +1 -0
- package/dist/caep.js +258 -0
- package/dist/caep.js.map +1 -0
- package/dist/dev-key.d.ts +54 -0
- package/dist/dev-key.d.ts.map +1 -0
- package/dist/dev-key.js +104 -0
- package/dist/dev-key.js.map +1 -0
- package/dist/explain.d.ts +12 -0
- package/dist/explain.d.ts.map +1 -0
- package/dist/explain.js +156 -0
- package/dist/explain.js.map +1 -0
- package/dist/index.d.ts +1012 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1727 -65
- package/dist/index.js.map +1 -1
- package/dist/postgres.d.ts +21 -0
- package/dist/postgres.d.ts.map +1 -0
- package/dist/postgres.js +112 -0
- package/dist/postgres.js.map +1 -0
- package/dist/provenance.d.ts +59 -0
- package/dist/provenance.d.ts.map +1 -0
- package/dist/provenance.js +67 -0
- package/dist/provenance.js.map +1 -0
- package/dist/status-list.d.ts +167 -0
- package/dist/status-list.d.ts.map +1 -0
- package/dist/status-list.js +450 -0
- package/dist/status-list.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { type CryptoKey, type JWK, type KeyObject } from "jose";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
export declare const ACTIONPASS_STATUS_STORE_VERSION = "axtary.actionpass_status_store.v0";
|
|
4
|
+
export declare const ACTIONPASS_ISSUER_KEYRING_VERSION = "axtary.actionpass_issuer_keyring.v0";
|
|
5
|
+
export declare const TOKEN_STATUS_LIST_TYP = "statuslist+jwt";
|
|
6
|
+
export declare const AXTARY_STATUS_LIST_PROFILE = "axtary.status-list.v1";
|
|
7
|
+
export declare const TokenStatusValueSchema: z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>]>;
|
|
8
|
+
export type TokenStatusValue = z.infer<typeof TokenStatusValueSchema>;
|
|
9
|
+
export declare const StatusListReferenceSchema: z.ZodObject<{
|
|
10
|
+
idx: z.ZodNumber;
|
|
11
|
+
uri: z.ZodString;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
export type StatusListReference = z.infer<typeof StatusListReferenceSchema>;
|
|
14
|
+
export declare const ActionPassStatusClaimSchema: z.ZodObject<{
|
|
15
|
+
status_list: z.ZodObject<{
|
|
16
|
+
idx: z.ZodNumber;
|
|
17
|
+
uri: z.ZodString;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export type ActionPassStatusClaim = z.infer<typeof ActionPassStatusClaimSchema>;
|
|
21
|
+
export declare const StatusListSchema: z.ZodObject<{
|
|
22
|
+
bits: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<4>, z.ZodLiteral<8>]>;
|
|
23
|
+
lst: z.ZodString;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
export type StatusList = z.infer<typeof StatusListSchema>;
|
|
26
|
+
export declare const StatusListTokenClaimsSchema: z.ZodObject<{
|
|
27
|
+
iss: z.ZodOptional<z.ZodString>;
|
|
28
|
+
sub: z.ZodString;
|
|
29
|
+
iat: z.ZodNumber;
|
|
30
|
+
exp: z.ZodNumber;
|
|
31
|
+
ttl: z.ZodNumber;
|
|
32
|
+
axtary_status_profile: z.ZodLiteral<"axtary.status-list.v1">;
|
|
33
|
+
status_list: z.ZodObject<{
|
|
34
|
+
bits: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<4>, z.ZodLiteral<8>]>;
|
|
35
|
+
lst: z.ZodString;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
export type StatusListTokenClaims = z.infer<typeof StatusListTokenClaimsSchema>;
|
|
39
|
+
export declare const StatusStoreEntrySchema: z.ZodObject<{
|
|
40
|
+
passId: z.ZodString;
|
|
41
|
+
index: z.ZodNumber;
|
|
42
|
+
status: z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>]>;
|
|
43
|
+
updatedAt: z.ZodString;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
export type StatusStoreEntry = z.infer<typeof StatusStoreEntrySchema>;
|
|
46
|
+
export declare const ActionPassStatusStoreSchema: z.ZodObject<{
|
|
47
|
+
schemaVersion: z.ZodLiteral<"axtary.actionpass_status_store.v0">;
|
|
48
|
+
uri: z.ZodString;
|
|
49
|
+
nextIndex: z.ZodNumber;
|
|
50
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
51
|
+
passId: z.ZodString;
|
|
52
|
+
index: z.ZodNumber;
|
|
53
|
+
status: z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>]>;
|
|
54
|
+
updatedAt: z.ZodString;
|
|
55
|
+
}, z.core.$strip>>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
export type ActionPassStatusStoreData = z.infer<typeof ActionPassStatusStoreSchema>;
|
|
58
|
+
export declare const IssuerKeyRecordSchema: z.ZodObject<{
|
|
59
|
+
kid: z.ZodString;
|
|
60
|
+
algorithm: z.ZodLiteral<"ES256">;
|
|
61
|
+
status: z.ZodEnum<{
|
|
62
|
+
active: "active";
|
|
63
|
+
retired: "retired";
|
|
64
|
+
}>;
|
|
65
|
+
createdAt: z.ZodString;
|
|
66
|
+
retireAfter: z.ZodOptional<z.ZodString>;
|
|
67
|
+
privateKeyPem: z.ZodString;
|
|
68
|
+
publicJwk: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
69
|
+
}, z.core.$strip>;
|
|
70
|
+
export type IssuerKeyRecord = z.infer<typeof IssuerKeyRecordSchema>;
|
|
71
|
+
export declare const IssuerKeyringSchema: z.ZodObject<{
|
|
72
|
+
schemaVersion: z.ZodLiteral<"axtary.actionpass_issuer_keyring.v0">;
|
|
73
|
+
activeKid: z.ZodString;
|
|
74
|
+
keys: z.ZodArray<z.ZodObject<{
|
|
75
|
+
kid: z.ZodString;
|
|
76
|
+
algorithm: z.ZodLiteral<"ES256">;
|
|
77
|
+
status: z.ZodEnum<{
|
|
78
|
+
active: "active";
|
|
79
|
+
retired: "retired";
|
|
80
|
+
}>;
|
|
81
|
+
createdAt: z.ZodString;
|
|
82
|
+
retireAfter: z.ZodOptional<z.ZodString>;
|
|
83
|
+
privateKeyPem: z.ZodString;
|
|
84
|
+
publicJwk: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
85
|
+
}, z.core.$strip>>;
|
|
86
|
+
}, z.core.$strip>;
|
|
87
|
+
export type IssuerKeyringData = z.infer<typeof IssuerKeyringSchema>;
|
|
88
|
+
export type IssuerSigningKey = {
|
|
89
|
+
kid: string;
|
|
90
|
+
privateKey: KeyObject;
|
|
91
|
+
publicJwk: JWK;
|
|
92
|
+
};
|
|
93
|
+
export type StatusListVerificationKeyResolver = (kid: string | undefined) => JWK | KeyObject | CryptoKey | Uint8Array | undefined | Promise<JWK | KeyObject | CryptoKey | Uint8Array | undefined>;
|
|
94
|
+
export type VerifiedStatusList = {
|
|
95
|
+
token: string;
|
|
96
|
+
claims: StatusListTokenClaims;
|
|
97
|
+
fetchedAt: Date;
|
|
98
|
+
freshUntil: Date;
|
|
99
|
+
statuses: TokenStatusValue[];
|
|
100
|
+
};
|
|
101
|
+
export type StatusListFetchResponse = {
|
|
102
|
+
ok: boolean;
|
|
103
|
+
status: number;
|
|
104
|
+
text(): Promise<string>;
|
|
105
|
+
};
|
|
106
|
+
export type StatusListFetch = (input: string | URL, init?: {
|
|
107
|
+
headers?: Record<string, string>;
|
|
108
|
+
redirect?: "follow";
|
|
109
|
+
}) => Promise<StatusListFetchResponse>;
|
|
110
|
+
export declare function encodeStatusList(statuses: readonly TokenStatusValue[], bits?: 1 | 2 | 4 | 8): StatusList;
|
|
111
|
+
export declare function decodeStatusList(input: StatusList, minimumSize?: number): TokenStatusValue[];
|
|
112
|
+
export declare function signStatusListToken(input: {
|
|
113
|
+
issuer: string;
|
|
114
|
+
uri: string;
|
|
115
|
+
statuses: readonly TokenStatusValue[];
|
|
116
|
+
signingKey: KeyObject | CryptoKey | JWK | Uint8Array;
|
|
117
|
+
keyId: string;
|
|
118
|
+
now?: Date;
|
|
119
|
+
ttlSeconds?: number;
|
|
120
|
+
expiresInSeconds?: number;
|
|
121
|
+
}): Promise<{
|
|
122
|
+
token: string;
|
|
123
|
+
claims: StatusListTokenClaims;
|
|
124
|
+
}>;
|
|
125
|
+
export declare function verifyStatusListToken(input: {
|
|
126
|
+
token: string;
|
|
127
|
+
uri: string;
|
|
128
|
+
issuer?: string;
|
|
129
|
+
verificationKeys: StatusListVerificationKeyResolver;
|
|
130
|
+
currentDate?: Date;
|
|
131
|
+
fetchedAt?: Date;
|
|
132
|
+
}): Promise<VerifiedStatusList>;
|
|
133
|
+
export declare class StatusListClient {
|
|
134
|
+
private readonly options;
|
|
135
|
+
private readonly cache;
|
|
136
|
+
constructor(options: {
|
|
137
|
+
issuer?: string;
|
|
138
|
+
verificationKeys: StatusListVerificationKeyResolver;
|
|
139
|
+
fetch?: StatusListFetch;
|
|
140
|
+
now?: () => Date;
|
|
141
|
+
});
|
|
142
|
+
status(referenceInput: StatusListReference): Promise<TokenStatusValue>;
|
|
143
|
+
clear(): void;
|
|
144
|
+
}
|
|
145
|
+
export declare class LocalActionPassStatusStore {
|
|
146
|
+
readonly filePath: string;
|
|
147
|
+
readonly uri: string;
|
|
148
|
+
constructor(filePath: string, uri: string);
|
|
149
|
+
static open(filePath: string): Promise<LocalActionPassStatusStore>;
|
|
150
|
+
read(): Promise<ActionPassStatusStoreData>;
|
|
151
|
+
allocate(passId: string, now?: Date): Promise<StatusListReference>;
|
|
152
|
+
setStatus(passId: string, status: TokenStatusValue, now?: Date): Promise<StatusStoreEntry>;
|
|
153
|
+
statusForPass(passId: string): Promise<TokenStatusValue | null>;
|
|
154
|
+
statuses(): Promise<TokenStatusValue[]>;
|
|
155
|
+
}
|
|
156
|
+
export declare function loadOrCreateIssuerKeyring(filePath: string, now?: Date): Promise<IssuerKeyringData>;
|
|
157
|
+
export declare function rotateIssuerKeyring(input: {
|
|
158
|
+
filePath: string;
|
|
159
|
+
now?: Date;
|
|
160
|
+
retireAfterSeconds?: number;
|
|
161
|
+
}): Promise<IssuerKeyringData>;
|
|
162
|
+
export declare function issuerSigningKey(dataInput: IssuerKeyringData): IssuerSigningKey;
|
|
163
|
+
export declare function issuerJwks(dataInput: IssuerKeyringData, now?: Date): {
|
|
164
|
+
keys: JWK[];
|
|
165
|
+
};
|
|
166
|
+
export declare function issuerVerificationKeyResolver(dataInput: IssuerKeyringData, kid: string | undefined, now?: Date): Promise<CryptoKey | KeyObject | Uint8Array | undefined>;
|
|
167
|
+
//# sourceMappingURL=status-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-list.d.ts","sourceRoot":"","sources":["../src/status-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
import { createPrivateKey, generateKeyPairSync, randomUUID } from "node:crypto";
|
|
2
|
+
import { mkdir, open, readFile, rename, rm } from "node:fs/promises";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { deflateSync, inflateSync } from "node:zlib";
|
|
5
|
+
import { decodeProtectedHeader, importJWK, jwtVerify, SignJWT, } from "jose";
|
|
6
|
+
import { lock } from "proper-lockfile";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
export const ACTIONPASS_STATUS_STORE_VERSION = "axtary.actionpass_status_store.v0";
|
|
9
|
+
export const ACTIONPASS_ISSUER_KEYRING_VERSION = "axtary.actionpass_issuer_keyring.v0";
|
|
10
|
+
export const TOKEN_STATUS_LIST_TYP = "statuslist+jwt";
|
|
11
|
+
export const AXTARY_STATUS_LIST_PROFILE = "axtary.status-list.v1";
|
|
12
|
+
export const TokenStatusValueSchema = z.union([
|
|
13
|
+
z.literal(0),
|
|
14
|
+
z.literal(1),
|
|
15
|
+
z.literal(2),
|
|
16
|
+
]);
|
|
17
|
+
export const StatusListReferenceSchema = z.object({
|
|
18
|
+
idx: z.number().int().nonnegative(),
|
|
19
|
+
uri: z.string().url(),
|
|
20
|
+
});
|
|
21
|
+
export const ActionPassStatusClaimSchema = z.object({
|
|
22
|
+
status_list: StatusListReferenceSchema,
|
|
23
|
+
});
|
|
24
|
+
export const StatusListSchema = z.object({
|
|
25
|
+
bits: z.union([z.literal(1), z.literal(2), z.literal(4), z.literal(8)]),
|
|
26
|
+
lst: z.string().min(1),
|
|
27
|
+
});
|
|
28
|
+
export const StatusListTokenClaimsSchema = z.object({
|
|
29
|
+
iss: z.string().min(1).optional(),
|
|
30
|
+
sub: z.string().url(),
|
|
31
|
+
iat: z.number().int().positive(),
|
|
32
|
+
exp: z.number().int().positive(),
|
|
33
|
+
ttl: z.number().int().positive(),
|
|
34
|
+
axtary_status_profile: z.literal(AXTARY_STATUS_LIST_PROFILE),
|
|
35
|
+
status_list: StatusListSchema,
|
|
36
|
+
});
|
|
37
|
+
export const StatusStoreEntrySchema = z.object({
|
|
38
|
+
passId: z.string().min(1),
|
|
39
|
+
index: z.number().int().nonnegative(),
|
|
40
|
+
status: TokenStatusValueSchema,
|
|
41
|
+
updatedAt: z.string().datetime(),
|
|
42
|
+
});
|
|
43
|
+
export const ActionPassStatusStoreSchema = z.object({
|
|
44
|
+
schemaVersion: z.literal(ACTIONPASS_STATUS_STORE_VERSION),
|
|
45
|
+
uri: z.string().url(),
|
|
46
|
+
nextIndex: z.number().int().nonnegative(),
|
|
47
|
+
entries: z.array(StatusStoreEntrySchema),
|
|
48
|
+
});
|
|
49
|
+
export const IssuerKeyRecordSchema = z.object({
|
|
50
|
+
kid: z.string().min(1),
|
|
51
|
+
algorithm: z.literal("ES256"),
|
|
52
|
+
status: z.enum(["active", "retired"]),
|
|
53
|
+
createdAt: z.string().datetime(),
|
|
54
|
+
retireAfter: z.string().datetime().optional(),
|
|
55
|
+
privateKeyPem: z.string().min(1),
|
|
56
|
+
publicJwk: z.record(z.string(), z.unknown()),
|
|
57
|
+
});
|
|
58
|
+
export const IssuerKeyringSchema = z.object({
|
|
59
|
+
schemaVersion: z.literal(ACTIONPASS_ISSUER_KEYRING_VERSION),
|
|
60
|
+
activeKid: z.string().min(1),
|
|
61
|
+
keys: z.array(IssuerKeyRecordSchema).min(1),
|
|
62
|
+
});
|
|
63
|
+
export function encodeStatusList(statuses, bits = 2) {
|
|
64
|
+
const max = 2 ** bits - 1;
|
|
65
|
+
const perByte = 8 / bits;
|
|
66
|
+
const bytes = Buffer.alloc(Math.max(1, Math.ceil(statuses.length / perByte)));
|
|
67
|
+
statuses.forEach((status, index) => {
|
|
68
|
+
if (status > max) {
|
|
69
|
+
throw new Error(`status_value_exceeds_bits:${status}:${bits}`);
|
|
70
|
+
}
|
|
71
|
+
const byteIndex = Math.floor(index / perByte);
|
|
72
|
+
const shift = (index % perByte) * bits;
|
|
73
|
+
bytes[byteIndex] = bytes[byteIndex] | (status << shift);
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
bits,
|
|
77
|
+
lst: deflateSync(bytes, { level: 9 }).toString("base64url"),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function decodeStatusList(input, minimumSize = 0) {
|
|
81
|
+
const statusList = StatusListSchema.parse(input);
|
|
82
|
+
const bytes = inflateSync(Buffer.from(statusList.lst, "base64url"));
|
|
83
|
+
const perByte = 8 / statusList.bits;
|
|
84
|
+
const mask = 2 ** statusList.bits - 1;
|
|
85
|
+
const output = [];
|
|
86
|
+
for (const byte of bytes) {
|
|
87
|
+
for (let offset = 0; offset < perByte; offset += 1) {
|
|
88
|
+
output.push(TokenStatusValueSchema.parse((byte >> (offset * statusList.bits)) & mask));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (output.length < minimumSize) {
|
|
92
|
+
throw new Error("status_list_index_out_of_range");
|
|
93
|
+
}
|
|
94
|
+
return output;
|
|
95
|
+
}
|
|
96
|
+
export async function signStatusListToken(input) {
|
|
97
|
+
const now = input.now ?? new Date();
|
|
98
|
+
const issuedAt = Math.floor(now.getTime() / 1000);
|
|
99
|
+
const ttl = input.ttlSeconds ?? 60;
|
|
100
|
+
const expiresIn = input.expiresInSeconds ?? Math.max(ttl * 2, 120);
|
|
101
|
+
const claims = StatusListTokenClaimsSchema.parse({
|
|
102
|
+
iss: input.issuer,
|
|
103
|
+
sub: input.uri,
|
|
104
|
+
iat: issuedAt,
|
|
105
|
+
exp: issuedAt + expiresIn,
|
|
106
|
+
ttl,
|
|
107
|
+
axtary_status_profile: AXTARY_STATUS_LIST_PROFILE,
|
|
108
|
+
status_list: encodeStatusList(input.statuses),
|
|
109
|
+
});
|
|
110
|
+
const token = await new SignJWT({
|
|
111
|
+
ttl: claims.ttl,
|
|
112
|
+
axtary_status_profile: claims.axtary_status_profile,
|
|
113
|
+
status_list: claims.status_list,
|
|
114
|
+
})
|
|
115
|
+
.setProtectedHeader({
|
|
116
|
+
alg: "ES256",
|
|
117
|
+
kid: input.keyId,
|
|
118
|
+
typ: TOKEN_STATUS_LIST_TYP,
|
|
119
|
+
})
|
|
120
|
+
.setIssuer(input.issuer)
|
|
121
|
+
.setSubject(input.uri)
|
|
122
|
+
.setIssuedAt(issuedAt)
|
|
123
|
+
.setExpirationTime(claims.exp)
|
|
124
|
+
.sign(input.signingKey);
|
|
125
|
+
return { token, claims };
|
|
126
|
+
}
|
|
127
|
+
export async function verifyStatusListToken(input) {
|
|
128
|
+
const header = decodeProtectedHeader(input.token);
|
|
129
|
+
if (header.typ !== TOKEN_STATUS_LIST_TYP) {
|
|
130
|
+
throw new Error("status_list_type_invalid");
|
|
131
|
+
}
|
|
132
|
+
const key = await input.verificationKeys(header.kid);
|
|
133
|
+
if (!key) {
|
|
134
|
+
throw new Error(header.kid
|
|
135
|
+
? `status_list_verification_key_not_found:${header.kid}`
|
|
136
|
+
: "status_list_verification_key_id_required");
|
|
137
|
+
}
|
|
138
|
+
const currentDate = input.currentDate ?? new Date();
|
|
139
|
+
const { payload } = await jwtVerify(input.token, key, {
|
|
140
|
+
issuer: input.issuer,
|
|
141
|
+
subject: input.uri,
|
|
142
|
+
algorithms: ["ES256"],
|
|
143
|
+
currentDate,
|
|
144
|
+
});
|
|
145
|
+
const claims = StatusListTokenClaimsSchema.parse(payload);
|
|
146
|
+
const freshnessEpoch = Math.min(claims.exp, claims.iat + claims.ttl);
|
|
147
|
+
const freshUntil = new Date(freshnessEpoch * 1000);
|
|
148
|
+
if (freshUntil.getTime() <= currentDate.getTime()) {
|
|
149
|
+
throw new Error("status_list_stale");
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
token: input.token,
|
|
153
|
+
claims,
|
|
154
|
+
fetchedAt: input.fetchedAt ?? currentDate,
|
|
155
|
+
freshUntil,
|
|
156
|
+
statuses: decodeStatusList(claims.status_list),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
export class StatusListClient {
|
|
160
|
+
options;
|
|
161
|
+
cache = new Map();
|
|
162
|
+
constructor(options) {
|
|
163
|
+
this.options = options;
|
|
164
|
+
}
|
|
165
|
+
async status(referenceInput) {
|
|
166
|
+
const reference = StatusListReferenceSchema.parse(referenceInput);
|
|
167
|
+
const now = this.options.now?.() ?? new Date();
|
|
168
|
+
let verified = this.cache.get(reference.uri);
|
|
169
|
+
if (!verified || verified.freshUntil.getTime() <= now.getTime()) {
|
|
170
|
+
const fetchImpl = this.options.fetch;
|
|
171
|
+
if (!fetchImpl) {
|
|
172
|
+
throw new Error("status_list_fetch_required");
|
|
173
|
+
}
|
|
174
|
+
let response;
|
|
175
|
+
try {
|
|
176
|
+
response = await fetchImpl(reference.uri, {
|
|
177
|
+
headers: { accept: "application/statuslist+jwt" },
|
|
178
|
+
redirect: "follow",
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
throw new Error("status_list_unreachable");
|
|
183
|
+
}
|
|
184
|
+
if (!response.ok) {
|
|
185
|
+
throw new Error(`status_list_http_error:${response.status}`);
|
|
186
|
+
}
|
|
187
|
+
const token = await response.text();
|
|
188
|
+
verified = await verifyStatusListToken({
|
|
189
|
+
token,
|
|
190
|
+
uri: reference.uri,
|
|
191
|
+
issuer: this.options.issuer,
|
|
192
|
+
verificationKeys: this.options.verificationKeys,
|
|
193
|
+
currentDate: now,
|
|
194
|
+
fetchedAt: now,
|
|
195
|
+
});
|
|
196
|
+
this.cache.set(reference.uri, verified);
|
|
197
|
+
}
|
|
198
|
+
const value = verified.statuses[reference.idx];
|
|
199
|
+
if (value === undefined) {
|
|
200
|
+
throw new Error("status_list_index_out_of_range");
|
|
201
|
+
}
|
|
202
|
+
return value;
|
|
203
|
+
}
|
|
204
|
+
clear() {
|
|
205
|
+
this.cache.clear();
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
export class LocalActionPassStatusStore {
|
|
209
|
+
filePath;
|
|
210
|
+
uri;
|
|
211
|
+
constructor(filePath, uri) {
|
|
212
|
+
this.filePath = filePath;
|
|
213
|
+
this.uri = uri;
|
|
214
|
+
}
|
|
215
|
+
static async open(filePath) {
|
|
216
|
+
const data = ActionPassStatusStoreSchema.parse(JSON.parse(await readFile(filePath, "utf8")));
|
|
217
|
+
return new LocalActionPassStatusStore(filePath, data.uri);
|
|
218
|
+
}
|
|
219
|
+
async read() {
|
|
220
|
+
try {
|
|
221
|
+
const parsed = ActionPassStatusStoreSchema.parse(JSON.parse(await readFile(this.filePath, "utf8")));
|
|
222
|
+
if (parsed.uri !== this.uri) {
|
|
223
|
+
throw new Error("status_store_uri_mismatch");
|
|
224
|
+
}
|
|
225
|
+
return parsed;
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
if (isEnoent(error)) {
|
|
229
|
+
return {
|
|
230
|
+
schemaVersion: ACTIONPASS_STATUS_STORE_VERSION,
|
|
231
|
+
uri: this.uri,
|
|
232
|
+
nextIndex: 0,
|
|
233
|
+
entries: [],
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
async allocate(passId, now = new Date()) {
|
|
240
|
+
return withFileLock(this.filePath, async () => {
|
|
241
|
+
const data = await this.read();
|
|
242
|
+
const existing = data.entries.find((entry) => entry.passId === passId);
|
|
243
|
+
if (existing) {
|
|
244
|
+
return { idx: existing.index, uri: data.uri };
|
|
245
|
+
}
|
|
246
|
+
const entry = {
|
|
247
|
+
passId,
|
|
248
|
+
index: data.nextIndex,
|
|
249
|
+
status: 0,
|
|
250
|
+
updatedAt: now.toISOString(),
|
|
251
|
+
};
|
|
252
|
+
await writePrivateJson(this.filePath, {
|
|
253
|
+
...data,
|
|
254
|
+
nextIndex: data.nextIndex + 1,
|
|
255
|
+
entries: [...data.entries, entry],
|
|
256
|
+
});
|
|
257
|
+
return { idx: entry.index, uri: data.uri };
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
async setStatus(passId, status, now = new Date()) {
|
|
261
|
+
TokenStatusValueSchema.parse(status);
|
|
262
|
+
return withFileLock(this.filePath, async () => {
|
|
263
|
+
const data = await this.read();
|
|
264
|
+
const existing = data.entries.find((entry) => entry.passId === passId);
|
|
265
|
+
const entry = existing
|
|
266
|
+
? { ...existing, status, updatedAt: now.toISOString() }
|
|
267
|
+
: {
|
|
268
|
+
passId,
|
|
269
|
+
index: data.nextIndex,
|
|
270
|
+
status,
|
|
271
|
+
updatedAt: now.toISOString(),
|
|
272
|
+
};
|
|
273
|
+
const entries = [
|
|
274
|
+
...data.entries.filter((candidate) => candidate.passId !== passId),
|
|
275
|
+
entry,
|
|
276
|
+
].sort((left, right) => left.index - right.index);
|
|
277
|
+
await writePrivateJson(this.filePath, {
|
|
278
|
+
...data,
|
|
279
|
+
nextIndex: existing ? data.nextIndex : data.nextIndex + 1,
|
|
280
|
+
entries,
|
|
281
|
+
});
|
|
282
|
+
return entry;
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
async statusForPass(passId) {
|
|
286
|
+
return (await this.read()).entries.find((entry) => entry.passId === passId)
|
|
287
|
+
?.status ?? null;
|
|
288
|
+
}
|
|
289
|
+
async statuses() {
|
|
290
|
+
const data = await this.read();
|
|
291
|
+
const statuses = Array(data.nextIndex).fill(0);
|
|
292
|
+
for (const entry of data.entries) {
|
|
293
|
+
statuses[entry.index] = entry.status;
|
|
294
|
+
}
|
|
295
|
+
return statuses;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
export async function loadOrCreateIssuerKeyring(filePath, now = new Date()) {
|
|
299
|
+
return withFileLock(filePath, async () => {
|
|
300
|
+
try {
|
|
301
|
+
return IssuerKeyringSchema.parse(JSON.parse(await readFile(filePath, "utf8")));
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
if (!isEnoent(error)) {
|
|
305
|
+
throw error;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
const key = createIssuerKeyRecord("active", now);
|
|
309
|
+
const data = {
|
|
310
|
+
schemaVersion: ACTIONPASS_ISSUER_KEYRING_VERSION,
|
|
311
|
+
activeKid: key.kid,
|
|
312
|
+
keys: [key],
|
|
313
|
+
};
|
|
314
|
+
await writePrivateJson(filePath, data);
|
|
315
|
+
return data;
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
export async function rotateIssuerKeyring(input) {
|
|
319
|
+
const now = input.now ?? new Date();
|
|
320
|
+
return withFileLock(input.filePath, async () => {
|
|
321
|
+
let data;
|
|
322
|
+
try {
|
|
323
|
+
data = IssuerKeyringSchema.parse(JSON.parse(await readFile(input.filePath, "utf8")));
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
if (!isEnoent(error))
|
|
327
|
+
throw error;
|
|
328
|
+
const initial = createIssuerKeyRecord("active", now);
|
|
329
|
+
data = {
|
|
330
|
+
schemaVersion: ACTIONPASS_ISSUER_KEYRING_VERSION,
|
|
331
|
+
activeKid: initial.kid,
|
|
332
|
+
keys: [initial],
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
const retireAfter = new Date(now.getTime() + (input.retireAfterSeconds ?? 1200) * 1000).toISOString();
|
|
336
|
+
const keys = data.keys
|
|
337
|
+
.filter((key) => key.status === "active" ||
|
|
338
|
+
!key.retireAfter ||
|
|
339
|
+
Date.parse(key.retireAfter) > now.getTime())
|
|
340
|
+
.map((key) => key.kid === data.activeKid
|
|
341
|
+
? { ...key, status: "retired", retireAfter }
|
|
342
|
+
: key);
|
|
343
|
+
const active = createIssuerKeyRecord("active", now);
|
|
344
|
+
const next = {
|
|
345
|
+
schemaVersion: ACTIONPASS_ISSUER_KEYRING_VERSION,
|
|
346
|
+
activeKid: active.kid,
|
|
347
|
+
keys: [...keys, active],
|
|
348
|
+
};
|
|
349
|
+
await writePrivateJson(input.filePath, next);
|
|
350
|
+
return next;
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
export function issuerSigningKey(dataInput) {
|
|
354
|
+
const data = IssuerKeyringSchema.parse(dataInput);
|
|
355
|
+
const active = data.keys.find((key) => key.kid === data.activeKid && key.status === "active");
|
|
356
|
+
if (!active) {
|
|
357
|
+
throw new Error("issuer_active_key_missing");
|
|
358
|
+
}
|
|
359
|
+
return {
|
|
360
|
+
kid: active.kid,
|
|
361
|
+
privateKey: createPrivateKey(active.privateKeyPem),
|
|
362
|
+
publicJwk: active.publicJwk,
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
export function issuerJwks(dataInput, now = new Date()) {
|
|
366
|
+
const data = IssuerKeyringSchema.parse(dataInput);
|
|
367
|
+
return {
|
|
368
|
+
keys: data.keys
|
|
369
|
+
.filter((key) => key.status === "active" ||
|
|
370
|
+
!key.retireAfter ||
|
|
371
|
+
Date.parse(key.retireAfter) > now.getTime())
|
|
372
|
+
.map((key) => key.publicJwk),
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
export async function issuerVerificationKeyResolver(dataInput, kid, now = new Date()) {
|
|
376
|
+
if (!kid)
|
|
377
|
+
return undefined;
|
|
378
|
+
const jwk = issuerJwks(dataInput, now).keys.find((key) => key.kid === kid);
|
|
379
|
+
return jwk ? importJWK(jwk, "ES256") : undefined;
|
|
380
|
+
}
|
|
381
|
+
function createIssuerKeyRecord(status, now) {
|
|
382
|
+
const { privateKey, publicKey } = generateKeyPairSync("ec", {
|
|
383
|
+
namedCurve: "P-256",
|
|
384
|
+
});
|
|
385
|
+
const kid = `axtary-issuer-${randomUUID().slice(0, 12)}`;
|
|
386
|
+
return {
|
|
387
|
+
kid,
|
|
388
|
+
algorithm: "ES256",
|
|
389
|
+
status,
|
|
390
|
+
createdAt: now.toISOString(),
|
|
391
|
+
privateKeyPem: privateKey
|
|
392
|
+
.export({ type: "pkcs8", format: "pem" })
|
|
393
|
+
.toString(),
|
|
394
|
+
publicJwk: {
|
|
395
|
+
...publicKey.export({ format: "jwk" }),
|
|
396
|
+
kid,
|
|
397
|
+
alg: "ES256",
|
|
398
|
+
use: "sig",
|
|
399
|
+
},
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
async function writePrivateJson(filePath, value) {
|
|
403
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
404
|
+
const tmpPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;
|
|
405
|
+
let renamed = false;
|
|
406
|
+
try {
|
|
407
|
+
const handle = await open(tmpPath, "wx", 0o600);
|
|
408
|
+
try {
|
|
409
|
+
await handle.writeFile(`${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
410
|
+
await handle.sync();
|
|
411
|
+
}
|
|
412
|
+
finally {
|
|
413
|
+
await handle.close();
|
|
414
|
+
}
|
|
415
|
+
await rename(tmpPath, filePath);
|
|
416
|
+
renamed = true;
|
|
417
|
+
}
|
|
418
|
+
finally {
|
|
419
|
+
if (!renamed) {
|
|
420
|
+
await rm(tmpPath, { force: true });
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
async function withFileLock(filePath, operation) {
|
|
425
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
426
|
+
const release = await lock(filePath, {
|
|
427
|
+
realpath: false,
|
|
428
|
+
lockfilePath: `${filePath}.lock`,
|
|
429
|
+
stale: 10_000,
|
|
430
|
+
update: 5_000,
|
|
431
|
+
retries: {
|
|
432
|
+
retries: 100,
|
|
433
|
+
factor: 1.2,
|
|
434
|
+
minTimeout: 10,
|
|
435
|
+
maxTimeout: 100,
|
|
436
|
+
},
|
|
437
|
+
});
|
|
438
|
+
try {
|
|
439
|
+
return await operation();
|
|
440
|
+
}
|
|
441
|
+
finally {
|
|
442
|
+
await release();
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
function isEnoent(error) {
|
|
446
|
+
return (error instanceof Error &&
|
|
447
|
+
"code" in error &&
|
|
448
|
+
error.code === "ENOENT");
|
|
449
|
+
}
|
|
450
|
+
//# sourceMappingURL=status-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-list.js","sourceRoot":"","sources":["../src/status-list.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axtary/actionpass",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Scoped, signed ActionPass artifacts for runtime-governed AI agent actions.",
|
|
6
6
|
"type": "module",
|
|
@@ -40,6 +40,8 @@
|
|
|
40
40
|
"types": "./dist/index.d.ts",
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"jose": "^6.2.3",
|
|
43
|
+
"pgsql-ast-parser": "^12.0.2",
|
|
44
|
+
"proper-lockfile": "^4.1.2",
|
|
43
45
|
"zod": "^4.4.3"
|
|
44
46
|
}
|
|
45
47
|
}
|