@byok-sdk/core 0.4.2 → 0.5.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 +7 -0
- package/dist/device-assertion.d.ts +57 -0
- package/dist/in-memory/device-assertion-replay.d.ts +8 -0
- package/dist/in-memory/index.d.ts +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +91 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,4 +8,11 @@ This package is runtime-neutral: it has no Node built-in or protocol dependency.
|
|
|
8
8
|
import { tenantId, InMemoryCoreStores } from '@byok-sdk/core';
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
+
For connector setup, `authenticateDeviceAssertion()` verifies exact trusted
|
|
12
|
+
issuer/product/audience bindings, derives the principal from the current device
|
|
13
|
+
row, and consumes the JTI through an injected `DeviceAssertionReplayAuthority`.
|
|
14
|
+
`InMemoryDeviceAssertionReplayAuthority` is the reference implementation; a
|
|
15
|
+
hosted production composition must inject durable atomic storage. The assertion
|
|
16
|
+
authorizes one exchange only and is not a connector session or refresh token.
|
|
17
|
+
|
|
11
18
|
MIT licensed. Node.js 22.22.0 or newer.
|
|
@@ -44,6 +44,8 @@
|
|
|
44
44
|
*/
|
|
45
45
|
import { z } from 'zod';
|
|
46
46
|
import { type JsonObject } from './attestation';
|
|
47
|
+
import type { DevicePrincipal } from './principals';
|
|
48
|
+
import { type TenantId } from './tenant';
|
|
47
49
|
/** Envelope schema id, self-consistent with the domain prefix below. */
|
|
48
50
|
export declare const DEVICE_ASSERTION_SCHEMA_ID = "byok-device-assertion-v1";
|
|
49
51
|
/**
|
|
@@ -222,3 +224,58 @@ export interface DeviceAssertionVerifyDeps {
|
|
|
222
224
|
* verifier's job.
|
|
223
225
|
*/
|
|
224
226
|
export declare function verifyDeviceAssertion(input: unknown, deps: DeviceAssertionVerifyDeps): Promise<DeviceAssertionClaims | undefined>;
|
|
227
|
+
/** The verifier's complete current row. Claims remain lookup keys, never authority. */
|
|
228
|
+
export interface DeviceAssertionAuthorityRow extends DeviceAssertionDeviceRow {
|
|
229
|
+
readonly tenantId: TenantId;
|
|
230
|
+
readonly productId: string;
|
|
231
|
+
readonly deviceId: string;
|
|
232
|
+
}
|
|
233
|
+
/** Trusted deployment values the host compares with exact string equality. */
|
|
234
|
+
export interface DeviceAssertionExpectedBinding {
|
|
235
|
+
readonly issuer: string;
|
|
236
|
+
readonly productId: string;
|
|
237
|
+
readonly audience: string;
|
|
238
|
+
}
|
|
239
|
+
/** One replay key. Every field is derived from verified claims/current authority. */
|
|
240
|
+
export interface DeviceAssertionReplayConsumeInput {
|
|
241
|
+
readonly tenantId: TenantId;
|
|
242
|
+
readonly issuer: string;
|
|
243
|
+
readonly productId: string;
|
|
244
|
+
readonly deviceId: string;
|
|
245
|
+
readonly audience: string;
|
|
246
|
+
readonly jti: string;
|
|
247
|
+
readonly expiresAt: string;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Atomic single-use authority. `true` means this caller inserted the key;
|
|
251
|
+
* `false` means it was already consumed. Operational failures throw and must
|
|
252
|
+
* never be translated into authenticated success.
|
|
253
|
+
*/
|
|
254
|
+
export interface DeviceAssertionReplayAuthority {
|
|
255
|
+
consume(input: DeviceAssertionReplayConsumeInput): Promise<boolean>;
|
|
256
|
+
}
|
|
257
|
+
export interface AuthenticateDeviceAssertionDeps {
|
|
258
|
+
readonly verifier: DeviceAssertionVerifier;
|
|
259
|
+
readonly lookupDevice: (deviceId: string) => Promise<DeviceAssertionAuthorityRow | undefined> | DeviceAssertionAuthorityRow | undefined;
|
|
260
|
+
readonly replay: DeviceAssertionReplayAuthority;
|
|
261
|
+
readonly expected: DeviceAssertionExpectedBinding;
|
|
262
|
+
readonly now: Date;
|
|
263
|
+
readonly maxLifetimeMs?: number;
|
|
264
|
+
}
|
|
265
|
+
/** Audit-safe result of a consumed assertion; no credential or signature is retained. */
|
|
266
|
+
export interface AuthenticatedDeviceAssertion {
|
|
267
|
+
readonly device: DevicePrincipal;
|
|
268
|
+
readonly issuer: string;
|
|
269
|
+
readonly audience: string;
|
|
270
|
+
readonly jti: string;
|
|
271
|
+
readonly issuedAt: string;
|
|
272
|
+
readonly expiresAt: string;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Authenticate one device assertion and atomically consume its JTI.
|
|
276
|
+
*
|
|
277
|
+
* All invalid authentication states collapse to `undefined`. Replay-store
|
|
278
|
+
* operational failures reject the promise, allowing a host to return an
|
|
279
|
+
* availability error without ever degrading to signature-only acceptance.
|
|
280
|
+
*/
|
|
281
|
+
export declare function authenticateDeviceAssertion(input: unknown, deps: AuthenticateDeviceAssertionDeps): Promise<AuthenticatedDeviceAssertion | undefined>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DeviceAssertionReplayConsumeInput, DeviceAssertionReplayAuthority } from '../device-assertion';
|
|
2
|
+
/** Process-local reference authority. Production runtimes need durable atomic storage. */
|
|
3
|
+
export declare class InMemoryDeviceAssertionReplayAuthority implements DeviceAssertionReplayAuthority {
|
|
4
|
+
#private;
|
|
5
|
+
consume(input: DeviceAssertionReplayConsumeInput): Promise<boolean>;
|
|
6
|
+
/** Delete at most `limit` keys whose assertion lifetime ended at or before `before`. */
|
|
7
|
+
deleteExpired(before: Date, limit: number): Promise<number>;
|
|
8
|
+
}
|
|
@@ -7,6 +7,7 @@ export { InMemoryPresenceStore } from './presence';
|
|
|
7
7
|
export { InMemoryObjectStore } from './blob';
|
|
8
8
|
export { InMemoryQuotaStore } from './quota';
|
|
9
9
|
export { InMemorySkillPackStore } from './skill-pack';
|
|
10
|
+
export { InMemoryDeviceAssertionReplayAuthority } from './device-assertion-replay';
|
|
10
11
|
export interface InMemoryCoreOptions {
|
|
11
12
|
/** Defaults to a fresh {@link createMutableClock}, so TTL behavior is deterministic. */
|
|
12
13
|
readonly clock?: Clock;
|
package/dist/index.d.ts
CHANGED
|
@@ -38,8 +38,8 @@ export type { Clock, CoreStoreName, CoreStores, MutableClock } from './stores';
|
|
|
38
38
|
export { CORE_NON_COMPOSITION_PORT_NAMES, CORE_PORT_INTERFACES, CORE_PORT_METHODS, } from './ports-contract';
|
|
39
39
|
export { DEVICE_PROOF_ALGORITHMS, DEVICE_PROOF_DOMAIN_PREFIX, DEVICE_PROOF_HEADER, DEVICE_PROOF_SCHEMA_ID, DEVICE_PROOF_VERSION, DeviceProofEnvelopeV1Schema, DeviceProofProtectedClaimsSchema, canonicalizeJson, canonicalizeJsonBytes, deviceProofCanonicalClaims, deviceProofCanonicalJson, deviceProofSigningInput, parseDeviceProofEnvelope, } from './attestation';
|
|
40
40
|
export type { DeviceProofAlgorithm, DeviceProofEnvelopeV1, DeviceProofProtectedClaims, DeviceProofVerifier, DeviceProofVerifyInput, JsonObject, JsonPrimitive, JsonValue, } from './attestation';
|
|
41
|
-
export { DEVICE_ASSERTION_ALGORITHMS, DEVICE_ASSERTION_AUDIENCE_MAX_BYTES, DEVICE_ASSERTION_DEFAULT_TTL_MS, DEVICE_ASSERTION_DOMAIN_PREFIX, DEVICE_ASSERTION_MAX_TTL_MS, DEVICE_ASSERTION_SCHEMA_ID, DEVICE_ASSERTION_VERSION, DeviceAssertionClaimsSchema, DeviceAssertionEnvelopeV1Schema, deviceAssertionCanonicalClaims, deviceAssertionCanonicalJson, deviceAssertionSigningInput, parseDeviceAssertionEnvelope, verifyDeviceAssertion, } from './device-assertion';
|
|
42
|
-
export type { DeviceAssertionAlgorithm, DeviceAssertionClaims, DeviceAssertionDeviceRow, DeviceAssertionEnvelopeV1, DeviceAssertionVerifier, DeviceAssertionVerifyDeps, DeviceAssertionVerifyInput, } from './device-assertion';
|
|
41
|
+
export { authenticateDeviceAssertion, DEVICE_ASSERTION_ALGORITHMS, DEVICE_ASSERTION_AUDIENCE_MAX_BYTES, DEVICE_ASSERTION_DEFAULT_TTL_MS, DEVICE_ASSERTION_DOMAIN_PREFIX, DEVICE_ASSERTION_MAX_TTL_MS, DEVICE_ASSERTION_SCHEMA_ID, DEVICE_ASSERTION_VERSION, DeviceAssertionClaimsSchema, DeviceAssertionEnvelopeV1Schema, deviceAssertionCanonicalClaims, deviceAssertionCanonicalJson, deviceAssertionSigningInput, parseDeviceAssertionEnvelope, verifyDeviceAssertion, } from './device-assertion';
|
|
42
|
+
export type { AuthenticateDeviceAssertionDeps, AuthenticatedDeviceAssertion, DeviceAssertionAlgorithm, DeviceAssertionAuthorityRow, DeviceAssertionClaims, DeviceAssertionDeviceRow, DeviceAssertionEnvelopeV1, DeviceAssertionExpectedBinding, DeviceAssertionReplayConsumeInput, DeviceAssertionReplayAuthority, DeviceAssertionVerifier, DeviceAssertionVerifyDeps, DeviceAssertionVerifyInput, } from './device-assertion';
|
|
43
43
|
export { NONCE_SIGNING_DOMAIN, nonceSigningBytes } from './pairing';
|
|
44
|
-
export { IN_MEMORY_CLOCK_EPOCH, InMemoryBoardStore, InMemoryMailboxStore, InMemoryObjectStore, InMemoryPresenceStore, InMemoryQuotaStore, InMemorySkillPackStore, InMemoryTruthStore, createInMemoryCoreStores, createInMemoryCoreCompositionWithClock, createMutableClock, } from './in-memory/index';
|
|
44
|
+
export { IN_MEMORY_CLOCK_EPOCH, InMemoryBoardStore, InMemoryMailboxStore, InMemoryDeviceAssertionReplayAuthority, InMemoryObjectStore, InMemoryPresenceStore, InMemoryQuotaStore, InMemorySkillPackStore, InMemoryTruthStore, createInMemoryCoreStores, createInMemoryCoreCompositionWithClock, createMutableClock, } from './in-memory/index';
|
|
45
45
|
export type { InMemoryCoreComposition, InMemoryCoreOptions } from './in-memory/index';
|
package/dist/index.js
CHANGED
|
@@ -852,6 +852,58 @@ async function verifyDeviceAssertion(input, deps) {
|
|
|
852
852
|
if (!verified) return void 0;
|
|
853
853
|
return claims;
|
|
854
854
|
}
|
|
855
|
+
function isNonEmptyExactString(value) {
|
|
856
|
+
return typeof value === "string" && value.length > 0 && value.trim() === value;
|
|
857
|
+
}
|
|
858
|
+
function isAuthorityRow(row, requestedDeviceId) {
|
|
859
|
+
if (row === null || typeof row !== "object") return false;
|
|
860
|
+
const candidate = row;
|
|
861
|
+
return isTenantId(candidate.tenantId) && isNonEmptyExactString(candidate.productId) && candidate.deviceId === requestedDeviceId;
|
|
862
|
+
}
|
|
863
|
+
async function authenticateDeviceAssertion(input, deps) {
|
|
864
|
+
if (!isNonEmptyExactString(deps.expected.issuer) || !isNonEmptyExactString(deps.expected.productId) || !isNonEmptyExactString(deps.expected.audience) || utf8ByteLength(deps.expected.audience) > DEVICE_ASSERTION_AUDIENCE_MAX_BYTES) {
|
|
865
|
+
return void 0;
|
|
866
|
+
}
|
|
867
|
+
let authorityRow;
|
|
868
|
+
const claims = await verifyDeviceAssertion(input, {
|
|
869
|
+
verifier: deps.verifier,
|
|
870
|
+
lookupDevice: async (deviceId) => {
|
|
871
|
+
const row = await deps.lookupDevice(deviceId);
|
|
872
|
+
if (!isAuthorityRow(row, deviceId)) return void 0;
|
|
873
|
+
authorityRow = row;
|
|
874
|
+
return { publicKeyJwkX: row.publicKeyJwkX, revoked: row.revoked };
|
|
875
|
+
},
|
|
876
|
+
now: deps.now,
|
|
877
|
+
...deps.maxLifetimeMs === void 0 ? {} : { maxLifetimeMs: deps.maxLifetimeMs }
|
|
878
|
+
});
|
|
879
|
+
if (claims === void 0 || authorityRow === void 0) return void 0;
|
|
880
|
+
if (claims.issuer !== deps.expected.issuer || claims.productId !== deps.expected.productId || claims.audience !== deps.expected.audience || authorityRow.productId !== deps.expected.productId || authorityRow.deviceId !== claims.deviceId) {
|
|
881
|
+
return void 0;
|
|
882
|
+
}
|
|
883
|
+
const consumed = await deps.replay.consume({
|
|
884
|
+
tenantId: authorityRow.tenantId,
|
|
885
|
+
issuer: claims.issuer,
|
|
886
|
+
productId: authorityRow.productId,
|
|
887
|
+
deviceId: authorityRow.deviceId,
|
|
888
|
+
audience: claims.audience,
|
|
889
|
+
jti: claims.jti,
|
|
890
|
+
expiresAt: claims.expiresAt
|
|
891
|
+
});
|
|
892
|
+
if (!consumed) return void 0;
|
|
893
|
+
return {
|
|
894
|
+
device: {
|
|
895
|
+
kind: "device",
|
|
896
|
+
tenantId: authorityRow.tenantId,
|
|
897
|
+
productId: authorityRow.productId,
|
|
898
|
+
deviceId: authorityRow.deviceId
|
|
899
|
+
},
|
|
900
|
+
issuer: claims.issuer,
|
|
901
|
+
audience: claims.audience,
|
|
902
|
+
jti: claims.jti,
|
|
903
|
+
issuedAt: claims.issuedAt,
|
|
904
|
+
expiresAt: claims.expiresAt
|
|
905
|
+
};
|
|
906
|
+
}
|
|
855
907
|
|
|
856
908
|
// src/pairing.ts
|
|
857
909
|
var NONCE_SIGNING_DOMAIN = "byok-nonce-v1\n";
|
|
@@ -1895,6 +1947,44 @@ function createMutableClock(start = new Date(IN_MEMORY_CLOCK_EPOCH)) {
|
|
|
1895
1947
|
};
|
|
1896
1948
|
}
|
|
1897
1949
|
|
|
1950
|
+
// src/in-memory/device-assertion-replay.ts
|
|
1951
|
+
function replayKey(input) {
|
|
1952
|
+
return JSON.stringify([
|
|
1953
|
+
input.tenantId,
|
|
1954
|
+
input.issuer,
|
|
1955
|
+
input.productId,
|
|
1956
|
+
input.deviceId,
|
|
1957
|
+
input.audience,
|
|
1958
|
+
input.jti
|
|
1959
|
+
]);
|
|
1960
|
+
}
|
|
1961
|
+
var InMemoryDeviceAssertionReplayAuthority = class {
|
|
1962
|
+
#expiresAtByKey = /* @__PURE__ */ new Map();
|
|
1963
|
+
async consume(input) {
|
|
1964
|
+
const expiresAt = Date.parse(input.expiresAt);
|
|
1965
|
+
if (!Number.isFinite(expiresAt)) throw new Error("device assertion replay expiry is invalid");
|
|
1966
|
+
const key = replayKey(input);
|
|
1967
|
+
if (this.#expiresAtByKey.has(key)) return false;
|
|
1968
|
+
this.#expiresAtByKey.set(key, expiresAt);
|
|
1969
|
+
return true;
|
|
1970
|
+
}
|
|
1971
|
+
/** Delete at most `limit` keys whose assertion lifetime ended at or before `before`. */
|
|
1972
|
+
async deleteExpired(before, limit) {
|
|
1973
|
+
const cutoff = before.getTime();
|
|
1974
|
+
if (!Number.isFinite(cutoff) || !Number.isSafeInteger(limit) || limit <= 0) {
|
|
1975
|
+
throw new Error("device assertion replay cleanup bounds are invalid");
|
|
1976
|
+
}
|
|
1977
|
+
let deleted = 0;
|
|
1978
|
+
for (const [key, expiresAt] of this.#expiresAtByKey) {
|
|
1979
|
+
if (expiresAt > cutoff) continue;
|
|
1980
|
+
this.#expiresAtByKey.delete(key);
|
|
1981
|
+
deleted += 1;
|
|
1982
|
+
if (deleted === limit) break;
|
|
1983
|
+
}
|
|
1984
|
+
return deleted;
|
|
1985
|
+
}
|
|
1986
|
+
};
|
|
1987
|
+
|
|
1898
1988
|
// src/in-memory/index.ts
|
|
1899
1989
|
function createInMemoryCoreStores(options = {}) {
|
|
1900
1990
|
const clock = options.clock ?? createMutableClock();
|
|
@@ -1915,6 +2005,6 @@ function createInMemoryCoreCompositionWithClock() {
|
|
|
1915
2005
|
return { stores: createInMemoryCoreStores({ clock }).stores, clock };
|
|
1916
2006
|
}
|
|
1917
2007
|
|
|
1918
|
-
export { BOARD_STATUSES, BOARD_TRANSITIONS, ByokCoreError, CANONICAL_TIMESTAMP_PATTERN, CAPABILITY_DECLARATION_SCHEMA_ID, CAPABILITY_NAME_PATTERN, CONTENT_HASH_PATTERN, CORE_ERROR_CODES, CORE_NON_COMPOSITION_PORT_NAMES, CORE_PORT_INTERFACES, CORE_PORT_METHODS, CORE_STORE_NAMES, CapabilityDeclarationSchema, CoreConflictError, DEVICE_ASSERTION_ALGORITHMS, DEVICE_ASSERTION_AUDIENCE_MAX_BYTES, DEVICE_ASSERTION_DEFAULT_TTL_MS, DEVICE_ASSERTION_DOMAIN_PREFIX, DEVICE_ASSERTION_MAX_TTL_MS, DEVICE_ASSERTION_SCHEMA_ID, DEVICE_ASSERTION_VERSION, DEVICE_PROOF_ALGORITHMS, DEVICE_PROOF_DOMAIN_PREFIX, DEVICE_PROOF_HEADER, DEVICE_PROOF_SCHEMA_ID, DEVICE_PROOF_VERSION, DeviceAssertionClaimsSchema, DeviceAssertionEnvelopeV1Schema, DeviceProofEnvelopeV1Schema, DeviceProofProtectedClaimsSchema, IN_MEMORY_CLOCK_EPOCH, InMemoryBoardStore, InMemoryMailboxStore, InMemoryObjectStore, InMemoryPresenceStore, InMemoryQuotaStore, InMemorySkillPackStore, InMemoryTruthStore, MAILBOX_MESSAGE_STATES, NONCE_SIGNING_DOMAIN, OBJECT_KEY_PREFIX_PATTERN, OBJECT_STATES, OBJECT_STATE_TRANSITIONS, PRESENCE_LEVELS, PRINCIPAL_KINDS, SKILL_FRONTMATTER_FIELDS, SKILL_PACK_DESCRIPTION_MAX_LENGTH, SKILL_PACK_ENTRY_PATH, SKILL_PACK_FILE_MAX_BYTES, SKILL_PACK_FILE_PATH_MAX_LENGTH, SKILL_PACK_FILE_PATH_PATTERN, SKILL_PACK_FORBIDDEN_FIELDS, SKILL_PACK_MANIFEST_SCHEMA_ID, SKILL_PACK_MAX_BYTES, SKILL_PACK_MAX_FILES, SKILL_PACK_NAME_MAX_LENGTH, SKILL_PACK_NAME_PATTERN, SKILL_PACK_REJECTIONS, SKILL_PACK_VERSION_PATTERN, STORAGE_ERROR_CODES, STORAGE_ERROR_HTTP_STATUS, STORAGE_RESERVATION_STATES, STORAGE_WRITE_KINDS, STORAGE_WRITE_POSTURES, SkillPackFileSchema, SkillPackManifestSchema, TENANT_ID_MAX_LENGTH, TENANT_KEY_SEPARATOR, TRUTH_RECORD_KINDS, assertCanonicalTimestamp, assertCapability, canonicalizeJson, canonicalizeJsonBytes, checkSkillPackEntry, checkSkillPackFileContent, checkSkillPackManifest, contentHash, createInMemoryCoreCompositionWithClock, createInMemoryCoreStores, createMutableClock, deviceAssertionCanonicalClaims, deviceAssertionCanonicalJson, deviceAssertionSigningInput, deviceProofCanonicalClaims, deviceProofCanonicalJson, deviceProofSigningInput, hasCapability, isCanonicalTimestamp, isContentHash, isControlPlanePrincipal, isCoreConflictError, isCoreError, isDevicePrincipal, isLegalBoardTransition, isLegalObjectTransition, isSkillPackPathSafe, isTenantId, nonceSigningBytes, objectKeyPrefix, parseCapabilityDeclaration, parseDeviceAssertionEnvelope, parseDeviceProofEnvelope, parseSkillFrontmatter, parseSkillPackManifest, principalTenant, skillPackContentHashInput, tenantId, tenantKey, tenantObjectKey, verifyDeviceAssertion };
|
|
2008
|
+
export { BOARD_STATUSES, BOARD_TRANSITIONS, ByokCoreError, CANONICAL_TIMESTAMP_PATTERN, CAPABILITY_DECLARATION_SCHEMA_ID, CAPABILITY_NAME_PATTERN, CONTENT_HASH_PATTERN, CORE_ERROR_CODES, CORE_NON_COMPOSITION_PORT_NAMES, CORE_PORT_INTERFACES, CORE_PORT_METHODS, CORE_STORE_NAMES, CapabilityDeclarationSchema, CoreConflictError, DEVICE_ASSERTION_ALGORITHMS, DEVICE_ASSERTION_AUDIENCE_MAX_BYTES, DEVICE_ASSERTION_DEFAULT_TTL_MS, DEVICE_ASSERTION_DOMAIN_PREFIX, DEVICE_ASSERTION_MAX_TTL_MS, DEVICE_ASSERTION_SCHEMA_ID, DEVICE_ASSERTION_VERSION, DEVICE_PROOF_ALGORITHMS, DEVICE_PROOF_DOMAIN_PREFIX, DEVICE_PROOF_HEADER, DEVICE_PROOF_SCHEMA_ID, DEVICE_PROOF_VERSION, DeviceAssertionClaimsSchema, DeviceAssertionEnvelopeV1Schema, DeviceProofEnvelopeV1Schema, DeviceProofProtectedClaimsSchema, IN_MEMORY_CLOCK_EPOCH, InMemoryBoardStore, InMemoryDeviceAssertionReplayAuthority, InMemoryMailboxStore, InMemoryObjectStore, InMemoryPresenceStore, InMemoryQuotaStore, InMemorySkillPackStore, InMemoryTruthStore, MAILBOX_MESSAGE_STATES, NONCE_SIGNING_DOMAIN, OBJECT_KEY_PREFIX_PATTERN, OBJECT_STATES, OBJECT_STATE_TRANSITIONS, PRESENCE_LEVELS, PRINCIPAL_KINDS, SKILL_FRONTMATTER_FIELDS, SKILL_PACK_DESCRIPTION_MAX_LENGTH, SKILL_PACK_ENTRY_PATH, SKILL_PACK_FILE_MAX_BYTES, SKILL_PACK_FILE_PATH_MAX_LENGTH, SKILL_PACK_FILE_PATH_PATTERN, SKILL_PACK_FORBIDDEN_FIELDS, SKILL_PACK_MANIFEST_SCHEMA_ID, SKILL_PACK_MAX_BYTES, SKILL_PACK_MAX_FILES, SKILL_PACK_NAME_MAX_LENGTH, SKILL_PACK_NAME_PATTERN, SKILL_PACK_REJECTIONS, SKILL_PACK_VERSION_PATTERN, STORAGE_ERROR_CODES, STORAGE_ERROR_HTTP_STATUS, STORAGE_RESERVATION_STATES, STORAGE_WRITE_KINDS, STORAGE_WRITE_POSTURES, SkillPackFileSchema, SkillPackManifestSchema, TENANT_ID_MAX_LENGTH, TENANT_KEY_SEPARATOR, TRUTH_RECORD_KINDS, assertCanonicalTimestamp, assertCapability, authenticateDeviceAssertion, canonicalizeJson, canonicalizeJsonBytes, checkSkillPackEntry, checkSkillPackFileContent, checkSkillPackManifest, contentHash, createInMemoryCoreCompositionWithClock, createInMemoryCoreStores, createMutableClock, deviceAssertionCanonicalClaims, deviceAssertionCanonicalJson, deviceAssertionSigningInput, deviceProofCanonicalClaims, deviceProofCanonicalJson, deviceProofSigningInput, hasCapability, isCanonicalTimestamp, isContentHash, isControlPlanePrincipal, isCoreConflictError, isCoreError, isDevicePrincipal, isLegalBoardTransition, isLegalObjectTransition, isSkillPackPathSafe, isTenantId, nonceSigningBytes, objectKeyPrefix, parseCapabilityDeclaration, parseDeviceAssertionEnvelope, parseDeviceProofEnvelope, parseSkillFrontmatter, parseSkillPackManifest, principalTenant, skillPackContentHashInput, tenantId, tenantKey, tenantObjectKey, verifyDeviceAssertion };
|
|
1919
2009
|
//# sourceMappingURL=index.js.map
|
|
1920
2010
|
//# sourceMappingURL=index.js.map
|