@pagopa/io-react-native-wallet 0.19.0 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/commonjs/client/generated/wallet-provider.js +25 -3
- package/lib/commonjs/client/generated/wallet-provider.js.map +1 -1
- package/lib/commonjs/wallet-instance/README.md +20 -2
- package/lib/commonjs/wallet-instance/index.js +9 -0
- package/lib/commonjs/wallet-instance/index.js.map +1 -1
- package/lib/module/client/generated/wallet-provider.js +20 -0
- package/lib/module/client/generated/wallet-provider.js.map +1 -1
- package/lib/module/wallet-instance/README.md +20 -2
- package/lib/module/wallet-instance/index.js +8 -0
- package/lib/module/wallet-instance/index.js.map +1 -1
- package/lib/typescript/client/generated/wallet-provider.d.ts +57 -0
- package/lib/typescript/client/generated/wallet-provider.d.ts.map +1 -1
- package/lib/typescript/wallet-instance/index.d.ts +4 -0
- package/lib/typescript/wallet-instance/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client/generated/wallet-provider.ts +28 -0
- package/src/wallet-instance/README.md +20 -2
- package/src/wallet-instance/index.ts +11 -0
@@ -3,9 +3,9 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.WalletAttestationView = exports.ProblemDetail = exports.NonceDetailView = exports.EndpointByMethod = exports.CreateWalletInstanceBody = exports.CreateWalletAttestationBody = exports.ApiClient = void 0;
|
6
|
+
exports.WalletAttestationView = exports.SetCurrentWalletInstanceStatusBody = exports.ProblemDetail = exports.NonceDetailView = exports.EndpointByMethod = exports.CreateWalletInstanceBody = exports.CreateWalletAttestationBody = exports.ApiClient = void 0;
|
7
7
|
exports.createApiClient = createApiClient;
|
8
|
-
exports.post_CreateWalletInstance = exports.post_CreateWalletAttestation = exports.get_GetNonce = void 0;
|
8
|
+
exports.put_SetCurrentWalletInstanceStatus = exports.post_CreateWalletInstance = exports.post_CreateWalletAttestation = exports.get_GetNonce = void 0;
|
9
9
|
var _zod = _interopRequireDefault(require("zod"));
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
11
11
|
const NonceDetailView = _zod.default.object({
|
@@ -35,6 +35,10 @@ const ProblemDetail = _zod.default.object({
|
|
35
35
|
instance: _zod.default.string().optional()
|
36
36
|
});
|
37
37
|
exports.ProblemDetail = ProblemDetail;
|
38
|
+
const SetCurrentWalletInstanceStatusBody = _zod.default.object({
|
39
|
+
status: _zod.default.literal("REVOKED")
|
40
|
+
});
|
41
|
+
exports.SetCurrentWalletInstanceStatusBody = SetCurrentWalletInstanceStatusBody;
|
38
42
|
const get_GetNonce = {
|
39
43
|
method: _zod.default.literal("GET"),
|
40
44
|
path: _zod.default.literal("/nonce"),
|
@@ -59,9 +63,18 @@ const post_CreateWalletAttestation = {
|
|
59
63
|
}),
|
60
64
|
response: WalletAttestationView
|
61
65
|
};
|
66
|
+
exports.post_CreateWalletAttestation = post_CreateWalletAttestation;
|
67
|
+
const put_SetCurrentWalletInstanceStatus = {
|
68
|
+
method: _zod.default.literal("PUT"),
|
69
|
+
path: _zod.default.literal("/wallet-instances/current/status"),
|
70
|
+
parameters: _zod.default.object({
|
71
|
+
body: SetCurrentWalletInstanceStatusBody
|
72
|
+
}),
|
73
|
+
response: _zod.default.unknown()
|
74
|
+
};
|
62
75
|
|
63
76
|
// <EndpointByMethod>
|
64
|
-
exports.
|
77
|
+
exports.put_SetCurrentWalletInstanceStatus = put_SetCurrentWalletInstanceStatus;
|
65
78
|
const EndpointByMethod = {
|
66
79
|
get: {
|
67
80
|
"/nonce": get_GetNonce
|
@@ -69,6 +82,9 @@ const EndpointByMethod = {
|
|
69
82
|
post: {
|
70
83
|
"/wallet-instances": post_CreateWalletInstance,
|
71
84
|
"/token": post_CreateWalletAttestation
|
85
|
+
},
|
86
|
+
put: {
|
87
|
+
"/wallet-instances/current/status": put_SetCurrentWalletInstanceStatus
|
72
88
|
}
|
73
89
|
};
|
74
90
|
|
@@ -104,6 +120,12 @@ class ApiClient {
|
|
104
120
|
return this.fetcher("post", this.baseUrl + path, arguments.length <= 1 ? undefined : arguments[1]);
|
105
121
|
}
|
106
122
|
// </ApiClient.post>
|
123
|
+
|
124
|
+
// <ApiClient.put>
|
125
|
+
put(path) {
|
126
|
+
return this.fetcher("put", this.baseUrl + path, arguments.length <= 1 ? undefined : arguments[1]);
|
127
|
+
}
|
128
|
+
// </ApiClient.put>
|
107
129
|
}
|
108
130
|
exports.ApiClient = ApiClient;
|
109
131
|
function createApiClient(fetcher, baseUrl) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_zod","_interopRequireDefault","require","obj","__esModule","default","NonceDetailView","z","object","nonce","string","exports","WalletAttestationView","wallet_attestation","CreateWalletInstanceBody","challenge","key_attestation","hardware_key_tag","CreateWalletAttestationBody","grant_type","literal","assertion","ProblemDetail","type","optional","title","status","number","detail","instance","get_GetNonce","method","path","parameters","never","response","post_CreateWalletInstance","body","unknown","post_CreateWalletAttestation","EndpointByMethod","get","post","ApiClient","baseUrl","constructor","fetcher","setBaseUrl","arguments","length","undefined","createApiClient"],"sourceRoot":"../../../../src","sources":["client/generated/wallet-provider.ts"],"mappings":";;;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAoB,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAGb,MAAMG,eAAe,GAAGC,YAAC,CAACC,MAAM,CAAC;EACtCC,KAAK,EAAEF,YAAC,CAACG,MAAM,CAAC;AAClB,CAAC,CAAC;AAACC,OAAA,CAAAL,eAAA,GAAAA,eAAA;AAGI,MAAMM,qBAAqB,GAAGL,YAAC,CAACC,MAAM,CAAC;EAC5CK,kBAAkB,EAAEN,YAAC,CAACG,MAAM,CAAC;AAC/B,CAAC,CAAC;AAACC,OAAA,CAAAC,qBAAA,GAAAA,qBAAA;AAGI,MAAME,wBAAwB,GAAGP,YAAC,CAACC,MAAM,CAAC;EAC/CO,SAAS,EAAER,YAAC,CAACG,MAAM,CAAC,CAAC;EACrBM,eAAe,EAAET,YAAC,CAACG,MAAM,CAAC,CAAC;EAC3BO,gBAAgB,EAAEV,YAAC,CAACG,MAAM,CAAC;AAC7B,CAAC,CAAC;AAACC,OAAA,CAAAG,wBAAA,GAAAA,wBAAA;AAGI,MAAMI,2BAA2B,GAAGX,YAAC,CAACC,MAAM,CAAC;EAClDW,UAAU,EAAEZ,YAAC,CAACa,OAAO,CAAC,6CAA6C,CAAC;EACpEC,SAAS,EAAEd,YAAC,CAACG,MAAM,CAAC;AACtB,CAAC,CAAC;AAACC,OAAA,CAAAO,2BAAA,GAAAA,2BAAA;AAGI,MAAMI,aAAa,GAAGf,YAAC,CAACC,MAAM,CAAC;EACpCe,IAAI,EAAEhB,YAAC,CAACG,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC3BC,KAAK,EAAElB,YAAC,CAACG,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC5BE,MAAM,EAAEnB,YAAC,CAACoB,MAAM,CAAC,CAAC,CAACH,QAAQ,CAAC,CAAC;EAC7BI,MAAM,EAAErB,YAAC,CAACG,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC7BK,QAAQ,EAAEtB,YAAC,CAACG,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC;AAChC,CAAC,CAAC;AAACb,OAAA,CAAAW,aAAA,GAAAA,aAAA;AAGI,MAAMQ,YAAY,GAAG;EAC1BC,MAAM,
|
1
|
+
{"version":3,"names":["_zod","_interopRequireDefault","require","obj","__esModule","default","NonceDetailView","z","object","nonce","string","exports","WalletAttestationView","wallet_attestation","CreateWalletInstanceBody","challenge","key_attestation","hardware_key_tag","CreateWalletAttestationBody","grant_type","literal","assertion","ProblemDetail","type","optional","title","status","number","detail","instance","SetCurrentWalletInstanceStatusBody","get_GetNonce","method","path","parameters","never","response","post_CreateWalletInstance","body","unknown","post_CreateWalletAttestation","put_SetCurrentWalletInstanceStatus","EndpointByMethod","get","post","put","ApiClient","baseUrl","constructor","fetcher","setBaseUrl","arguments","length","undefined","createApiClient"],"sourceRoot":"../../../../src","sources":["client/generated/wallet-provider.ts"],"mappings":"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"}
|
@@ -1,9 +1,16 @@
|
|
1
1
|
# Wallet Instance
|
2
2
|
|
3
|
-
This flow
|
3
|
+
This flow handles the wallet instance lifecycle: creation and revocation. The wallet provider must implement its endpoints based on the OpenAPI specification provided in the [wallet-instance.yaml](../../openapi/wallet-provider.yaml) file.
|
4
4
|
A service that is responsible for ensuring the integrity of the device where the app is running is required and it's supposed to use [Google Play Integrity API](https://developer.android.com/google/play/integrity/overview) and [Key Attestation](https://developer.android.com/privacy-and-security/security-key-attestation) on Android, [DCAppAttestService](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) on iOS.
|
5
5
|
The suggested way to implement this service is to use [io-react-native-integrity](https://github.com/pagopa/io-react-native-integrity) by providing an [IntegrityContext](../utils/integrity.ts) object.
|
6
|
-
|
6
|
+
|
7
|
+
The following methods are available:
|
8
|
+
- `createWalletInstance` creates a new wallet instance;
|
9
|
+
- `revokeCurrentWalletInstance` revokes the currently valid wallet instance of the user who made the request.
|
10
|
+
|
11
|
+
Examples are provided as follows:
|
12
|
+
|
13
|
+
### Wallet instance creation
|
7
14
|
|
8
15
|
```ts
|
9
16
|
// Get env
|
@@ -28,6 +35,17 @@ return integrityKeyTag;
|
|
28
35
|
|
29
36
|
The returned `integrityKeyTag` is supposed to be stored and used to verify the integrity of the device in the future when using an `IntegrityContext` object. It must be regenerated if another wallet instance is created.
|
30
37
|
|
38
|
+
### Wallet instance revocation
|
39
|
+
|
40
|
+
```ts
|
41
|
+
const { WALLET_PROVIDER_BASE_URL } = env;
|
42
|
+
|
43
|
+
await WalletInstance.revokeCurrentWalletInstance({
|
44
|
+
walletProviderBaseUrl: WALLET_PROVIDER_BASE_URL,
|
45
|
+
appFetch,
|
46
|
+
});
|
47
|
+
```
|
48
|
+
|
31
49
|
## Mapped results
|
32
50
|
|
33
51
|
### 409 Conflict (WalletInstanceCreationIntegrityError)
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.createWalletInstance = createWalletInstance;
|
7
|
+
exports.revokeCurrentWalletInstance = revokeCurrentWalletInstance;
|
7
8
|
var _client = require("../client");
|
8
9
|
var _errors = require("../utils/errors");
|
9
10
|
async function createWalletInstance(context) {
|
@@ -36,4 +37,12 @@ const handleCreateWalletInstanceError = e => {
|
|
36
37
|
}
|
37
38
|
throw new _errors.WalletInstanceCreationError(`Unable to obtain wallet instance attestation [response status code: ${e.statusCode}]`, e.claim, e.reason);
|
38
39
|
};
|
40
|
+
async function revokeCurrentWalletInstance(context) {
|
41
|
+
const api = (0, _client.getWalletProviderClient)(context);
|
42
|
+
await api.put("/wallet-instances/current/status", {
|
43
|
+
body: {
|
44
|
+
status: "REVOKED"
|
45
|
+
}
|
46
|
+
});
|
47
|
+
}
|
39
48
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_client","require","_errors","createWalletInstance","context","integrityContext","api","getWalletProviderClient","challenge","get","then","response","nonce","keyAttestation","getAttestation","hardwareKeyTag","getHardwareKeyTag","post","body","key_attestation","hardware_key_tag","catch","handleCreateWalletInstanceError","e","WalletProviderResponseError","statusCode","WalletInstanceCreationIntegrityError","claim","reason","WalletInstanceCreationError"],"sourceRoot":"../../../src","sources":["wallet-instance/index.ts"],"mappings":"
|
1
|
+
{"version":3,"names":["_client","require","_errors","createWalletInstance","context","integrityContext","api","getWalletProviderClient","challenge","get","then","response","nonce","keyAttestation","getAttestation","hardwareKeyTag","getHardwareKeyTag","post","body","key_attestation","hardware_key_tag","catch","handleCreateWalletInstanceError","e","WalletProviderResponseError","statusCode","WalletInstanceCreationIntegrityError","claim","reason","WalletInstanceCreationError","revokeCurrentWalletInstance","put","status"],"sourceRoot":"../../../src","sources":["wallet-instance/index.ts"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAMO,eAAeE,oBAAoBA,CAACC,OAI1C,EAAE;EACD,MAAM;IAAEC;EAAiB,CAAC,GAAGD,OAAO;EAEpC,MAAME,GAAG,GAAG,IAAAC,+BAAuB,EAACH,OAAO,CAAC;;EAE5C;EACA,MAAMI,SAAS,GAAG,MAAMF,GAAG,CAACG,GAAG,CAAC,QAAQ,CAAC,CAACC,IAAI,CAAEC,QAAQ,IAAKA,QAAQ,CAACC,KAAK,CAAC;EAE5E,MAAMC,cAAc,GAAG,MAAMR,gBAAgB,CAACS,cAAc,CAACN,SAAS,CAAC;EACvE,MAAMO,cAAc,GAAGV,gBAAgB,CAACW,iBAAiB,CAAC,CAAC;;EAE3D;EACA,MAAMV,GAAG,CACNW,IAAI,CAAC,mBAAmB,EAAE;IACzBC,IAAI,EAAE;MACJV,SAAS;MACTW,eAAe,EAAEN,cAAc;MAC/BO,gBAAgB,EAAEL;IACpB;EACF,CAAC,CAAC,CACDM,KAAK,CAACC,+BAA+B,CAAC;EAEzC,OAAOP,cAAc;AACvB;AAEA,MAAMO,+BAA+B,GAAIC,CAAU,IAAK;EACtD,IAAI,EAAEA,CAAC,YAAYC,mCAA2B,CAAC,EAAE;IAC/C,MAAMD,CAAC;EACT;EAEA,IAAIA,CAAC,CAACE,UAAU,KAAK,GAAG,EAAE;IACxB,MAAM,IAAIC,4CAAoC,CAC5C,oFAAoF,EACpFH,CAAC,CAACI,KAAK,EACPJ,CAAC,CAACK,MACJ,CAAC;EACH;EAEA,MAAM,IAAIC,mCAA2B,CAClC,uEAAsEN,CAAC,CAACE,UAAW,GAAE,EACtFF,CAAC,CAACI,KAAK,EACPJ,CAAC,CAACK,MACJ,CAAC;AACH,CAAC;AAEM,eAAeE,2BAA2BA,CAAC1B,OAGjD,EAAiB;EAChB,MAAME,GAAG,GAAG,IAAAC,+BAAuB,EAACH,OAAO,CAAC;EAE5C,MAAME,GAAG,CAACyB,GAAG,CAAC,kCAAkC,EAAE;IAChDb,IAAI,EAAE;MAAEc,MAAM,EAAE;IAAU;EAC5B,CAAC,CAAC;AACJ"}
|
@@ -21,6 +21,9 @@ export const ProblemDetail = z.object({
|
|
21
21
|
detail: z.string().optional(),
|
22
22
|
instance: z.string().optional()
|
23
23
|
});
|
24
|
+
export const SetCurrentWalletInstanceStatusBody = z.object({
|
25
|
+
status: z.literal("REVOKED")
|
26
|
+
});
|
24
27
|
export const get_GetNonce = {
|
25
28
|
method: z.literal("GET"),
|
26
29
|
path: z.literal("/nonce"),
|
@@ -43,6 +46,14 @@ export const post_CreateWalletAttestation = {
|
|
43
46
|
}),
|
44
47
|
response: WalletAttestationView
|
45
48
|
};
|
49
|
+
export const put_SetCurrentWalletInstanceStatus = {
|
50
|
+
method: z.literal("PUT"),
|
51
|
+
path: z.literal("/wallet-instances/current/status"),
|
52
|
+
parameters: z.object({
|
53
|
+
body: SetCurrentWalletInstanceStatusBody
|
54
|
+
}),
|
55
|
+
response: z.unknown()
|
56
|
+
};
|
46
57
|
|
47
58
|
// <EndpointByMethod>
|
48
59
|
export const EndpointByMethod = {
|
@@ -52,6 +63,9 @@ export const EndpointByMethod = {
|
|
52
63
|
post: {
|
53
64
|
"/wallet-instances": post_CreateWalletInstance,
|
54
65
|
"/token": post_CreateWalletAttestation
|
66
|
+
},
|
67
|
+
put: {
|
68
|
+
"/wallet-instances/current/status": put_SetCurrentWalletInstanceStatus
|
55
69
|
}
|
56
70
|
};
|
57
71
|
|
@@ -82,6 +96,12 @@ export class ApiClient {
|
|
82
96
|
return this.fetcher("post", this.baseUrl + path, arguments.length <= 1 ? undefined : arguments[1]);
|
83
97
|
}
|
84
98
|
// </ApiClient.post>
|
99
|
+
|
100
|
+
// <ApiClient.put>
|
101
|
+
put(path) {
|
102
|
+
return this.fetcher("put", this.baseUrl + path, arguments.length <= 1 ? undefined : arguments[1]);
|
103
|
+
}
|
104
|
+
// </ApiClient.put>
|
85
105
|
}
|
86
106
|
|
87
107
|
export function createApiClient(fetcher, baseUrl) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["z","NonceDetailView","object","nonce","string","WalletAttestationView","wallet_attestation","CreateWalletInstanceBody","challenge","key_attestation","hardware_key_tag","CreateWalletAttestationBody","grant_type","literal","assertion","ProblemDetail","type","optional","title","status","number","detail","instance","get_GetNonce","method","path","parameters","never","response","post_CreateWalletInstance","body","unknown","post_CreateWalletAttestation","EndpointByMethod","get","post","ApiClient","baseUrl","constructor","fetcher","setBaseUrl","arguments","length","undefined","createApiClient"],"sourceRoot":"../../../../src","sources":["client/generated/wallet-provider.ts"],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AAGnB,OAAO,MAAMC,eAAe,GAAGD,CAAC,CAACE,MAAM,CAAC;EACtCC,KAAK,EAAEH,CAAC,CAACI,MAAM,CAAC;AAClB,CAAC,CAAC;AAGF,OAAO,MAAMC,qBAAqB,GAAGL,CAAC,CAACE,MAAM,CAAC;EAC5CI,kBAAkB,EAAEN,CAAC,CAACI,MAAM,CAAC;AAC/B,CAAC,CAAC;AAGF,OAAO,MAAMG,wBAAwB,GAAGP,CAAC,CAACE,MAAM,CAAC;EAC/CM,SAAS,EAAER,CAAC,CAACI,MAAM,CAAC,CAAC;EACrBK,eAAe,EAAET,CAAC,CAACI,MAAM,CAAC,CAAC;EAC3BM,gBAAgB,EAAEV,CAAC,CAACI,MAAM,CAAC;AAC7B,CAAC,CAAC;AAGF,OAAO,MAAMO,2BAA2B,GAAGX,CAAC,CAACE,MAAM,CAAC;EAClDU,UAAU,EAAEZ,CAAC,CAACa,OAAO,CAAC,6CAA6C,CAAC;EACpEC,SAAS,EAAEd,CAAC,CAACI,MAAM,CAAC;AACtB,CAAC,CAAC;AAGF,OAAO,MAAMW,aAAa,GAAGf,CAAC,CAACE,MAAM,CAAC;EACpCc,IAAI,EAAEhB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACa,QAAQ,CAAC,CAAC;EAC3BC,KAAK,EAAElB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACa,QAAQ,CAAC,CAAC;EAC5BE,MAAM,EAAEnB,CAAC,CAACoB,MAAM,CAAC,CAAC,CAACH,QAAQ,CAAC,CAAC;EAC7BI,MAAM,EAAErB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACa,QAAQ,CAAC,CAAC;EAC7BK,QAAQ,EAAEtB,CAAC,CAACI,MAAM,CAAC,CAAC,CAACa,QAAQ,CAAC;AAChC,CAAC,CAAC;AAGF,OAAO,MAAMM,YAAY,GAAG;EAC1BC,MAAM,
|
1
|
+
{"version":3,"names":["z","NonceDetailView","object","nonce","string","WalletAttestationView","wallet_attestation","CreateWalletInstanceBody","challenge","key_attestation","hardware_key_tag","CreateWalletAttestationBody","grant_type","literal","assertion","ProblemDetail","type","optional","title","status","number","detail","instance","SetCurrentWalletInstanceStatusBody","get_GetNonce","method","path","parameters","never","response","post_CreateWalletInstance","body","unknown","post_CreateWalletAttestation","put_SetCurrentWalletInstanceStatus","EndpointByMethod","get","post","put","ApiClient","baseUrl","constructor","fetcher","setBaseUrl","arguments","length","undefined","createApiClient"],"sourceRoot":"../../../../src","sources":["client/generated/wallet-provider.ts"],"mappings":"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"}
|
@@ -1,9 +1,16 @@
|
|
1
1
|
# Wallet Instance
|
2
2
|
|
3
|
-
This flow
|
3
|
+
This flow handles the wallet instance lifecycle: creation and revocation. The wallet provider must implement its endpoints based on the OpenAPI specification provided in the [wallet-instance.yaml](../../openapi/wallet-provider.yaml) file.
|
4
4
|
A service that is responsible for ensuring the integrity of the device where the app is running is required and it's supposed to use [Google Play Integrity API](https://developer.android.com/google/play/integrity/overview) and [Key Attestation](https://developer.android.com/privacy-and-security/security-key-attestation) on Android, [DCAppAttestService](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) on iOS.
|
5
5
|
The suggested way to implement this service is to use [io-react-native-integrity](https://github.com/pagopa/io-react-native-integrity) by providing an [IntegrityContext](../utils/integrity.ts) object.
|
6
|
-
|
6
|
+
|
7
|
+
The following methods are available:
|
8
|
+
- `createWalletInstance` creates a new wallet instance;
|
9
|
+
- `revokeCurrentWalletInstance` revokes the currently valid wallet instance of the user who made the request.
|
10
|
+
|
11
|
+
Examples are provided as follows:
|
12
|
+
|
13
|
+
### Wallet instance creation
|
7
14
|
|
8
15
|
```ts
|
9
16
|
// Get env
|
@@ -28,6 +35,17 @@ return integrityKeyTag;
|
|
28
35
|
|
29
36
|
The returned `integrityKeyTag` is supposed to be stored and used to verify the integrity of the device in the future when using an `IntegrityContext` object. It must be regenerated if another wallet instance is created.
|
30
37
|
|
38
|
+
### Wallet instance revocation
|
39
|
+
|
40
|
+
```ts
|
41
|
+
const { WALLET_PROVIDER_BASE_URL } = env;
|
42
|
+
|
43
|
+
await WalletInstance.revokeCurrentWalletInstance({
|
44
|
+
walletProviderBaseUrl: WALLET_PROVIDER_BASE_URL,
|
45
|
+
appFetch,
|
46
|
+
});
|
47
|
+
```
|
48
|
+
|
31
49
|
## Mapped results
|
32
50
|
|
33
51
|
### 409 Conflict (WalletInstanceCreationIntegrityError)
|
@@ -30,4 +30,12 @@ const handleCreateWalletInstanceError = e => {
|
|
30
30
|
}
|
31
31
|
throw new WalletInstanceCreationError(`Unable to obtain wallet instance attestation [response status code: ${e.statusCode}]`, e.claim, e.reason);
|
32
32
|
};
|
33
|
+
export async function revokeCurrentWalletInstance(context) {
|
34
|
+
const api = getWalletProviderClient(context);
|
35
|
+
await api.put("/wallet-instances/current/status", {
|
36
|
+
body: {
|
37
|
+
status: "REVOKED"
|
38
|
+
}
|
39
|
+
});
|
40
|
+
}
|
33
41
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["getWalletProviderClient","WalletInstanceCreationError","WalletInstanceCreationIntegrityError","WalletProviderResponseError","createWalletInstance","context","integrityContext","api","challenge","get","then","response","nonce","keyAttestation","getAttestation","hardwareKeyTag","getHardwareKeyTag","post","body","key_attestation","hardware_key_tag","catch","handleCreateWalletInstanceError","e","statusCode","claim","reason"],"sourceRoot":"../../../src","sources":["wallet-instance/index.ts"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,WAAW;AAEnD,SACEC,2BAA2B,EAC3BC,oCAAoC,EACpCC,2BAA2B,QACtB,iBAAiB;AAExB,OAAO,eAAeC,oBAAoBA,CAACC,OAI1C,EAAE;EACD,MAAM;IAAEC;EAAiB,CAAC,GAAGD,OAAO;EAEpC,MAAME,GAAG,GAAGP,uBAAuB,CAACK,OAAO,CAAC;;EAE5C;EACA,MAAMG,SAAS,GAAG,MAAMD,GAAG,CAACE,GAAG,CAAC,QAAQ,CAAC,CAACC,IAAI,CAAEC,QAAQ,IAAKA,QAAQ,CAACC,KAAK,CAAC;EAE5E,MAAMC,cAAc,GAAG,MAAMP,gBAAgB,CAACQ,cAAc,CAACN,SAAS,CAAC;EACvE,MAAMO,cAAc,GAAGT,gBAAgB,CAACU,iBAAiB,CAAC,CAAC;;EAE3D;EACA,MAAMT,GAAG,CACNU,IAAI,CAAC,mBAAmB,EAAE;IACzBC,IAAI,EAAE;MACJV,SAAS;MACTW,eAAe,EAAEN,cAAc;MAC/BO,gBAAgB,EAAEL;IACpB;EACF,CAAC,CAAC,CACDM,KAAK,CAACC,+BAA+B,CAAC;EAEzC,OAAOP,cAAc;AACvB;AAEA,MAAMO,+BAA+B,GAAIC,CAAU,IAAK;EACtD,IAAI,EAAEA,CAAC,YAAYpB,2BAA2B,CAAC,EAAE;IAC/C,MAAMoB,CAAC;EACT;EAEA,IAAIA,CAAC,CAACC,UAAU,KAAK,GAAG,EAAE;IACxB,MAAM,IAAItB,oCAAoC,CAC5C,oFAAoF,EACpFqB,CAAC,CAACE,KAAK,EACPF,CAAC,CAACG,MACJ,CAAC;EACH;EAEA,MAAM,IAAIzB,2BAA2B,CAClC,uEAAsEsB,CAAC,CAACC,UAAW,GAAE,EACtFD,CAAC,CAACE,KAAK,EACPF,CAAC,CAACG,MACJ,CAAC;AACH,CAAC"}
|
1
|
+
{"version":3,"names":["getWalletProviderClient","WalletInstanceCreationError","WalletInstanceCreationIntegrityError","WalletProviderResponseError","createWalletInstance","context","integrityContext","api","challenge","get","then","response","nonce","keyAttestation","getAttestation","hardwareKeyTag","getHardwareKeyTag","post","body","key_attestation","hardware_key_tag","catch","handleCreateWalletInstanceError","e","statusCode","claim","reason","revokeCurrentWalletInstance","put","status"],"sourceRoot":"../../../src","sources":["wallet-instance/index.ts"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,WAAW;AAEnD,SACEC,2BAA2B,EAC3BC,oCAAoC,EACpCC,2BAA2B,QACtB,iBAAiB;AAExB,OAAO,eAAeC,oBAAoBA,CAACC,OAI1C,EAAE;EACD,MAAM;IAAEC;EAAiB,CAAC,GAAGD,OAAO;EAEpC,MAAME,GAAG,GAAGP,uBAAuB,CAACK,OAAO,CAAC;;EAE5C;EACA,MAAMG,SAAS,GAAG,MAAMD,GAAG,CAACE,GAAG,CAAC,QAAQ,CAAC,CAACC,IAAI,CAAEC,QAAQ,IAAKA,QAAQ,CAACC,KAAK,CAAC;EAE5E,MAAMC,cAAc,GAAG,MAAMP,gBAAgB,CAACQ,cAAc,CAACN,SAAS,CAAC;EACvE,MAAMO,cAAc,GAAGT,gBAAgB,CAACU,iBAAiB,CAAC,CAAC;;EAE3D;EACA,MAAMT,GAAG,CACNU,IAAI,CAAC,mBAAmB,EAAE;IACzBC,IAAI,EAAE;MACJV,SAAS;MACTW,eAAe,EAAEN,cAAc;MAC/BO,gBAAgB,EAAEL;IACpB;EACF,CAAC,CAAC,CACDM,KAAK,CAACC,+BAA+B,CAAC;EAEzC,OAAOP,cAAc;AACvB;AAEA,MAAMO,+BAA+B,GAAIC,CAAU,IAAK;EACtD,IAAI,EAAEA,CAAC,YAAYpB,2BAA2B,CAAC,EAAE;IAC/C,MAAMoB,CAAC;EACT;EAEA,IAAIA,CAAC,CAACC,UAAU,KAAK,GAAG,EAAE;IACxB,MAAM,IAAItB,oCAAoC,CAC5C,oFAAoF,EACpFqB,CAAC,CAACE,KAAK,EACPF,CAAC,CAACG,MACJ,CAAC;EACH;EAEA,MAAM,IAAIzB,2BAA2B,CAClC,uEAAsEsB,CAAC,CAACC,UAAW,GAAE,EACtFD,CAAC,CAACE,KAAK,EACPF,CAAC,CAACG,MACJ,CAAC;AACH,CAAC;AAED,OAAO,eAAeC,2BAA2BA,CAACtB,OAGjD,EAAiB;EAChB,MAAME,GAAG,GAAGP,uBAAuB,CAACK,OAAO,CAAC;EAE5C,MAAME,GAAG,CAACqB,GAAG,CAAC,kCAAkC,EAAE;IAChDV,IAAI,EAAE;MAAEW,MAAM,EAAE;IAAU;EAC5B,CAAC,CAAC;AACJ"}
|
@@ -60,6 +60,14 @@ export declare const ProblemDetail: z.ZodObject<{
|
|
60
60
|
detail?: string | undefined;
|
61
61
|
instance?: string | undefined;
|
62
62
|
}>;
|
63
|
+
export type SetCurrentWalletInstanceStatusBody = z.infer<typeof SetCurrentWalletInstanceStatusBody>;
|
64
|
+
export declare const SetCurrentWalletInstanceStatusBody: z.ZodObject<{
|
65
|
+
status: z.ZodLiteral<"REVOKED">;
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
67
|
+
status: "REVOKED";
|
68
|
+
}, {
|
69
|
+
status: "REVOKED";
|
70
|
+
}>;
|
63
71
|
export type get_GetNonce = typeof get_GetNonce;
|
64
72
|
export declare const get_GetNonce: {
|
65
73
|
method: z.ZodLiteral<"GET">;
|
@@ -140,6 +148,29 @@ export declare const post_CreateWalletAttestation: {
|
|
140
148
|
wallet_attestation: string;
|
141
149
|
}>;
|
142
150
|
};
|
151
|
+
export type put_SetCurrentWalletInstanceStatus = typeof put_SetCurrentWalletInstanceStatus;
|
152
|
+
export declare const put_SetCurrentWalletInstanceStatus: {
|
153
|
+
method: z.ZodLiteral<"PUT">;
|
154
|
+
path: z.ZodLiteral<"/wallet-instances/current/status">;
|
155
|
+
parameters: z.ZodObject<{
|
156
|
+
body: z.ZodObject<{
|
157
|
+
status: z.ZodLiteral<"REVOKED">;
|
158
|
+
}, "strip", z.ZodTypeAny, {
|
159
|
+
status: "REVOKED";
|
160
|
+
}, {
|
161
|
+
status: "REVOKED";
|
162
|
+
}>;
|
163
|
+
}, "strip", z.ZodTypeAny, {
|
164
|
+
body: {
|
165
|
+
status: "REVOKED";
|
166
|
+
};
|
167
|
+
}, {
|
168
|
+
body: {
|
169
|
+
status: "REVOKED";
|
170
|
+
};
|
171
|
+
}>;
|
172
|
+
response: z.ZodUnknown;
|
173
|
+
};
|
143
174
|
export declare const EndpointByMethod: {
|
144
175
|
get: {
|
145
176
|
"/nonce": {
|
@@ -222,10 +253,35 @@ export declare const EndpointByMethod: {
|
|
222
253
|
}>;
|
223
254
|
};
|
224
255
|
};
|
256
|
+
put: {
|
257
|
+
"/wallet-instances/current/status": {
|
258
|
+
method: z.ZodLiteral<"PUT">;
|
259
|
+
path: z.ZodLiteral<"/wallet-instances/current/status">;
|
260
|
+
parameters: z.ZodObject<{
|
261
|
+
body: z.ZodObject<{
|
262
|
+
status: z.ZodLiteral<"REVOKED">;
|
263
|
+
}, "strip", z.ZodTypeAny, {
|
264
|
+
status: "REVOKED";
|
265
|
+
}, {
|
266
|
+
status: "REVOKED";
|
267
|
+
}>;
|
268
|
+
}, "strip", z.ZodTypeAny, {
|
269
|
+
body: {
|
270
|
+
status: "REVOKED";
|
271
|
+
};
|
272
|
+
}, {
|
273
|
+
body: {
|
274
|
+
status: "REVOKED";
|
275
|
+
};
|
276
|
+
}>;
|
277
|
+
response: z.ZodUnknown;
|
278
|
+
};
|
279
|
+
};
|
225
280
|
};
|
226
281
|
export type EndpointByMethod = typeof EndpointByMethod;
|
227
282
|
export type GetEndpoints = EndpointByMethod["get"];
|
228
283
|
export type PostEndpoints = EndpointByMethod["post"];
|
284
|
+
export type PutEndpoints = EndpointByMethod["put"];
|
229
285
|
export type AllEndpoints = EndpointByMethod[keyof EndpointByMethod];
|
230
286
|
export type EndpointParameters = {
|
231
287
|
body?: unknown;
|
@@ -263,6 +319,7 @@ export declare class ApiClient {
|
|
263
319
|
setBaseUrl(baseUrl: string): this;
|
264
320
|
get<Path extends keyof GetEndpoints, TEndpoint extends GetEndpoints[Path]>(path: Path, ...params: MaybeOptionalArg<z.infer<TEndpoint["parameters"]>>): Promise<z.infer<TEndpoint["response"]>>;
|
265
321
|
post<Path extends keyof PostEndpoints, TEndpoint extends PostEndpoints[Path]>(path: Path, ...params: MaybeOptionalArg<z.infer<TEndpoint["parameters"]>>): Promise<z.infer<TEndpoint["response"]>>;
|
322
|
+
put<Path extends keyof PutEndpoints, TEndpoint extends PutEndpoints[Path]>(path: Path, ...params: MaybeOptionalArg<z.infer<TEndpoint["parameters"]>>): Promise<z.infer<TEndpoint["response"]>>;
|
266
323
|
}
|
267
324
|
export declare function createApiClient(fetcher: Fetcher, baseUrl?: string): ApiClient;
|
268
325
|
export {};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"wallet-provider.d.ts","sourceRoot":"","sources":["../../../../src/client/generated/wallet-provider.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAC9D,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAC1E,eAAO,MAAM,qBAAqB;;;;;;EAEhC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAChF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;EAInC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AACtF,eAAO,MAAM,2BAA2B;;;;;;;;;EAGtC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;EAMxB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC;AAC/C,eAAO,MAAM,YAAY;;;;;;;;;;;CAKxB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,OAAO,yBAAyB,CAAC;AACzE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOrC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,OAAO,4BAA4B,CAAC;AAC/E,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOxC,CAAC;AAGF,eAAO,MAAM,gBAAgB
|
1
|
+
{"version":3,"file":"wallet-provider.d.ts","sourceRoot":"","sources":["../../../../src/client/generated/wallet-provider.ts"],"names":[],"mappings":"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"}
|
@@ -4,4 +4,8 @@ export declare function createWalletInstance(context: {
|
|
4
4
|
walletProviderBaseUrl: string;
|
5
5
|
appFetch?: GlobalFetch["fetch"];
|
6
6
|
}): Promise<string>;
|
7
|
+
export declare function revokeCurrentWalletInstance(context: {
|
8
|
+
walletProviderBaseUrl: string;
|
9
|
+
appFetch?: GlobalFetch["fetch"];
|
10
|
+
}): Promise<void>;
|
7
11
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/wallet-instance/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAO3C,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACjC,mBAuBA"}
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/wallet-instance/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAO3C,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACjC,mBAuBA;AAsBD,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACjC,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhB"}
|
package/package.json
CHANGED
@@ -32,6 +32,11 @@ export const ProblemDetail = z.object({
|
|
32
32
|
instance: z.string().optional(),
|
33
33
|
});
|
34
34
|
|
35
|
+
export type SetCurrentWalletInstanceStatusBody = z.infer<typeof SetCurrentWalletInstanceStatusBody>;
|
36
|
+
export const SetCurrentWalletInstanceStatusBody = z.object({
|
37
|
+
status: z.literal("REVOKED"),
|
38
|
+
});
|
39
|
+
|
35
40
|
export type get_GetNonce = typeof get_GetNonce;
|
36
41
|
export const get_GetNonce = {
|
37
42
|
method: z.literal("GET"),
|
@@ -60,6 +65,16 @@ export const post_CreateWalletAttestation = {
|
|
60
65
|
response: WalletAttestationView,
|
61
66
|
};
|
62
67
|
|
68
|
+
export type put_SetCurrentWalletInstanceStatus = typeof put_SetCurrentWalletInstanceStatus;
|
69
|
+
export const put_SetCurrentWalletInstanceStatus = {
|
70
|
+
method: z.literal("PUT"),
|
71
|
+
path: z.literal("/wallet-instances/current/status"),
|
72
|
+
parameters: z.object({
|
73
|
+
body: SetCurrentWalletInstanceStatusBody,
|
74
|
+
}),
|
75
|
+
response: z.unknown(),
|
76
|
+
};
|
77
|
+
|
63
78
|
// <EndpointByMethod>
|
64
79
|
export const EndpointByMethod = {
|
65
80
|
get: {
|
@@ -69,6 +84,9 @@ export const EndpointByMethod = {
|
|
69
84
|
"/wallet-instances": post_CreateWalletInstance,
|
70
85
|
"/token": post_CreateWalletAttestation,
|
71
86
|
},
|
87
|
+
put: {
|
88
|
+
"/wallet-instances/current/status": put_SetCurrentWalletInstanceStatus,
|
89
|
+
},
|
72
90
|
};
|
73
91
|
export type EndpointByMethod = typeof EndpointByMethod;
|
74
92
|
// </EndpointByMethod>
|
@@ -76,6 +94,7 @@ export type EndpointByMethod = typeof EndpointByMethod;
|
|
76
94
|
// <EndpointByMethod.Shorthands>
|
77
95
|
export type GetEndpoints = EndpointByMethod["get"];
|
78
96
|
export type PostEndpoints = EndpointByMethod["post"];
|
97
|
+
export type PutEndpoints = EndpointByMethod["put"];
|
79
98
|
export type AllEndpoints = EndpointByMethod[keyof EndpointByMethod];
|
80
99
|
// </EndpointByMethod.Shorthands>
|
81
100
|
|
@@ -150,6 +169,15 @@ export class ApiClient {
|
|
150
169
|
return this.fetcher("post", this.baseUrl + path, params[0]) as Promise<z.infer<TEndpoint["response"]>>;
|
151
170
|
}
|
152
171
|
// </ApiClient.post>
|
172
|
+
|
173
|
+
// <ApiClient.put>
|
174
|
+
put<Path extends keyof PutEndpoints, TEndpoint extends PutEndpoints[Path]>(
|
175
|
+
path: Path,
|
176
|
+
...params: MaybeOptionalArg<z.infer<TEndpoint["parameters"]>>
|
177
|
+
): Promise<z.infer<TEndpoint["response"]>> {
|
178
|
+
return this.fetcher("put", this.baseUrl + path, params[0]) as Promise<z.infer<TEndpoint["response"]>>;
|
179
|
+
}
|
180
|
+
// </ApiClient.put>
|
153
181
|
}
|
154
182
|
|
155
183
|
export function createApiClient(fetcher: Fetcher, baseUrl?: string) {
|
@@ -1,9 +1,16 @@
|
|
1
1
|
# Wallet Instance
|
2
2
|
|
3
|
-
This flow
|
3
|
+
This flow handles the wallet instance lifecycle: creation and revocation. The wallet provider must implement its endpoints based on the OpenAPI specification provided in the [wallet-instance.yaml](../../openapi/wallet-provider.yaml) file.
|
4
4
|
A service that is responsible for ensuring the integrity of the device where the app is running is required and it's supposed to use [Google Play Integrity API](https://developer.android.com/google/play/integrity/overview) and [Key Attestation](https://developer.android.com/privacy-and-security/security-key-attestation) on Android, [DCAppAttestService](https://developer.apple.com/documentation/devicecheck/establishing-your-app-s-integrity) on iOS.
|
5
5
|
The suggested way to implement this service is to use [io-react-native-integrity](https://github.com/pagopa/io-react-native-integrity) by providing an [IntegrityContext](../utils/integrity.ts) object.
|
6
|
-
|
6
|
+
|
7
|
+
The following methods are available:
|
8
|
+
- `createWalletInstance` creates a new wallet instance;
|
9
|
+
- `revokeCurrentWalletInstance` revokes the currently valid wallet instance of the user who made the request.
|
10
|
+
|
11
|
+
Examples are provided as follows:
|
12
|
+
|
13
|
+
### Wallet instance creation
|
7
14
|
|
8
15
|
```ts
|
9
16
|
// Get env
|
@@ -28,6 +35,17 @@ return integrityKeyTag;
|
|
28
35
|
|
29
36
|
The returned `integrityKeyTag` is supposed to be stored and used to verify the integrity of the device in the future when using an `IntegrityContext` object. It must be regenerated if another wallet instance is created.
|
30
37
|
|
38
|
+
### Wallet instance revocation
|
39
|
+
|
40
|
+
```ts
|
41
|
+
const { WALLET_PROVIDER_BASE_URL } = env;
|
42
|
+
|
43
|
+
await WalletInstance.revokeCurrentWalletInstance({
|
44
|
+
walletProviderBaseUrl: WALLET_PROVIDER_BASE_URL,
|
45
|
+
appFetch,
|
46
|
+
});
|
47
|
+
```
|
48
|
+
|
31
49
|
## Mapped results
|
32
50
|
|
33
51
|
### 409 Conflict (WalletInstanceCreationIntegrityError)
|
@@ -54,3 +54,14 @@ const handleCreateWalletInstanceError = (e: unknown) => {
|
|
54
54
|
e.reason
|
55
55
|
);
|
56
56
|
};
|
57
|
+
|
58
|
+
export async function revokeCurrentWalletInstance(context: {
|
59
|
+
walletProviderBaseUrl: string;
|
60
|
+
appFetch?: GlobalFetch["fetch"];
|
61
|
+
}): Promise<void> {
|
62
|
+
const api = getWalletProviderClient(context);
|
63
|
+
|
64
|
+
await api.put("/wallet-instances/current/status", {
|
65
|
+
body: { status: "REVOKED" },
|
66
|
+
});
|
67
|
+
}
|