@interop/wallet-request 0.1.0 → 0.2.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 +1 -1
- package/dist/appKey.d.ts +10 -70
- package/dist/appKey.d.ts.map +1 -1
- package/dist/appKey.js +34 -112
- package/dist/appKey.js.map +1 -1
- package/dist/capabilityRequest.d.ts +1 -1
- package/dist/capabilityRequest.js +1 -1
- package/dist/classify.d.ts +2 -2
- package/dist/classify.d.ts.map +1 -1
- package/dist/classify.js +13 -35
- package/dist/classify.js.map +1 -1
- package/dist/composeVp.d.ts +0 -5
- package/dist/composeVp.d.ts.map +1 -1
- package/dist/composeVp.js +4 -7
- package/dist/composeVp.js.map +1 -1
- package/dist/ephemeralExchange.d.ts +22 -6
- package/dist/ephemeralExchange.d.ts.map +1 -1
- package/dist/ephemeralExchange.js +43 -16
- package/dist/ephemeralExchange.js.map +1 -1
- package/dist/exchangeClient.d.ts +7 -4
- package/dist/exchangeClient.d.ts.map +1 -1
- package/dist/exchangeClient.js +9 -18
- package/dist/exchangeClient.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/interactionUrl.d.ts +1 -1
- package/dist/interactionUrl.d.ts.map +1 -1
- package/dist/interactionUrl.js +17 -9
- package/dist/interactionUrl.js.map +1 -1
- package/dist/matching.d.ts.map +1 -1
- package/dist/matching.js +3 -18
- package/dist/matching.js.map +1 -1
- package/dist/onboarding.d.ts +1 -1
- package/dist/onboarding.js +1 -1
- package/dist/onboarding.js.map +1 -1
- package/dist/parse.d.ts +20 -7
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js +41 -17
- package/dist/parse.js.map +1 -1
- package/dist/processRequest.d.ts +16 -1
- package/dist/processRequest.d.ts.map +1 -1
- package/dist/processRequest.js +29 -3
- package/dist/processRequest.js.map +1 -1
- package/dist/queryPredicates.d.ts +44 -33
- package/dist/queryPredicates.d.ts.map +1 -1
- package/dist/queryPredicates.js +56 -45
- package/dist/queryPredicates.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/walletInput.d.ts +22 -7
- package/dist/walletInput.d.ts.map +1 -1
- package/dist/walletInput.js +61 -14
- package/dist/walletInput.js.map +1 -1
- package/package.json +3 -2
package/dist/composeVp.d.ts
CHANGED
|
@@ -44,9 +44,4 @@ export declare function composeVp({ presentationSigner, selectedVcs, challenge,
|
|
|
44
44
|
};
|
|
45
45
|
documentLoader?: IDocumentLoader;
|
|
46
46
|
}): Promise<IVerifiablePresentation>;
|
|
47
|
-
/**
|
|
48
|
-
* @deprecated Use {@link composeVp}. Retained for Freewallet, which imports the
|
|
49
|
-
* `composeVP` spelling.
|
|
50
|
-
*/
|
|
51
|
-
export declare const composeVP: typeof composeVp;
|
|
52
47
|
//# sourceMappingURL=composeVp.d.ts.map
|
package/dist/composeVp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composeVp.d.ts","sourceRoot":"","sources":["../src/composeVp.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"composeVp.d.ts","sourceRoot":"","sources":["../src/composeVp.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAInE,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,EACL,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAEnB;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,eAMzB,CAAA;AAuFJ;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,SAAS,CAAC,EAC9B,kBAAkB,EAClB,WAAgB,EAChB,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,KAAU,EACV,UAAU,EACV,cAAc,EAAE,MAAuB,EACxC,EAAE;IACD,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAA;IACrC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,OAAO,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,KAAK,EAAE,CAAA;IACf,UAAU,CAAC,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAA;IAClC,cAAc,CAAC,EAAE,eAAe,CAAA;CACjC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAyDnC"}
|
package/dist/composeVp.js
CHANGED
|
@@ -21,6 +21,7 @@ import { securityLoader } from '@interop/security-document-loader';
|
|
|
21
21
|
import { contexts as byoeContexts, CONTEXT_URL_V1 } from 'byoe-context';
|
|
22
22
|
import { presentationSuiteFor } from './presentationSuite.js';
|
|
23
23
|
import { presentationVersionFor } from './classify.js';
|
|
24
|
+
import { toArray } from './queryPredicates.js';
|
|
24
25
|
/**
|
|
25
26
|
* Shared JSON-LD document loader for presentation and credential signing: the
|
|
26
27
|
* standard security contexts plus the hosted App Connect context, resolved
|
|
@@ -47,8 +48,9 @@ const APP_CONNECT_CONTEXT_URL = CONTEXT_URL_V1;
|
|
|
47
48
|
* Reads a presentation's `@context` as a mutable array of entries.
|
|
48
49
|
*/
|
|
49
50
|
function contextEntries(presentation) {
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
return [
|
|
52
|
+
...toArray(presentation['@context'])
|
|
53
|
+
];
|
|
52
54
|
}
|
|
53
55
|
/**
|
|
54
56
|
* Writes a presentation's `@context` from an array of entries.
|
|
@@ -168,9 +170,4 @@ export async function composeVp({ presentationSigner, selectedVcs = [], challeng
|
|
|
168
170
|
suite
|
|
169
171
|
}));
|
|
170
172
|
}
|
|
171
|
-
/**
|
|
172
|
-
* @deprecated Use {@link composeVp}. Retained for Freewallet, which imports the
|
|
173
|
-
* `composeVP` spelling.
|
|
174
|
-
*/
|
|
175
|
-
export const composeVP = composeVp;
|
|
176
173
|
//# sourceMappingURL=composeVp.js.map
|
package/dist/composeVp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composeVp.js","sourceRoot":"","sources":["../src/composeVp.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"composeVp.js","sourceRoot":"","sources":["../src/composeVp.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,11 +10,6 @@ export declare const EPHEMERAL_EXCHANGE_POLL_INTERVAL_MS = 3000;
|
|
|
10
10
|
* (an invite countdown) picks its own.
|
|
11
11
|
*/
|
|
12
12
|
export declare const EPHEMERAL_EXCHANGE_TTL_MS: number;
|
|
13
|
-
/**
|
|
14
|
-
* The exchange path the interaction URL adds, with the interaction-URL
|
|
15
|
-
* version query the answering wallet's scanner expects.
|
|
16
|
-
*/
|
|
17
|
-
export declare const EPHEMERAL_EXCHANGE_INTERACTION_PATH = "/protocols?iuv=1";
|
|
18
13
|
/**
|
|
19
14
|
* Raised when the exchange is no longer on the server (a `404`): it either
|
|
20
15
|
* expired or was never created. The remedy is a fresh exchange, so a caller
|
|
@@ -30,6 +25,24 @@ export declare const EPHEMERAL_EXCHANGE_INTERACTION_PATH = "/protocols?iuv=1";
|
|
|
30
25
|
export declare class EphemeralExchangeGoneError extends Error {
|
|
31
26
|
constructor(message?: string);
|
|
32
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* The one home of the exchange response-status rule shared by the exchange
|
|
30
|
+
* client and the interaction URL resolver: a 404 means the ephemeral exchange
|
|
31
|
+
* is gone (its own error, so callers can dispatch on it), any other non-2xx
|
|
32
|
+
* status is a plain failure.
|
|
33
|
+
*
|
|
34
|
+
* @param options {object}
|
|
35
|
+
* @param options.response {Response}
|
|
36
|
+
* @param options.label {string} - What the URL names in the error message
|
|
37
|
+
* (`exchange`, `interaction URL`).
|
|
38
|
+
* @param options.url {string}
|
|
39
|
+
* @returns {void}
|
|
40
|
+
*/
|
|
41
|
+
export declare function assertExchangeResponseOk({ response, label, url }: {
|
|
42
|
+
response: Response;
|
|
43
|
+
label: string;
|
|
44
|
+
url: string;
|
|
45
|
+
}): void;
|
|
33
46
|
/**
|
|
34
47
|
* Raised when the poll's own `timeoutMs` elapses before the exchange
|
|
35
48
|
* completes. Distinct from {@link EphemeralExchangeGoneError}: the exchange
|
|
@@ -51,7 +64,10 @@ export declare class EphemeralExchangeTimeoutError extends Error {
|
|
|
51
64
|
*
|
|
52
65
|
* The exchange URL is read from the `Location` response header, falling back
|
|
53
66
|
* to the body's `location` member -- deployments differ on which they set,
|
|
54
|
-
* and either alone is enough.
|
|
67
|
+
* and either alone is enough. Either value is resolved against the request URL
|
|
68
|
+
* (a `Location` may be relative, per RFC 9110), and the interaction URL is
|
|
69
|
+
* built with the URL API so an exchange URL carrying a query string or a
|
|
70
|
+
* trailing slash still yields a well-formed link.
|
|
55
71
|
*
|
|
56
72
|
* @param options {object}
|
|
57
73
|
* @param options.serverUrl {string} the WAS server base URL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ephemeralExchange.d.ts","sourceRoot":"","sources":["../src/ephemeralExchange.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C;;GAEG;AACH,eAAO,MAAM,mCAAmC,OAAO,CAAA;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,QAAiB,CAAA;AAEvD
|
|
1
|
+
{"version":3,"file":"ephemeralExchange.d.ts","sourceRoot":"","sources":["../src/ephemeralExchange.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C;;GAEG;AACH,eAAO,MAAM,mCAAmC,OAAO,CAAA;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,QAAiB,CAAA;AAEvD;;;;;;;;;;;GAWG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,SAAmD;CAIvE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,KAAK,EACL,GAAG,EACJ,EAAE;IACD,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,IAAI,CAYP;AAED;;;;;GAKG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;gBAEpD,OAAO,SAA8D;CAKxE;AAcD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,uBAAuB,CAAC,EAC5C,SAAS,EACT,OAAO,EACP,KAAK,EAAE,SAA4B,EACpC,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAuC3D;AAmCD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,qBAAqB,CAAC,EAC1C,WAAW,EACX,MAAM,EACN,SAAS,EACT,UAAgD,EAChD,KAAK,EAAE,SAA4B,EACpC,EAAE;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,GAAG,OAAO,CAAC,OAAO,CAAC,CAyDnB"}
|
|
@@ -28,11 +28,6 @@ export const EPHEMERAL_EXCHANGE_POLL_INTERVAL_MS = 3000;
|
|
|
28
28
|
* (an invite countdown) picks its own.
|
|
29
29
|
*/
|
|
30
30
|
export const EPHEMERAL_EXCHANGE_TTL_MS = 10 * 60 * 1000;
|
|
31
|
-
/**
|
|
32
|
-
* The exchange path the interaction URL adds, with the interaction-URL
|
|
33
|
-
* version query the answering wallet's scanner expects.
|
|
34
|
-
*/
|
|
35
|
-
export const EPHEMERAL_EXCHANGE_INTERACTION_PATH = '/protocols?iuv=1';
|
|
36
31
|
/**
|
|
37
32
|
* Raised when the exchange is no longer on the server (a `404`): it either
|
|
38
33
|
* expired or was never created. The remedy is a fresh exchange, so a caller
|
|
@@ -51,6 +46,28 @@ export class EphemeralExchangeGoneError extends Error {
|
|
|
51
46
|
this.name = 'EphemeralExchangeGoneError';
|
|
52
47
|
}
|
|
53
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* The one home of the exchange response-status rule shared by the exchange
|
|
51
|
+
* client and the interaction URL resolver: a 404 means the ephemeral exchange
|
|
52
|
+
* is gone (its own error, so callers can dispatch on it), any other non-2xx
|
|
53
|
+
* status is a plain failure.
|
|
54
|
+
*
|
|
55
|
+
* @param options {object}
|
|
56
|
+
* @param options.response {Response}
|
|
57
|
+
* @param options.label {string} - What the URL names in the error message
|
|
58
|
+
* (`exchange`, `interaction URL`).
|
|
59
|
+
* @param options.url {string}
|
|
60
|
+
* @returns {void}
|
|
61
|
+
*/
|
|
62
|
+
export function assertExchangeResponseOk({ response, label, url }) {
|
|
63
|
+
if (response.status === 404) {
|
|
64
|
+
throw new EphemeralExchangeGoneError(`The ${label} at ${url} is no longer available.`);
|
|
65
|
+
}
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
throw new Error(`The ${label} at ${url} responded ${response.status} ` +
|
|
68
|
+
`${response.statusText}.`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
54
71
|
/**
|
|
55
72
|
* Raised when the poll's own `timeoutMs` elapses before the exchange
|
|
56
73
|
* completes. Distinct from {@link EphemeralExchangeGoneError}: the exchange
|
|
@@ -86,7 +103,10 @@ function normalizedServerUrl({ serverUrl }) {
|
|
|
86
103
|
*
|
|
87
104
|
* The exchange URL is read from the `Location` response header, falling back
|
|
88
105
|
* to the body's `location` member -- deployments differ on which they set,
|
|
89
|
-
* and either alone is enough.
|
|
106
|
+
* and either alone is enough. Either value is resolved against the request URL
|
|
107
|
+
* (a `Location` may be relative, per RFC 9110), and the interaction URL is
|
|
108
|
+
* built with the URL API so an exchange URL carrying a query string or a
|
|
109
|
+
* trailing slash still yields a well-formed link.
|
|
90
110
|
*
|
|
91
111
|
* @param options {object}
|
|
92
112
|
* @param options.serverUrl {string} the WAS server base URL
|
|
@@ -106,23 +126,30 @@ export async function createEphemeralExchange({ serverUrl, request, fetch: fetch
|
|
|
106
126
|
if (!response.ok) {
|
|
107
127
|
throw new Error(`Could not create the ephemeral exchange (HTTP ${response.status}).`);
|
|
108
128
|
}
|
|
109
|
-
let
|
|
110
|
-
if (!
|
|
129
|
+
let location = response.headers?.get('location') ?? '';
|
|
130
|
+
if (!location) {
|
|
111
131
|
try {
|
|
112
132
|
const body = (await response.json());
|
|
113
|
-
|
|
133
|
+
location = body?.location ?? '';
|
|
114
134
|
}
|
|
115
135
|
catch (err) {
|
|
116
136
|
log.warn('Could not parse the created exchange body', { err });
|
|
117
137
|
}
|
|
118
138
|
}
|
|
119
|
-
if (!
|
|
139
|
+
if (!location) {
|
|
120
140
|
throw new Error('The created ephemeral exchange has no location.');
|
|
121
141
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
142
|
+
let exchange;
|
|
143
|
+
try {
|
|
144
|
+
exchange = new URL(location, url);
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
throw new Error(`The created ephemeral exchange has an invalid location "${location}".`, { cause: err });
|
|
148
|
+
}
|
|
149
|
+
const interaction = new URL(exchange.href);
|
|
150
|
+
interaction.pathname = `${exchange.pathname.replace(/\/+$/, '')}/protocols`;
|
|
151
|
+
interaction.searchParams.set('iuv', '1');
|
|
152
|
+
return { exchangeUrl: exchange.href, interactionUrl: interaction.href };
|
|
126
153
|
}
|
|
127
154
|
/**
|
|
128
155
|
* Sleeps for `delayMs`, rejecting promptly with the signal's reason if the
|
|
@@ -174,8 +201,8 @@ function abortableDelay({ delayMs, signal }) {
|
|
|
174
201
|
* @returns {Promise<unknown>} the completed exchange's `response` member
|
|
175
202
|
*/
|
|
176
203
|
export async function pollEphemeralExchange({ exchangeUrl, signal, timeoutMs, intervalMs = EPHEMERAL_EXCHANGE_POLL_INTERVAL_MS, fetch: fetchImpl = globalThis.fetch }) {
|
|
177
|
-
// One internal signal
|
|
178
|
-
//
|
|
204
|
+
// One internal signal combines the caller's abort and the deadline, so a
|
|
205
|
+
// single `signal` reaches fetch and the delay. The caller's reason is
|
|
179
206
|
// forwarded verbatim; the deadline aborts with the timeout error.
|
|
180
207
|
const controller = new AbortController();
|
|
181
208
|
const onCallerAbort = () => controller.abort(signal?.reason);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ephemeralExchange.js","sourceRoot":"","sources":["../src/ephemeralExchange.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAG9B;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,CAAA;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAEvD
|
|
1
|
+
{"version":3,"file":"ephemeralExchange.js","sourceRoot":"","sources":["../src/ephemeralExchange.ts"],"names":[],"mappings":"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"}
|
package/dist/exchangeClient.d.ts
CHANGED
|
@@ -122,14 +122,17 @@ export declare function submitPresentation({ request, exchangeUrl, verifiablePre
|
|
|
122
122
|
* Sends the whole Wallet Response object -- a VP and/or delegated `zcap`s -- to
|
|
123
123
|
* an exchanger endpoint (DCW's response envelope, which threads the grants
|
|
124
124
|
* *beside* the VP rather than embedding them inside it). Returns the parsed JSON
|
|
125
|
-
* reply, or `
|
|
126
|
-
* envelope carries only the VP) because the two apps POST different shapes
|
|
125
|
+
* reply, or `{}` for an empty body. Kept alongside `submitPresentation` (whose
|
|
126
|
+
* envelope carries only the VP) because the two apps POST different shapes;
|
|
127
|
+
* both go through `postToExchange`, so a `404` is reported as
|
|
128
|
+
* {@link EphemeralExchangeGoneError} and any other non-2xx status throws
|
|
129
|
+
* rather than passing an error body off as the peer's reply.
|
|
127
130
|
*
|
|
128
131
|
* @param options {object}
|
|
129
132
|
* @param options.exchangeUrl {string}
|
|
130
133
|
* @param options.payload {{ verifiablePresentation?, zcap? }}
|
|
131
134
|
* @param [options.fetch] {FetchLike}
|
|
132
|
-
* @returns {Promise<
|
|
135
|
+
* @returns {Promise<VCAPIExchangeResponse>}
|
|
133
136
|
*/
|
|
134
137
|
export declare function sendToExchanger({ exchangeUrl, payload, fetch }: {
|
|
135
138
|
exchangeUrl: string;
|
|
@@ -138,5 +141,5 @@ export declare function sendToExchanger({ exchangeUrl, payload, fetch }: {
|
|
|
138
141
|
zcap?: IZcap[];
|
|
139
142
|
};
|
|
140
143
|
fetch?: FetchLike;
|
|
141
|
-
}): Promise<
|
|
144
|
+
}): Promise<VCAPIExchangeResponse>;
|
|
142
145
|
//# sourceMappingURL=exchangeClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exchangeClient.d.ts","sourceRoot":"","sources":["../src/exchangeClient.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,uBAAuB,EACvB,WAAW,EACX,KAAK,EACL,qBAAqB,EACtB,MAAM,YAAY,CAAA;AAQnB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACV,EAAE;IACD,SAAS,CAAC,EAAE,cAAc,CAAA;CAC3B,GAAG,MAAM,GAAG,SAAS,CAGrB;
|
|
1
|
+
{"version":3,"file":"exchangeClient.d.ts","sourceRoot":"","sources":["../src/exchangeClient.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,uBAAuB,EACvB,WAAW,EACX,KAAK,EACL,qBAAqB,EACtB,MAAM,YAAY,CAAA;AAQnB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACV,EAAE;IACD,SAAS,CAAC,EAAE,cAAc,CAAA;CAC3B,GAAG,MAAM,GAAG,SAAS,CAGrB;AA0CD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,EAClC,WAAW,EACX,KAAwB,EACzB,EAAE;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,GAAG,OAAO,CAAC,WAAW,CAAC,CAYvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,EAClC,WAAW,EACX,KAAwB,EACzB,EAAE;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAEjC;AAwBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,OAAO,EACP,WAAW,EACX,sBAAsB,EACtB,KAAwB,EACzB,EAAE;IACD,OAAO,EAAE,WAAW,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,sBAAsB,EAAE,uBAAuB,CAAA;IAC/C,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,yBAAyB,CAAC,EAC9C,OAAO,EACP,WAAW,EACX,sBAAsB,EACtB,KAAwB,EACzB,EAAE;IACD,OAAO,EAAE,WAAW,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,sBAAsB,EAAE,uBAAuB,CAAA;IAC/C,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAcnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,OAAO,EACP,WAAW,EACZ,EAAE;IACD,OAAO,EAAE,WAAW,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,MAAM,CAOT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,WAAW,EACX,sBAAsB,EACtB,KAAwB,EACzB,EAAE;IACD,OAAO,EAAE,WAAW,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,sBAAsB,EAAE,uBAAuB,CAAA;IAC/C,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAMjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,EACpC,WAAW,EACX,OAAO,EACP,KAAwB,EACzB,EAAE;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE;QACP,sBAAsB,CAAC,EAAE,uBAAuB,CAAA;QAChD,IAAI,CAAC,EAAE,KAAK,EAAE,CAAA;KACf,CAAA;IACD,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAEjC"}
|
package/dist/exchangeClient.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*
|
|
22
22
|
* @see https://w3c-ccg.github.io/vc-api/#exchange-examples
|
|
23
23
|
*/
|
|
24
|
-
import {
|
|
24
|
+
import { assertExchangeResponseOk } from './ephemeralExchange.js';
|
|
25
25
|
/**
|
|
26
26
|
* The `interact.service` type naming an endpoint that accepts a Verifiable
|
|
27
27
|
* Presentation over plain HTTP POST, with no mediator in between.
|
|
@@ -65,13 +65,7 @@ async function postToExchange({ url, body, fetch }) {
|
|
|
65
65
|
headers: { 'content-type': 'application/json', accept: 'application/json' },
|
|
66
66
|
body: JSON.stringify(body)
|
|
67
67
|
});
|
|
68
|
-
|
|
69
|
-
throw new EphemeralExchangeGoneError(`The exchange at ${url} is no longer available.`);
|
|
70
|
-
}
|
|
71
|
-
if (!response.ok) {
|
|
72
|
-
throw new Error(`The exchange at ${url} responded ${response.status} ` +
|
|
73
|
-
`${response.statusText}.`);
|
|
74
|
-
}
|
|
68
|
+
assertExchangeResponseOk({ response, label: 'exchange', url });
|
|
75
69
|
const text = await response.text();
|
|
76
70
|
if (!text) {
|
|
77
71
|
return {};
|
|
@@ -220,22 +214,19 @@ export async function submitPresentation({ request, exchangeUrl, verifiablePrese
|
|
|
220
214
|
* Sends the whole Wallet Response object -- a VP and/or delegated `zcap`s -- to
|
|
221
215
|
* an exchanger endpoint (DCW's response envelope, which threads the grants
|
|
222
216
|
* *beside* the VP rather than embedding them inside it). Returns the parsed JSON
|
|
223
|
-
* reply, or `
|
|
224
|
-
* envelope carries only the VP) because the two apps POST different shapes
|
|
217
|
+
* reply, or `{}` for an empty body. Kept alongside `submitPresentation` (whose
|
|
218
|
+
* envelope carries only the VP) because the two apps POST different shapes;
|
|
219
|
+
* both go through `postToExchange`, so a `404` is reported as
|
|
220
|
+
* {@link EphemeralExchangeGoneError} and any other non-2xx status throws
|
|
221
|
+
* rather than passing an error body off as the peer's reply.
|
|
225
222
|
*
|
|
226
223
|
* @param options {object}
|
|
227
224
|
* @param options.exchangeUrl {string}
|
|
228
225
|
* @param options.payload {{ verifiablePresentation?, zcap? }}
|
|
229
226
|
* @param [options.fetch] {FetchLike}
|
|
230
|
-
* @returns {Promise<
|
|
227
|
+
* @returns {Promise<VCAPIExchangeResponse>}
|
|
231
228
|
*/
|
|
232
229
|
export async function sendToExchanger({ exchangeUrl, payload, fetch = globalThis.fetch }) {
|
|
233
|
-
|
|
234
|
-
method: 'POST',
|
|
235
|
-
headers: { 'Content-Type': 'application/json' },
|
|
236
|
-
body: JSON.stringify(payload)
|
|
237
|
-
});
|
|
238
|
-
const text = await response.text();
|
|
239
|
-
return text ? JSON.parse(text) : null;
|
|
230
|
+
return postToExchange({ url: exchangeUrl, body: payload, fetch });
|
|
240
231
|
}
|
|
241
232
|
//# sourceMappingURL=exchangeClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exchangeClient.js","sourceRoot":"","sources":["../src/exchangeClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"exchangeClient.js","sourceRoot":"","sources":["../src/exchangeClient.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,8 +20,7 @@
|
|
|
20
20
|
* `@interop/wallet-core`'s `enrollment` subpath, beside the connect code it
|
|
21
21
|
* carries).
|
|
22
22
|
* - `appKey` is the App Connect app-key credential module: the wire constants,
|
|
23
|
-
* the matching
|
|
24
|
-
* refusal policy.
|
|
23
|
+
* the matching and minting paths, and the store-time refusal policy.
|
|
25
24
|
* - `presentationSuite` negotiates the response cryptosuite; `composeVp` builds
|
|
26
25
|
* the (optionally signed, optionally grant-embedding) response VP.
|
|
27
26
|
* - `exchangeClient` is the fetch-injectable VC-API exchange client;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,wBAAwB,CAAA;AACtC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -20,8 +20,7 @@
|
|
|
20
20
|
* `@interop/wallet-core`'s `enrollment` subpath, beside the connect code it
|
|
21
21
|
* carries).
|
|
22
22
|
* - `appKey` is the App Connect app-key credential module: the wire constants,
|
|
23
|
-
* the matching
|
|
24
|
-
* refusal policy.
|
|
23
|
+
* the matching and minting paths, and the store-time refusal policy.
|
|
25
24
|
* - `presentationSuite` negotiates the response cryptosuite; `composeVp` builds
|
|
26
25
|
* the (optionally signed, optionally grant-embedding) response VP.
|
|
27
26
|
* - `exchangeClient` is the fetch-injectable VC-API exchange client;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,wBAAwB,CAAA;AACtC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA"}
|
package/dist/interactionUrl.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export declare function parseInteractionUrl(url: string): string;
|
|
|
27
27
|
* Fetches the interaction protocols response from a VCALM interaction URL. Sends
|
|
28
28
|
* GET with `Accept: application/json` per the VCALM spec, and returns the
|
|
29
29
|
* protocols map. Logs a warning if the `iuv` param value is not `1`; throws if
|
|
30
|
-
* the response is not ok or the `protocols` key
|
|
30
|
+
* the response is not ok, is not JSON, or lacks the `protocols` key. A `404` is reported
|
|
31
31
|
* as {@link EphemeralExchangeGoneError} (dispatch on `err.name`): the
|
|
32
32
|
* interaction URL points at an exchange that expired or was never there.
|
|
33
33
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactionUrl.d.ts","sourceRoot":"","sources":["../src/interactionUrl.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAI3C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUrD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,yBAAyB,CAC7C,cAAc,EAAE,MAAM,EACtB,EAAE,KAAwB,EAAE,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAO,GACvD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"interactionUrl.d.ts","sourceRoot":"","sources":["../src/interactionUrl.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAI3C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUrD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,yBAAyB,CAC7C,cAAc,EAAE,MAAM,EACtB,EAAE,KAAwB,EAAE,GAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAO,GACvD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsCjC"}
|
package/dist/interactionUrl.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* transport injected ({@link FetchLike}, default `globalThis.fetch`).
|
|
13
13
|
*/
|
|
14
14
|
import { log } from './log.js';
|
|
15
|
-
import {
|
|
15
|
+
import { assertExchangeResponseOk } from './ephemeralExchange.js';
|
|
16
16
|
const INTERACTION_SCHEME_PREFIX = 'interaction:';
|
|
17
17
|
/**
|
|
18
18
|
* Detects whether a URL is a VCALM interaction URL.
|
|
@@ -64,7 +64,7 @@ export function parseInteractionUrl(url) {
|
|
|
64
64
|
* Fetches the interaction protocols response from a VCALM interaction URL. Sends
|
|
65
65
|
* GET with `Accept: application/json` per the VCALM spec, and returns the
|
|
66
66
|
* protocols map. Logs a warning if the `iuv` param value is not `1`; throws if
|
|
67
|
-
* the response is not ok or the `protocols` key
|
|
67
|
+
* the response is not ok, is not JSON, or lacks the `protocols` key. A `404` is reported
|
|
68
68
|
* as {@link EphemeralExchangeGoneError} (dispatch on `err.name`): the
|
|
69
69
|
* interaction URL points at an exchange that expired or was never there.
|
|
70
70
|
*
|
|
@@ -89,16 +89,24 @@ export async function fetchInteractionProtocols(interactionUrl, { fetch = global
|
|
|
89
89
|
const response = await fetch(interactionUrl, {
|
|
90
90
|
headers: { Accept: 'application/json' }
|
|
91
91
|
});
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
assertExchangeResponseOk({
|
|
93
|
+
response,
|
|
94
|
+
label: 'interaction URL',
|
|
95
|
+
url: interactionUrl
|
|
96
|
+
});
|
|
97
|
+
let body;
|
|
98
|
+
try {
|
|
99
|
+
body = await response.json();
|
|
94
100
|
}
|
|
95
|
-
|
|
96
|
-
throw new Error(
|
|
101
|
+
catch (err) {
|
|
102
|
+
throw new Error('Interaction URL response is not JSON.', { cause: err });
|
|
97
103
|
}
|
|
98
|
-
const
|
|
99
|
-
|
|
104
|
+
const protocols = body && typeof body === 'object'
|
|
105
|
+
? body.protocols
|
|
106
|
+
: undefined;
|
|
107
|
+
if (!protocols || typeof protocols !== 'object') {
|
|
100
108
|
throw new Error('Interaction URL response missing "protocols" map.');
|
|
101
109
|
}
|
|
102
|
-
return
|
|
110
|
+
return protocols;
|
|
103
111
|
}
|
|
104
112
|
//# sourceMappingURL=interactionUrl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactionUrl.js","sourceRoot":"","sources":["../src/interactionUrl.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;GASG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"interactionUrl.js","sourceRoot":"","sources":["../src/interactionUrl.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;GASG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAGjE,MAAM,yBAAyB,GAAG,cAAc,CAAA;AAEhD;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,GAAG,CAAC,UAAU,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACzD,0EAA0E;IAC1E,UAAU;IACV,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,cAAsB,EACtB,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,KAA4B,EAAE;IAExD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAA;QACtC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,wDAAwD,EAAE;gBACjE,GAAG;aACJ,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,4BAA4B,cAAc,EAAE,CAAC,CAAA;IAC/D,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE;QAC3C,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;KACxC,CAAC,CAAA;IAEF,wBAAwB,CAAC;QACvB,QAAQ;QACR,KAAK,EAAE,iBAAiB;QACxB,GAAG,EAAE,cAAc;KACpB,CAAC,CAAA;IAEF,IAAI,IAAa,CAAA;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,SAAS,GACb,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAC9B,CAAC,CAAE,IAAgC,CAAC,SAAS;QAC7C,CAAC,CAAC,SAAS,CAAA;IACf,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,SAAmC,CAAA;AAC5C,CAAC"}
|
package/dist/matching.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matching.d.ts","sourceRoot":"","sources":["../src/matching.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"matching.d.ts","sourceRoot":"","sources":["../src/matching.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,YAAY,CAAA;AAOnE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAKzE,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACtB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAET;AAgFD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,qBAAqB,EAAE,EACpC,KAAK,EAAE,eAAe,GACrB,qBAAqB,EAAE,CAgBzB;AAiCD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,OAAO,EACR,EAAE;IACD,WAAW,EAAE,qBAAqB,EAAE,CAAA;IACpC,OAAO,EAAE,eAAe,EAAE,CAAA;CAC3B,GAAG,qBAAqB,EAAE,CAQ1B;AAqBD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAEnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,IAAI,EACL,EAAE;IACD,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAIV"}
|
package/dist/matching.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { credentialQueriesOf } from './classify.js';
|
|
2
2
|
import { issuerId, typeArray } from '@interop/data-integrity-core/guards';
|
|
3
|
+
import { toArray } from './queryPredicates.js';
|
|
3
4
|
// The loose-field normalizers are owned by data-integrity-core; re-export them
|
|
4
5
|
// here so a matching consumer imports one module.
|
|
5
6
|
export { issuerId, typeArray } from '@interop/data-integrity-core/guards';
|
|
@@ -43,7 +44,8 @@ function matchesExampleScope(vprExample, scope) {
|
|
|
43
44
|
// Array query values require that the matching credential contains at
|
|
44
45
|
// least every value specified. This assumes each element is a literal.
|
|
45
46
|
// The credential side may hold the compacted single-value form.
|
|
46
|
-
|
|
47
|
+
// The field may hold the array or the compacted single value.
|
|
48
|
+
const scopeValues = toArray(credentialScope);
|
|
47
49
|
if (scopeValues.length < vprExampleValue.length) {
|
|
48
50
|
return false;
|
|
49
51
|
}
|
|
@@ -64,23 +66,6 @@ function matchesExampleScope(vprExample, scope) {
|
|
|
64
66
|
}
|
|
65
67
|
return matches.every(match => match);
|
|
66
68
|
}
|
|
67
|
-
/**
|
|
68
|
-
* Normalizes a credential field value to the array form, so an example's array
|
|
69
|
-
* value can be compared against a field holding either the array or the
|
|
70
|
-
* compacted single value. An absent field yields `[]`.
|
|
71
|
-
*
|
|
72
|
-
* @param value {unknown}
|
|
73
|
-
* @returns {unknown[]}
|
|
74
|
-
*/
|
|
75
|
-
function valueList(value) {
|
|
76
|
-
if (Array.isArray(value)) {
|
|
77
|
-
return value;
|
|
78
|
-
}
|
|
79
|
-
if (value === undefined) {
|
|
80
|
-
return [];
|
|
81
|
-
}
|
|
82
|
-
return [value];
|
|
83
|
-
}
|
|
84
69
|
/**
|
|
85
70
|
* The value of an own property of a credential scope, or `undefined` when the
|
|
86
71
|
* scope carries no such property. Example keys are arbitrary strings, so only
|
package/dist/matching.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matching.js","sourceRoot":"","sources":["../src/matching.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"matching.js","sourceRoot":"","sources":["../src/matching.ts"],"names":[],"mappings":"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"}
|
package/dist/onboarding.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { IVPRDetails, IVPRQuery, IWalletOnboardingRequest } from './types.j
|
|
|
4
4
|
* value must parse as an absolute URL and must be `http:` or `https:` (it is
|
|
5
5
|
* dereferenced as a WAS server base URL) and must not carry a fragment; any
|
|
6
6
|
* violation throws. Compose and classification share this one rule, so the
|
|
7
|
-
*
|
|
7
|
+
* form the inviter publishes is the form the enrollee resolves, and
|
|
8
8
|
* URLs differing only in a default port, percent-encoding case, or dot
|
|
9
9
|
* segments do not name distinct servers.
|
|
10
10
|
*
|
package/dist/onboarding.js
CHANGED
|
@@ -48,7 +48,7 @@ function isWebvhDid(did) {
|
|
|
48
48
|
* value must parse as an absolute URL and must be `http:` or `https:` (it is
|
|
49
49
|
* dereferenced as a WAS server base URL) and must not carry a fragment; any
|
|
50
50
|
* violation throws. Compose and classification share this one rule, so the
|
|
51
|
-
*
|
|
51
|
+
* form the inviter publishes is the form the enrollee resolves, and
|
|
52
52
|
* URLs differing only in a default port, percent-encoding case, or dot
|
|
53
53
|
* segments do not name distinct servers.
|
|
54
54
|
*
|
package/dist/onboarding.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../src/onboarding.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAQ1E;;;;;;;;GAQG;AACH,SAAS,UAAU,CAAC,GAAuB;IACzC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AAChE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,wBAAwB,CAAC,EAAE,IAAI,EAAoB;IACjE,MAAM,GAAG,GAAG,iBAAiB,CAAC;QAC5B,KAAK,EAAE,IAAI;QACX,kBAAkB,EAAE,gEAAgE,IAAI,KAAK;QAC7F,eAAe,EACb,gEAAgE;YAChE,IAAI,IAAI,KAAK;KAChB,CAAC,CAAA;IACF,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CACb,+DAA+D,IAAI,KAAK,CACzE,CAAA;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAA;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,0BAA0B,CAAC,EACzC,GAAG,EACH,OAAO,EACP,IAAI,EACJ,UAAU,EAMX;IACC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,oEAAoE;YAClE,SAAS,MAAM,CAAC,GAAG,CAAC,4CAA4C;YAChE,iBAAiB,CACpB,CAAA;IACH,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,oEAAoE;YAClE,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAC3B,CAAA;IACH,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IACD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CACb,qEAAqE;YACnE,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAC9B,CAAA;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,wBAAwB,CAAC,EAAE,IAAI,EAAE,CAAC;QACxC,GAAG;QACH,OAAO;QACP,UAAU;KACX,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,8BAA8B,CAAC,EAC7C,OAAO,EACP,UAAU,EAIX;IACC,MAAM,KAAK,GAA2B;QACpC,IAAI,EAAE,uBAAuB;QAC7B,GAAG,0BAA0B,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC;KAC1D,CAAA;IACD,OAAO,EAAE,KAAK,EAAE,CAAC,KAA6B,CAAC,EAAE,CAAA;AACnD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,yBAAyB,CAAC,EACxC,OAAO,EAGR;IACC,MAAM,eAAe,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../src/onboarding.ts"],"names":[],"mappings":"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"}
|