@openvtc/pnm-core 0.1.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 (250) hide show
  1. package/README.md +129 -0
  2. package/dist/did/derive-signing-key.d.ts +19 -0
  3. package/dist/did/derive-signing-key.d.ts.map +1 -0
  4. package/dist/did/derive-signing-key.js +96 -0
  5. package/dist/did/derive-signing-key.js.map +1 -0
  6. package/dist/did/index.d.ts +5 -0
  7. package/dist/did/index.d.ts.map +1 -0
  8. package/dist/did/index.js +5 -0
  9. package/dist/did/index.js.map +1 -0
  10. package/dist/did/peer.d.ts +37 -0
  11. package/dist/did/peer.d.ts.map +1 -0
  12. package/dist/did/peer.js +49 -0
  13. package/dist/did/peer.js.map +1 -0
  14. package/dist/did/verification-method.d.ts +43 -0
  15. package/dist/did/verification-method.d.ts.map +1 -0
  16. package/dist/did/verification-method.js +32 -0
  17. package/dist/did/verification-method.js.map +1 -0
  18. package/dist/did/verify.d.ts +49 -0
  19. package/dist/did/verify.d.ts.map +1 -0
  20. package/dist/did/verify.js +89 -0
  21. package/dist/did/verify.js.map +1 -0
  22. package/dist/didcomm/index.d.ts +235 -0
  23. package/dist/didcomm/index.d.ts.map +1 -0
  24. package/dist/didcomm/index.js +415 -0
  25. package/dist/didcomm/index.js.map +1 -0
  26. package/dist/inbound/confirm.d.ts +50 -0
  27. package/dist/inbound/confirm.d.ts.map +1 -0
  28. package/dist/inbound/confirm.js +64 -0
  29. package/dist/inbound/confirm.js.map +1 -0
  30. package/dist/inbound/dedup.d.ts +9 -0
  31. package/dist/inbound/dedup.d.ts.map +1 -0
  32. package/dist/inbound/dedup.js +31 -0
  33. package/dist/inbound/dedup.js.map +1 -0
  34. package/dist/inbound/index.d.ts +3 -0
  35. package/dist/inbound/index.d.ts.map +1 -0
  36. package/dist/inbound/index.js +3 -0
  37. package/dist/inbound/index.js.map +1 -0
  38. package/dist/index.d.ts +14 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +14 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/onboarding/index.d.ts +2 -0
  43. package/dist/onboarding/index.d.ts.map +1 -0
  44. package/dist/onboarding/index.js +2 -0
  45. package/dist/onboarding/index.js.map +1 -0
  46. package/dist/onboarding/swap.d.ts +60 -0
  47. package/dist/onboarding/swap.d.ts.map +1 -0
  48. package/dist/onboarding/swap.js +148 -0
  49. package/dist/onboarding/swap.js.map +1 -0
  50. package/dist/provision/adopt.d.ts +31 -0
  51. package/dist/provision/adopt.d.ts.map +1 -0
  52. package/dist/provision/adopt.js +114 -0
  53. package/dist/provision/adopt.js.map +1 -0
  54. package/dist/provision/armor.d.ts +19 -0
  55. package/dist/provision/armor.d.ts.map +1 -0
  56. package/dist/provision/armor.js +243 -0
  57. package/dist/provision/armor.js.map +1 -0
  58. package/dist/provision/crc24.d.ts +5 -0
  59. package/dist/provision/crc24.d.ts.map +1 -0
  60. package/dist/provision/crc24.js +30 -0
  61. package/dist/provision/crc24.js.map +1 -0
  62. package/dist/provision/hpke.d.ts +17 -0
  63. package/dist/provision/hpke.d.ts.map +1 -0
  64. package/dist/provision/hpke.js +60 -0
  65. package/dist/provision/hpke.js.map +1 -0
  66. package/dist/provision/index.d.ts +10 -0
  67. package/dist/provision/index.d.ts.map +1 -0
  68. package/dist/provision/index.js +16 -0
  69. package/dist/provision/index.js.map +1 -0
  70. package/dist/provision/open.d.ts +28 -0
  71. package/dist/provision/open.d.ts.map +1 -0
  72. package/dist/provision/open.js +224 -0
  73. package/dist/provision/open.js.map +1 -0
  74. package/dist/provision/request.d.ts +65 -0
  75. package/dist/provision/request.d.ts.map +1 -0
  76. package/dist/provision/request.js +53 -0
  77. package/dist/provision/request.js.map +1 -0
  78. package/dist/provision/run.d.ts +76 -0
  79. package/dist/provision/run.d.ts.map +1 -0
  80. package/dist/provision/run.js +110 -0
  81. package/dist/provision/run.js.map +1 -0
  82. package/dist/provision/send.d.ts +85 -0
  83. package/dist/provision/send.d.ts.map +1 -0
  84. package/dist/provision/send.js +87 -0
  85. package/dist/provision/send.js.map +1 -0
  86. package/dist/provision/types.d.ts +110 -0
  87. package/dist/provision/types.d.ts.map +1 -0
  88. package/dist/provision/types.js +17 -0
  89. package/dist/provision/types.js.map +1 -0
  90. package/dist/rp-login/didcomm.d.ts +34 -0
  91. package/dist/rp-login/didcomm.d.ts.map +1 -0
  92. package/dist/rp-login/didcomm.js +72 -0
  93. package/dist/rp-login/didcomm.js.map +1 -0
  94. package/dist/rp-login/index.d.ts +3 -0
  95. package/dist/rp-login/index.d.ts.map +1 -0
  96. package/dist/rp-login/index.js +3 -0
  97. package/dist/rp-login/index.js.map +1 -0
  98. package/dist/rp-login/step-up.d.ts +43 -0
  99. package/dist/rp-login/step-up.d.ts.map +1 -0
  100. package/dist/rp-login/step-up.js +118 -0
  101. package/dist/rp-login/step-up.js.map +1 -0
  102. package/dist/siop/index.d.ts +3 -0
  103. package/dist/siop/index.d.ts.map +1 -0
  104. package/dist/siop/index.js +3 -0
  105. package/dist/siop/index.js.map +1 -0
  106. package/dist/siop/login-client.d.ts +29 -0
  107. package/dist/siop/login-client.d.ts.map +1 -0
  108. package/dist/siop/login-client.js +79 -0
  109. package/dist/siop/login-client.js.map +1 -0
  110. package/dist/siop/self-issued.d.ts +96 -0
  111. package/dist/siop/self-issued.d.ts.map +1 -0
  112. package/dist/siop/self-issued.js +162 -0
  113. package/dist/siop/self-issued.js.map +1 -0
  114. package/dist/store/holder-identity.d.ts +241 -0
  115. package/dist/store/holder-identity.d.ts.map +1 -0
  116. package/dist/store/holder-identity.js +441 -0
  117. package/dist/store/holder-identity.js.map +1 -0
  118. package/dist/store/index.d.ts +4 -0
  119. package/dist/store/index.d.ts.map +1 -0
  120. package/dist/store/index.js +4 -0
  121. package/dist/store/index.js.map +1 -0
  122. package/dist/store/kv-store.d.ts +51 -0
  123. package/dist/store/kv-store.d.ts.map +1 -0
  124. package/dist/store/kv-store.js +100 -0
  125. package/dist/store/kv-store.js.map +1 -0
  126. package/dist/store/secret-wrap.d.ts +109 -0
  127. package/dist/store/secret-wrap.d.ts.map +1 -0
  128. package/dist/store/secret-wrap.js +85 -0
  129. package/dist/store/secret-wrap.js.map +1 -0
  130. package/dist/trust-tasks/index.d.ts +2 -0
  131. package/dist/trust-tasks/index.d.ts.map +1 -0
  132. package/dist/trust-tasks/index.js +2 -0
  133. package/dist/trust-tasks/index.js.map +1 -0
  134. package/dist/trust-tasks/sign.d.ts +31 -0
  135. package/dist/trust-tasks/sign.d.ts.map +1 -0
  136. package/dist/trust-tasks/sign.js +141 -0
  137. package/dist/trust-tasks/sign.js.map +1 -0
  138. package/dist/util/timing.d.ts +14 -0
  139. package/dist/util/timing.d.ts.map +1 -0
  140. package/dist/util/timing.js +20 -0
  141. package/dist/util/timing.js.map +1 -0
  142. package/dist/vault/delete.d.ts +19 -0
  143. package/dist/vault/delete.d.ts.map +1 -0
  144. package/dist/vault/delete.js +35 -0
  145. package/dist/vault/delete.js.map +1 -0
  146. package/dist/vault/index.d.ts +8 -0
  147. package/dist/vault/index.d.ts.map +1 -0
  148. package/dist/vault/index.js +7 -0
  149. package/dist/vault/index.js.map +1 -0
  150. package/dist/vault/list.d.ts +96 -0
  151. package/dist/vault/list.d.ts.map +1 -0
  152. package/dist/vault/list.js +106 -0
  153. package/dist/vault/list.js.map +1 -0
  154. package/dist/vault/proxy-login.d.ts +100 -0
  155. package/dist/vault/proxy-login.d.ts.map +1 -0
  156. package/dist/vault/proxy-login.js +106 -0
  157. package/dist/vault/proxy-login.js.map +1 -0
  158. package/dist/vault/release.d.ts +33 -0
  159. package/dist/vault/release.d.ts.map +1 -0
  160. package/dist/vault/release.js +83 -0
  161. package/dist/vault/release.js.map +1 -0
  162. package/dist/vault/sign-trust-task.d.ts +26 -0
  163. package/dist/vault/sign-trust-task.d.ts.map +1 -0
  164. package/dist/vault/sign-trust-task.js +53 -0
  165. package/dist/vault/sign-trust-task.js.map +1 -0
  166. package/dist/vault/transport.d.ts +50 -0
  167. package/dist/vault/transport.d.ts.map +1 -0
  168. package/dist/vault/transport.js +118 -0
  169. package/dist/vault/transport.js.map +1 -0
  170. package/dist/vault/upsert.d.ts +102 -0
  171. package/dist/vault/upsert.d.ts.map +1 -0
  172. package/dist/vault/upsert.js +92 -0
  173. package/dist/vault/upsert.js.map +1 -0
  174. package/dist/vta/bridge-mediator-session.d.ts +26 -0
  175. package/dist/vta/bridge-mediator-session.d.ts.map +1 -0
  176. package/dist/vta/bridge-mediator-session.js +37 -0
  177. package/dist/vta/bridge-mediator-session.js.map +1 -0
  178. package/dist/vta/bridge-memory.d.ts +80 -0
  179. package/dist/vta/bridge-memory.d.ts.map +1 -0
  180. package/dist/vta/bridge-memory.js +162 -0
  181. package/dist/vta/bridge-memory.js.map +1 -0
  182. package/dist/vta/client.d.ts +40 -0
  183. package/dist/vta/client.d.ts.map +1 -0
  184. package/dist/vta/client.js +91 -0
  185. package/dist/vta/client.js.map +1 -0
  186. package/dist/vta/contexts.d.ts +60 -0
  187. package/dist/vta/contexts.d.ts.map +1 -0
  188. package/dist/vta/contexts.js +118 -0
  189. package/dist/vta/contexts.js.map +1 -0
  190. package/dist/vta/didcomm.d.ts +57 -0
  191. package/dist/vta/didcomm.d.ts.map +1 -0
  192. package/dist/vta/didcomm.js +138 -0
  193. package/dist/vta/didcomm.js.map +1 -0
  194. package/dist/vta/errors.d.ts +20 -0
  195. package/dist/vta/errors.d.ts.map +1 -0
  196. package/dist/vta/errors.js +64 -0
  197. package/dist/vta/errors.js.map +1 -0
  198. package/dist/vta/index.d.ts +15 -0
  199. package/dist/vta/index.d.ts.map +1 -0
  200. package/dist/vta/index.js +15 -0
  201. package/dist/vta/index.js.map +1 -0
  202. package/dist/vta/mediation.d.ts +80 -0
  203. package/dist/vta/mediation.d.ts.map +1 -0
  204. package/dist/vta/mediation.js +29 -0
  205. package/dist/vta/mediation.js.map +1 -0
  206. package/dist/vta/mediator-client.d.ts +66 -0
  207. package/dist/vta/mediator-client.d.ts.map +1 -0
  208. package/dist/vta/mediator-client.js +139 -0
  209. package/dist/vta/mediator-client.js.map +1 -0
  210. package/dist/vta/pickup.d.ts +81 -0
  211. package/dist/vta/pickup.d.ts.map +1 -0
  212. package/dist/vta/pickup.js +30 -0
  213. package/dist/vta/pickup.js.map +1 -0
  214. package/dist/vta/protocol.d.ts +76 -0
  215. package/dist/vta/protocol.d.ts.map +1 -0
  216. package/dist/vta/protocol.js +30 -0
  217. package/dist/vta/protocol.js.map +1 -0
  218. package/dist/vta/smoke.d.ts +59 -0
  219. package/dist/vta/smoke.d.ts.map +1 -0
  220. package/dist/vta/smoke.js +408 -0
  221. package/dist/vta/smoke.js.map +1 -0
  222. package/dist/vta/transport.d.ts +55 -0
  223. package/dist/vta/transport.d.ts.map +1 -0
  224. package/dist/vta/transport.js +2 -0
  225. package/dist/vta/transport.js.map +1 -0
  226. package/dist/vta/types.d.ts +50 -0
  227. package/dist/vta/types.d.ts.map +1 -0
  228. package/dist/vta/types.js +2 -0
  229. package/dist/vta/types.js.map +1 -0
  230. package/dist/vta/wallet-session.d.ts +87 -0
  231. package/dist/vta/wallet-session.d.ts.map +1 -0
  232. package/dist/vta/wallet-session.js +106 -0
  233. package/dist/vta/wallet-session.js.map +1 -0
  234. package/dist/webauthn/base64url.d.ts +3 -0
  235. package/dist/webauthn/base64url.d.ts.map +1 -0
  236. package/dist/webauthn/base64url.js +17 -0
  237. package/dist/webauthn/base64url.js.map +1 -0
  238. package/dist/webauthn/index.d.ts +4 -0
  239. package/dist/webauthn/index.d.ts.map +1 -0
  240. package/dist/webauthn/index.js +4 -0
  241. package/dist/webauthn/index.js.map +1 -0
  242. package/dist/webauthn/multikey.d.ts +26 -0
  243. package/dist/webauthn/multikey.d.ts.map +1 -0
  244. package/dist/webauthn/multikey.js +91 -0
  245. package/dist/webauthn/multikey.js.map +1 -0
  246. package/dist/webauthn/register.d.ts +36 -0
  247. package/dist/webauthn/register.d.ts.map +1 -0
  248. package/dist/webauthn/register.js +77 -0
  249. package/dist/webauthn/register.js.map +1 -0
  250. package/package.json +56 -0
@@ -0,0 +1,106 @@
1
+ // Vault — list (M1).
2
+ //
3
+ // Posts a `https://trusttasks.org/spec/vault/list/0.1` envelope to the VTA's
4
+ // trust-task dispatcher (`POST /api/trust-tasks`) and returns the metadata
5
+ // view of stored credentials. Read-only — secret material never crosses the
6
+ // wire (it's only released by `vault/release/0.1`, which lands in M2).
7
+ //
8
+ // Authentication: the wallet authcrypts a `atm/1.0/authenticate` DIDComm
9
+ // message to the VTA's keyAgreement key (same primitive `swapAclRest` uses)
10
+ // to obtain a short-lived bearer token, then attaches the token to the
11
+ // trust-tasks POST. No token caching in M1 — every list call does a fresh
12
+ // auth round-trip. Caching can land in M2 alongside vault/sync.
13
+ //
14
+ // Holder authentication: the wallet's holder did:peer must be in the VTA's
15
+ // ACL (placed there by the M0.7 swap-acl flow) and must carry the derived
16
+ // `VaultRead` capability — Admin / Initiator / Application / Reader pass;
17
+ // Monitor is denied.
18
+ import { packAuthcrypt } from "../didcomm/index.js";
19
+ const TASK_VAULT_LIST_0_1 = "https://trusttasks.org/spec/vault/list/0.1";
20
+ const TASK_VAULT_LIST_0_1_RESPONSE = "https://trusttasks.org/spec/vault/list/0.1#response";
21
+ const VTA_AUTHENTICATE = "https://affinidi.com/atm/1.0/authenticate";
22
+ /**
23
+ * Authenticate to the VTA over REST + DIDComm-authcrypt, then post the
24
+ * canonical vault/list/0.1 Trust Task envelope and return the parsed
25
+ * entries. Single round-trip's worth of auth — no token cache in M1.
26
+ */
27
+ export async function vaultListRest(opts) {
28
+ const { baseUrl, holder, service, filter } = opts;
29
+ const f = opts.fetch ?? fetch.bind(globalThis);
30
+ const base = baseUrl.replace(/\/+$/, "");
31
+ // 1. /auth/challenge → flat { challenge, sessionId, expiresAt } per
32
+ // `vti_common::auth::handlers::challenge::ChallengeResponse`. Fields
33
+ // are top-level, NOT nested under a `data` envelope.
34
+ const cRes = await f(`${base}/auth/challenge`, {
35
+ method: "POST",
36
+ headers: { "content-type": "application/json" },
37
+ body: JSON.stringify({ did: holder.did }),
38
+ });
39
+ if (!cRes.ok) {
40
+ throw new Error(`vta /auth/challenge failed (${cRes.status}): ${await cRes.text()}`);
41
+ }
42
+ const cBody = (await cRes.json());
43
+ if (!cBody.sessionId || !cBody.challenge) {
44
+ throw new Error(`vta /auth/challenge: malformed response: ${JSON.stringify(cBody)}`);
45
+ }
46
+ // 2. Authcrypt an `atm/1.0/authenticate` message to the VTA.
47
+ const authMsg = {
48
+ id: globalThis.crypto.randomUUID(),
49
+ type: VTA_AUTHENTICATE,
50
+ from: holder.did,
51
+ to: [service.did],
52
+ body: { challenge: cBody.challenge, session_id: cBody.sessionId },
53
+ };
54
+ const packed = await packAuthcrypt(authMsg, holder, [
55
+ { kid: service.keyAgreementKid, jwk: service.keyAgreementPublicJwk },
56
+ ]);
57
+ // 3. POST the packed JWE to /auth/ → AuthenticateResponse with
58
+ // { session, tokens: { accessToken, ... } } per vta-sdk's
59
+ // `protocols::auth::AuthenticateResponse`. Tokens are nested under
60
+ // `tokens`, NOT `data`.
61
+ const aRes = await f(`${base}/auth/`, {
62
+ method: "POST",
63
+ headers: { "content-type": "application/didcomm-encrypted+json" },
64
+ body: packed,
65
+ });
66
+ if (!aRes.ok) {
67
+ throw new Error(`vta /auth/ failed (${aRes.status}): ${await aRes.text()}`);
68
+ }
69
+ const aBody = (await aRes.json());
70
+ const accessToken = aBody.tokens?.accessToken;
71
+ if (!accessToken) {
72
+ throw new Error(`vta /auth/: malformed response: ${JSON.stringify(aBody)}`);
73
+ }
74
+ // 4. POST /api/trust-tasks with the vault/list/0.1 envelope.
75
+ const envelope = {
76
+ id: globalThis.crypto.randomUUID(),
77
+ type: TASK_VAULT_LIST_0_1,
78
+ issuer: holder.did,
79
+ recipient: service.did,
80
+ issuedAt: new Date().toISOString(),
81
+ payload: filter ?? {},
82
+ };
83
+ const tRes = await f(`${base}/api/trust-tasks`, {
84
+ method: "POST",
85
+ headers: {
86
+ "content-type": "application/json",
87
+ authorization: `Bearer ${accessToken}`,
88
+ },
89
+ body: JSON.stringify(envelope),
90
+ });
91
+ if (!tRes.ok) {
92
+ throw new Error(`vta /api/trust-tasks vault/list failed (${tRes.status}): ${await tRes.text()}`);
93
+ }
94
+ const tBody = (await tRes.json());
95
+ if (tBody.type !== TASK_VAULT_LIST_0_1_RESPONSE) {
96
+ throw new Error(`vault/list: unexpected response type ${tBody.type ?? "(none)"} — ${JSON.stringify(tBody)}`);
97
+ }
98
+ const entries = tBody.payload?.entries ?? [];
99
+ return {
100
+ entries,
101
+ truncated: tBody.payload?.truncated ?? false,
102
+ ...(tBody.payload?.cursor ? { cursor: tBody.payload.cursor } : {}),
103
+ ...(tBody.payload?.redactedFields ? { redactedFields: tBody.payload.redactedFields } : {}),
104
+ };
105
+ }
106
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/vault/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { type Identity } from "../didcomm/index.js";
2
+ import type { SiteTarget } from "./list.js";
3
+ import { type VtaAuthInputs } from "./transport.js";
4
+ /** Refresh hint the maintainer attaches to the SessionBlob — the holder
5
+ * uses this to decide whether to background-refresh, refresh on 401, or
6
+ * wait for the maintainer to drive renewal. Mirrors
7
+ * `vault/_shared/0.1/session-blob#/$defs/RefreshHint`. */
8
+ export type SessionRefreshHint = "maintainer-only" | "on-401" | "before-expiry";
9
+ /** A single cookie returned in a SessionBlob. Mirrors
10
+ * `vault/_shared/0.1/session-blob#/$defs/CookieJarEntry`. */
11
+ export interface SessionCookie {
12
+ name: string;
13
+ value: string;
14
+ domain: string;
15
+ path: string;
16
+ /** RFC 3339 — cookie's own expiry as the third party set it. The
17
+ * holder MUST treat the blob-level `expiresAt` as an outer bound
18
+ * regardless of this field. */
19
+ expires?: string;
20
+ secure?: boolean;
21
+ httpOnly?: boolean;
22
+ sameSite?: "Strict" | "Lax" | "None";
23
+ }
24
+ /** A request header the holder attaches to outbound requests to the
25
+ * bound origin. Typically `Authorization: Bearer <id_token>` for the
26
+ * SIOP path. */
27
+ export interface SessionHeader {
28
+ name: string;
29
+ value: string;
30
+ }
31
+ /** A storage entry (localStorage / sessionStorage) the holder writes
32
+ * into the bound origin. */
33
+ export interface SessionStorageItem {
34
+ key: string;
35
+ value: string;
36
+ }
37
+ /** The cleartext payload of a successful `vault/proxy-login/0.1`
38
+ * response. Mirrors `vault/_shared/0.1/session-blob`. */
39
+ export interface SessionBlob {
40
+ /** Maintainer-assigned opaque id. Echoed at the response root for
41
+ * audit logging without unsealing. */
42
+ sessionId: string;
43
+ /** RFC 3339. Holder MUST discard the blob at this time. */
44
+ expiresAt: string;
45
+ cookies?: SessionCookie[];
46
+ headers?: SessionHeader[];
47
+ localStorage?: SessionStorageItem[];
48
+ sessionStorage?: SessionStorageItem[];
49
+ /** Web origin this session is for. Holder MUST refuse to inject the
50
+ * session into any other origin. Absent only for pure-DIDComm RPs
51
+ * (no browser origin to bind to). */
52
+ bindOrigin?: string;
53
+ refreshHint?: SessionRefreshHint;
54
+ }
55
+ export interface VaultProxyLoginRestOptions extends VtaAuthInputs {
56
+ entryId: string;
57
+ /** When the entry has multiple targets, names which one to log in
58
+ * against. The maintainer falls back to the entry's first DID-shaped
59
+ * or web-origin target if omitted. */
60
+ target?: SiteTarget;
61
+ /** Caller-supplied nonce, embedded verbatim by the maintainer as the
62
+ * SIOP id_token's `nonce` claim. The canonical use is threading the
63
+ * RP's `/auth/challenge` value through so the resulting id_token
64
+ * passes the RP's exact-match nonce check. Drivers without a nonce
65
+ * concept (Password POST, OAuth refresh) ignore. Bounded
66
+ * `[1, 512]` chars by the canonical schema; longer values would fail
67
+ * server-side validation. */
68
+ nonce?: string;
69
+ /** Caller-supplied TTL ceiling in seconds; the maintainer caps further.
70
+ * Honoured up to the server's cap (300 s in M2B.2b). */
71
+ ttlSecondsHint?: number;
72
+ }
73
+ export interface VaultProxyLoginResponse {
74
+ /** Cleartext session material. The caller MUST schedule a wipe at
75
+ * `expiresAt` and MUST NOT inject the session into any origin other
76
+ * than `sessionBlob.bindOrigin`. */
77
+ sessionBlob: SessionBlob;
78
+ /** Mirrors `sessionBlob.sessionId` — exposed for audit logging before
79
+ * unsealing. */
80
+ sessionId: string;
81
+ /** Mirrors `sessionBlob.expiresAt`. */
82
+ expiresAt: string;
83
+ }
84
+ /**
85
+ * Ask the VTA to perform a login at the bound third party using the
86
+ * vault entry's secret material; receive an authcrypt-sealed
87
+ * `SessionBlob` (cookies / headers) that lets the holder operate the
88
+ * resulting session WITHOUT ever holding the long-term credential.
89
+ *
90
+ * The unpacked SessionBlob is returned in plaintext — callers MUST:
91
+ * 1. Schedule a wipe at `expiresAt` (setTimeout in the popup; the
92
+ * countdown pattern in `vault/release` is the reference).
93
+ * 2. Refuse to inject the session into any origin other than
94
+ * `sessionBlob.bindOrigin` (the holder's content script / DNR
95
+ * rules enforce this — @openvtc/pnm-core is browser-agnostic and only
96
+ * surfaces the constraint).
97
+ */
98
+ export declare function vaultProxyLoginRest(opts: VaultProxyLoginRestOptions): Promise<VaultProxyLoginResponse>;
99
+ export type { Identity };
100
+ //# sourceMappingURL=proxy-login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-login.d.ts","sourceRoot":"","sources":["../../src/vault/proxy-login.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMjF;;;2DAG2D;AAC3D,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEhF;8DAC8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb;;oCAEgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CACtC;AAED;;iBAEiB;AACjB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;6BAC6B;AAC7B,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;0DAC0D;AAC1D,MAAM,WAAW,WAAW;IAC1B;2CACuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACpC,cAAc,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACtC;;0CAEsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,0BAA2B,SAAQ,aAAa;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB;;2CAEuC;IACvC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;;;;kCAM8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;6DACyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC;;yCAEqC;IACrC,WAAW,EAAE,WAAW,CAAC;IACzB;qBACiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CA0FlC;AAED,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,106 @@
1
+ // Vault — proxy-login (M2B.3).
2
+ //
3
+ // Posts a `https://trusttasks.org/spec/vault/proxy-login/0.1` envelope.
4
+ // The VTA performs the login at the bound third-party site on the
5
+ // holder's behalf, returns a `SessionBlob` (cookies + headers needed to
6
+ // operate the resulting session) inside a `didcomm-authcrypt` JWE, and
7
+ // the holder unpacks it locally — exactly the same outer machinery as
8
+ // `vault/release`, just with a `SessionBlob` cleartext payload instead
9
+ // of a `VaultSecret`.
10
+ //
11
+ // The long-term credential (the entry's password, DID signing key, or
12
+ // OAuth refresh token) never leaves the VTA in this flow. The holder
13
+ // only ever sees the short-lived session material — a SIOPv2 id_token
14
+ // for DID-self-issued entries (M2B.2b), a cookie jar for Password POST
15
+ // (M2B.5), etc.
16
+ //
17
+ // Callers MUST treat the returned `sessionBlob` like a release secret:
18
+ // in-memory only, wiped no later than `expiresAt`. The maintainer caps
19
+ // `expiresAt` server-side; the wallet honours it via a setTimeout that
20
+ // clears the in-memory copy.
21
+ //
22
+ // M2B.3 implements the response side; the actual injection of cookies /
23
+ // headers into the page lives in the extension (declarativeNetRequest
24
+ // for headers, chrome.cookies.set for cookies) — those bindings live in
25
+ // the extension layer because @openvtc/pnm-core is browser-agnostic.
26
+ import { unpackMessage } from "../didcomm/index.js";
27
+ import { getVtaBearer, postTrustTask } from "./transport.js";
28
+ const TASK_VAULT_PROXY_LOGIN = "https://trusttasks.org/spec/vault/proxy-login/0.1";
29
+ const TASK_VAULT_PROXY_LOGIN_RESPONSE = "https://trusttasks.org/spec/vault/proxy-login/0.1#response";
30
+ /**
31
+ * Ask the VTA to perform a login at the bound third party using the
32
+ * vault entry's secret material; receive an authcrypt-sealed
33
+ * `SessionBlob` (cookies / headers) that lets the holder operate the
34
+ * resulting session WITHOUT ever holding the long-term credential.
35
+ *
36
+ * The unpacked SessionBlob is returned in plaintext — callers MUST:
37
+ * 1. Schedule a wipe at `expiresAt` (setTimeout in the popup; the
38
+ * countdown pattern in `vault/release` is the reference).
39
+ * 2. Refuse to inject the session into any origin other than
40
+ * `sessionBlob.bindOrigin` (the holder's content script / DNR
41
+ * rules enforce this — @openvtc/pnm-core is browser-agnostic and only
42
+ * surfaces the constraint).
43
+ */
44
+ export async function vaultProxyLoginRest(opts) {
45
+ const bearer = await getVtaBearer({
46
+ baseUrl: opts.baseUrl,
47
+ holder: opts.holder,
48
+ service: opts.service,
49
+ ...(opts.fetch ? { fetch: opts.fetch } : {}),
50
+ });
51
+ const wire = await postTrustTask({
52
+ baseUrl: opts.baseUrl,
53
+ bearer,
54
+ envelope: {
55
+ type: TASK_VAULT_PROXY_LOGIN,
56
+ payload: {
57
+ entryId: opts.entryId,
58
+ ...(opts.target !== undefined ? { target: opts.target } : {}),
59
+ ...(opts.nonce !== undefined ? { nonce: opts.nonce } : {}),
60
+ ...(opts.ttlSecondsHint !== undefined
61
+ ? { ttlSecondsHint: opts.ttlSecondsHint }
62
+ : {}),
63
+ },
64
+ issuer: opts.holder.did,
65
+ recipient: opts.service.did,
66
+ },
67
+ expectedResponseType: TASK_VAULT_PROXY_LOGIN_RESPONSE,
68
+ operationLabel: "vault/proxy-login/0.1",
69
+ ...(opts.fetch ? { fetch: opts.fetch } : {}),
70
+ });
71
+ if (wire.sealedSessionBlob.envelope !== "didcomm-authcrypt") {
72
+ throw new Error(`vault/proxy-login: unsupported envelope ${wire.sealedSessionBlob.envelope} — this wallet only understands didcomm-authcrypt`);
73
+ }
74
+ // The VTA authcrypts the SessionBlob to the holder; the unpacker
75
+ // needs the VTA's keyAgreement public JWK to verify the sender
76
+ // binding (the `skid` in the JWE's protected header). Without it,
77
+ // vti-didcomm-js raises "sender.publicJwk required for authcrypt".
78
+ // The service endpoint structure carries the resolved VTA pubkey
79
+ // from the holder's onboarding handshake.
80
+ const unpacked = await unpackMessage({
81
+ input: wire.sealedSessionBlob.jwe,
82
+ sender_public_jwk: opts.service.keyAgreementPublicJwk,
83
+ }, opts.holder);
84
+ if (unpacked.kind !== "encrypted") {
85
+ throw new Error(`vault/proxy-login: unpacked JWE was not authcrypt-encrypted (kind=${unpacked.kind})`);
86
+ }
87
+ // Defence-in-depth: anoncrypt-only would be a downgrade — the VTA
88
+ // MUST authenticate as the signer so a relay can't substitute a
89
+ // different SessionBlob.
90
+ if (!unpacked.authenticated) {
91
+ throw new Error("vault/proxy-login: unpacked JWE was not authenticated (anoncrypt downgrade)");
92
+ }
93
+ const body = unpacked.message.body;
94
+ if (!body || typeof body !== "object") {
95
+ throw new Error("vault/proxy-login: unpacked DIDComm message has no body");
96
+ }
97
+ // Cast at the wire boundary — the server has already canonical-schema-
98
+ // validated the SessionBlob shape before sealing it.
99
+ const sessionBlob = body;
100
+ return {
101
+ sessionBlob,
102
+ sessionId: wire.sessionId,
103
+ expiresAt: wire.expiresAt,
104
+ };
105
+ }
106
+ //# sourceMappingURL=proxy-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-login.js","sourceRoot":"","sources":["../../src/vault/proxy-login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type Identity } from "../didcomm/index.js";
2
+ import type { SecretKind } from "./list.js";
3
+ import { type VtaAuthInputs } from "./transport.js";
4
+ import type { VaultSecret } from "./upsert.js";
5
+ export interface VaultReleaseRestOptions extends VtaAuthInputs {
6
+ entryId: string;
7
+ /** Caller's preferred cache TTL in seconds. The maintainer caps
8
+ * server-side (M2A.3 ceiling is 60 s); honoured up to the cap. */
9
+ ttlSecondsHint?: number;
10
+ }
11
+ export interface VaultReleaseResponse {
12
+ /** Unpacked secret material. Caller MUST wipe / zero this reference
13
+ * no later than `ttlSeconds` after the release call returned. */
14
+ secret: VaultSecret;
15
+ /** Maintainer-declared discriminator — mirrors `secret.kind`. */
16
+ secretKind: SecretKind;
17
+ /** Enforced cache TTL. Already capped by the maintainer; the caller
18
+ * MUST honour it. */
19
+ ttlSeconds: number;
20
+ }
21
+ /**
22
+ * Release the cleartext secret material of a vault entry. The
23
+ * maintainer authcrypts the secret to the holder's keyAgreement key;
24
+ * this helper unpacks the resulting JWE locally.
25
+ *
26
+ * The unpacked secret is returned in plaintext — callers MUST schedule
27
+ * a wipe at `ttlSeconds` (e.g. via `setTimeout`) and MUST NOT persist
28
+ * the cleartext beyond that window (no disk, no logs, no syncing
29
+ * storage).
30
+ */
31
+ export declare function vaultReleaseRest(opts: VaultReleaseRestOptions): Promise<VaultReleaseResponse>;
32
+ export type { Identity };
33
+ //# sourceMappingURL=release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/vault/release.ts"],"names":[],"mappings":"AAUA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB;uEACmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC;sEACkE;IAClE,MAAM,EAAE,WAAW,CAAC;IACpB,iEAAiE;IACjE,UAAU,EAAE,UAAU,CAAC;IACvB;0BACsB;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,oBAAoB,CAAC,CAoF/B;AAKD,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,83 @@
1
+ // Vault — release (M2A.5).
2
+ //
3
+ // Posts a `https://trusttasks.org/spec/vault/release/0.1` envelope and
4
+ // unpacks the maintainer's authcrypt-sealed response into the cleartext
5
+ // `VaultSecret`. The secret bytes only ever live in the holder's local
6
+ // memory for the duration of the `ttlSeconds` the maintainer caps; the
7
+ // caller MUST wipe them at TTL even if the user hasn't finished
8
+ // interacting (in practice: a `setTimeout` that clears the popup's
9
+ // "reveal" state).
10
+ import { unpackMessage } from "../didcomm/index.js";
11
+ import { getVtaBearer, postTrustTask } from "./transport.js";
12
+ const TASK_VAULT_RELEASE = "https://trusttasks.org/spec/vault/release/0.1";
13
+ const TASK_VAULT_RELEASE_RESPONSE = "https://trusttasks.org/spec/vault/release/0.1#response";
14
+ /**
15
+ * Release the cleartext secret material of a vault entry. The
16
+ * maintainer authcrypts the secret to the holder's keyAgreement key;
17
+ * this helper unpacks the resulting JWE locally.
18
+ *
19
+ * The unpacked secret is returned in plaintext — callers MUST schedule
20
+ * a wipe at `ttlSeconds` (e.g. via `setTimeout`) and MUST NOT persist
21
+ * the cleartext beyond that window (no disk, no logs, no syncing
22
+ * storage).
23
+ */
24
+ export async function vaultReleaseRest(opts) {
25
+ const bearer = await getVtaBearer({
26
+ baseUrl: opts.baseUrl,
27
+ holder: opts.holder,
28
+ service: opts.service,
29
+ ...(opts.fetch ? { fetch: opts.fetch } : {}),
30
+ });
31
+ const wire = await postTrustTask({
32
+ baseUrl: opts.baseUrl,
33
+ bearer,
34
+ envelope: {
35
+ type: TASK_VAULT_RELEASE,
36
+ payload: {
37
+ entryId: opts.entryId,
38
+ ...(opts.ttlSecondsHint !== undefined
39
+ ? { ttlSecondsHint: opts.ttlSecondsHint }
40
+ : {}),
41
+ },
42
+ issuer: opts.holder.did,
43
+ recipient: opts.service.did,
44
+ },
45
+ expectedResponseType: TASK_VAULT_RELEASE_RESPONSE,
46
+ operationLabel: "vault/release/0.1",
47
+ ...(opts.fetch ? { fetch: opts.fetch } : {}),
48
+ });
49
+ if (wire.sealedSecret.envelope !== "didcomm-authcrypt") {
50
+ throw new Error(`vault/release: unsupported envelope ${wire.sealedSecret.envelope} — this wallet only understands didcomm-authcrypt`);
51
+ }
52
+ // The VTA authcrypts the secret to the holder; the unpacker needs
53
+ // the VTA's keyAgreement public JWK to verify the sender binding.
54
+ // Same shape as vault/proxy-login — see that file for the longer
55
+ // explanation. Latent in this file since M2A.3 (release was never
56
+ // end-to-end tested with a real VTA before M2B.4 demos exposed
57
+ // the failure on the parallel proxy-login path).
58
+ const unpacked = await unpackMessage({
59
+ input: wire.sealedSecret.jwe,
60
+ sender_public_jwk: opts.service.keyAgreementPublicJwk,
61
+ }, opts.holder);
62
+ if (unpacked.kind !== "encrypted") {
63
+ throw new Error(`vault/release: unpacked JWE was not authcrypt-encrypted (kind=${unpacked.kind})`);
64
+ }
65
+ // Defence-in-depth: the unpacked message MUST be authenticated (the
66
+ // VTA's signature verified) — anoncrypt-only would be a downgrade.
67
+ if (!unpacked.authenticated) {
68
+ throw new Error("vault/release: unpacked JWE was not authenticated (anoncrypt downgrade)");
69
+ }
70
+ // The cleartext body IS the VaultSecret JSON. Cast it directly — the
71
+ // server-side validation already ensured the variant discriminator
72
+ // matches `secretKind`.
73
+ const body = unpacked.message.body;
74
+ if (!body || typeof body !== "object") {
75
+ throw new Error("vault/release: unpacked DIDComm message has no body");
76
+ }
77
+ return {
78
+ secret: body,
79
+ secretKind: wire.secretKind,
80
+ ttlSeconds: wire.ttlSeconds,
81
+ };
82
+ }
83
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/vault/release.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type VtaAuthInputs } from "./transport.js";
2
+ import type { TrustTaskEnvelope } from "../trust-tasks/sign.js";
3
+ export interface VaultSignTrustTaskRestOptions extends VtaAuthInputs {
4
+ /** Identifier of the vault entry whose principal will sign. MUST
5
+ * point at a `did-self-issued` or `didcomm-peer` entry — other
6
+ * kinds reject with `vault/sign-trust-task:not_signable`. */
7
+ entryId: string;
8
+ /** The Trust Task document to sign. MUST have no `proof` field.
9
+ * MUST set `issuer = <entry.principalDid>`. The VTA refuses to
10
+ * silently rewrite issuer (`envelope_issuer_mismatch`). */
11
+ unsignedEnvelope: TrustTaskEnvelope;
12
+ }
13
+ export interface VaultSignTrustTaskResponse {
14
+ /** The supplied envelope with a `proof` field attached.
15
+ * `proof.verificationMethod = <principalDid>#<signingKeyId>`;
16
+ * `proof.cryptosuite = "eddsa-jcs-2022"`;
17
+ * `proof.proofPurpose = "assertionMethod"`. */
18
+ signedEnvelope: TrustTaskEnvelope;
19
+ }
20
+ /**
21
+ * Ask the VTA to sign a Trust Task envelope as the principal of a
22
+ * vault entry. The returned `signedEnvelope` is byte-identical to
23
+ * the input except for the attached `proof` field.
24
+ */
25
+ export declare function vaultSignTrustTaskRest(opts: VaultSignTrustTaskRestOptions): Promise<VaultSignTrustTaskResponse>;
26
+ //# sourceMappingURL=sign-trust-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-trust-task.d.ts","sourceRoot":"","sources":["../../src/vault/sign-trust-task.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAiB,KAAK,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAMhE,MAAM,WAAW,6BAA8B,SAAQ,aAAa;IAClE;;kEAE8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB;;gEAE4D;IAC5D,gBAAgB,EAAE,iBAAiB,CAAC;CACrC;AAED,MAAM,WAAW,0BAA0B;IACzC;;;oDAGgD;IAChD,cAAc,EAAE,iBAAiB,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAAC,0BAA0B,CAAC,CA8BrC"}
@@ -0,0 +1,53 @@
1
+ // Vault — sign-trust-task.
2
+ //
3
+ // Posts a `https://trusttasks.org/spec/vault/sign-trust-task/0.1`
4
+ // envelope. The VTA attaches an eddsa-jcs-2022 Data Integrity proof
5
+ // to the supplied envelope, signing as the principal DID of a
6
+ // `did-self-issued` or `didcomm-peer` vault entry. The long-term
7
+ // signing key never leaves the VTA.
8
+ //
9
+ // This is the per-envelope signing complement to `vault/proxy-login`:
10
+ // proxy-login mints a session credential at session-start; sign-trust-
11
+ // task signs individual follow-up tasks during that session so the
12
+ // RP's `proof.verificationMethod == authenticated session DID` check
13
+ // passes.
14
+ //
15
+ // Unlike `vault/release` / `vault/proxy-login`, the response is NOT
16
+ // authcrypt-sealed — the signed envelope is destined for the RP
17
+ // (which has to be able to verify it anyway) and carries no
18
+ // long-term secret material. The proof itself is the only sensitive
19
+ // output, and it's deliberately public.
20
+ import { postTrustTask, getVtaBearer } from "./transport.js";
21
+ const TASK_VAULT_SIGN_TRUST_TASK = "https://trusttasks.org/spec/vault/sign-trust-task/0.1";
22
+ const TASK_VAULT_SIGN_TRUST_TASK_RESPONSE = "https://trusttasks.org/spec/vault/sign-trust-task/0.1#response";
23
+ /**
24
+ * Ask the VTA to sign a Trust Task envelope as the principal of a
25
+ * vault entry. The returned `signedEnvelope` is byte-identical to
26
+ * the input except for the attached `proof` field.
27
+ */
28
+ export async function vaultSignTrustTaskRest(opts) {
29
+ const bearer = await getVtaBearer({
30
+ baseUrl: opts.baseUrl,
31
+ holder: opts.holder,
32
+ service: opts.service,
33
+ ...(opts.fetch ? { fetch: opts.fetch } : {}),
34
+ });
35
+ const wire = await postTrustTask({
36
+ baseUrl: opts.baseUrl,
37
+ bearer,
38
+ envelope: {
39
+ type: TASK_VAULT_SIGN_TRUST_TASK,
40
+ payload: {
41
+ entryId: opts.entryId,
42
+ unsignedEnvelope: opts.unsignedEnvelope,
43
+ },
44
+ issuer: opts.holder.did,
45
+ recipient: opts.service.did,
46
+ },
47
+ expectedResponseType: TASK_VAULT_SIGN_TRUST_TASK_RESPONSE,
48
+ operationLabel: "vault/sign-trust-task/0.1",
49
+ ...(opts.fetch ? { fetch: opts.fetch } : {}),
50
+ });
51
+ return { signedEnvelope: wire.signedEnvelope };
52
+ }
53
+ //# sourceMappingURL=sign-trust-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-trust-task.js","sourceRoot":"","sources":["../../src/vault/sign-trust-task.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,EAAE;AACF,kEAAkE;AAClE,oEAAoE;AACpE,8DAA8D;AAC9D,iEAAiE;AACjE,oCAAoC;AACpC,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,mEAAmE;AACnE,qEAAqE;AACrE,UAAU;AACV,EAAE;AACF,oEAAoE;AACpE,gEAAgE;AAChE,4DAA4D;AAC5D,oEAAoE;AACpE,wCAAwC;AAExC,OAAO,EAAE,aAAa,EAAsB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGjF,MAAM,0BAA0B,GAAG,uDAAuD,CAAC;AAC3F,MAAM,mCAAmC,GACvC,gEAAgE,CAAC;AAqBnE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAmC;IAEnC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC,CAAC;IAMH,MAAM,IAAI,GAAG,MAAM,aAAa,CAAe;QAC7C,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM;QACN,QAAQ,EAAE;YACR,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE;gBACP,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aACxC;YACD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;YACvB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;SAC5B;QACD,oBAAoB,EAAE,mCAAmC;QACzD,cAAc,EAAE,2BAA2B;QAC3C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC,CAAC;IAEH,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { type Identity } from "../didcomm/index.js";
2
+ import type { RemoteDidcommEndpoint } from "../vta/didcomm.js";
3
+ export interface VtaAuthInputs {
4
+ /** VTA REST base URL — from the connection state's `restBaseUrl`. */
5
+ baseUrl: string;
6
+ /** Authcrypt sender — the holder's DIDComm identity post-onboarding. */
7
+ holder: Identity;
8
+ /** VTA's keyAgreement endpoint (resolved via `resolveKeyAgreement`). */
9
+ service: RemoteDidcommEndpoint;
10
+ /** fetch impl (defaults to global). */
11
+ fetch?: typeof fetch;
12
+ }
13
+ /**
14
+ * Run /auth/challenge → authcrypt /auth/ → bearer token. The token's
15
+ * 15-minute TTL is more than enough for a single trust-task POST; we
16
+ * don't cache because the next vault op happens whenever the user
17
+ * clicks something and would likely fall outside the cache window.
18
+ */
19
+ export declare function getVtaBearer(opts: VtaAuthInputs): Promise<string>;
20
+ export interface VaultTaskRequest {
21
+ /** Trust Task type URI (matches the request URI in the canonical spec). */
22
+ type: string;
23
+ /** Payload object — task-specific shape. */
24
+ payload: unknown;
25
+ /** Optional issuer DID; set when the consumer signs a `proof`. */
26
+ issuer?: string;
27
+ /** Optional recipient DID — the maintainer's DID. Audience-binds the doc. */
28
+ recipient?: string;
29
+ }
30
+ export interface PostTrustTaskOpts<R> {
31
+ baseUrl: string;
32
+ bearer: string;
33
+ envelope: VaultTaskRequest;
34
+ /** Expected response `type` URI (the `<request>#response` form). */
35
+ expectedResponseType: string;
36
+ fetch?: typeof fetch;
37
+ /** Internal: used to enrich error messages. */
38
+ operationLabel?: string;
39
+ }
40
+ /**
41
+ * POST an authenticated Trust Task envelope to /api/trust-tasks. The
42
+ * framework's dispatcher returns either a `<task>#response` document
43
+ * (success) or a `trust-task-error/0.1` document (reject). This helper
44
+ * differentiates the two: success returns the parsed `payload` cast as
45
+ * `R`; reject throws an `Error` carrying the framework's error code +
46
+ * comment so callers see "vault/upsert:version_conflict — ..." rather
47
+ * than a raw 400.
48
+ */
49
+ export declare function postTrustTask<R>(opts: PostTrustTaskOpts<R>): Promise<R>;
50
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/vault/transport.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI/D,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,MAAM,EAAE,QAAQ,CAAC;IACjB,wEAAwE;IACxE,OAAO,EAAE,qBAAqB,CAAC;IAC/B,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAgDvE;AAED,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,oEAAoE;IACpE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAmD7E"}