@cubist-labs/cubesigner-sdk 0.2.24 → 0.3.1
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 +30 -28
- package/dist/cjs/package.json +41 -0
- package/dist/cjs/spec/env/beta.json +9 -0
- package/dist/cjs/spec/env/gamma.json +9 -0
- package/dist/cjs/spec/env/prod.json +9 -0
- package/dist/cjs/src/api.d.ts +634 -0
- package/dist/cjs/src/api.js +1309 -0
- package/dist/cjs/src/client.d.ts +575 -0
- package/dist/cjs/src/client.js +378 -0
- package/dist/cjs/src/env.d.ts +15 -0
- package/dist/cjs/src/env.js +35 -0
- package/dist/cjs/src/error.d.ts +29 -0
- package/dist/cjs/src/error.js +36 -0
- package/dist/cjs/src/events.d.ts +84 -0
- package/dist/cjs/src/events.js +195 -0
- package/dist/cjs/src/index.d.ts +203 -0
- package/dist/cjs/src/index.js +298 -0
- package/dist/cjs/src/key.d.ts +152 -0
- package/dist/cjs/src/key.js +242 -0
- package/dist/{src/fido.d.ts → cjs/src/mfa.d.ts} +33 -15
- package/dist/cjs/src/mfa.js +169 -0
- package/dist/cjs/src/org.d.ts +99 -0
- package/dist/cjs/src/org.js +95 -0
- package/dist/cjs/src/paginator.d.ts +76 -0
- package/dist/cjs/src/paginator.js +99 -0
- package/dist/cjs/src/response.d.ts +101 -0
- package/dist/cjs/src/response.js +164 -0
- package/dist/cjs/src/role.d.ts +283 -0
- package/dist/cjs/src/role.js +253 -0
- package/dist/cjs/src/schema.d.ts +6209 -0
- package/dist/cjs/src/schema.js +7 -0
- package/dist/cjs/src/schema_types.d.ts +113 -0
- package/dist/cjs/src/schema_types.js +3 -0
- package/dist/cjs/src/session/session_storage.d.ts +27 -0
- package/dist/cjs/src/session/session_storage.js +47 -0
- package/dist/cjs/src/session/signer_session_manager.d.ts +125 -0
- package/dist/cjs/src/session/signer_session_manager.js +239 -0
- package/dist/cjs/src/signer_session.d.ts +41 -0
- package/dist/cjs/src/signer_session.js +77 -0
- package/dist/cjs/src/user_export.d.ts +52 -0
- package/dist/cjs/src/user_export.js +129 -0
- package/dist/cjs/src/util.d.ts +56 -0
- package/dist/cjs/src/util.js +86 -0
- package/dist/esm/package.json +41 -0
- package/dist/esm/spec/env/beta.json +9 -0
- package/dist/esm/spec/env/gamma.json +9 -0
- package/dist/esm/spec/env/prod.json +9 -0
- package/dist/esm/src/api.d.ts +634 -0
- package/dist/esm/src/api.js +1299 -0
- package/dist/esm/src/client.d.ts +575 -0
- package/dist/esm/src/client.js +374 -0
- package/dist/esm/src/env.d.ts +15 -0
- package/dist/esm/src/env.js +9 -0
- package/dist/esm/src/error.d.ts +29 -0
- package/dist/esm/src/error.js +31 -0
- package/dist/esm/src/events.d.ts +84 -0
- package/dist/esm/src/events.js +189 -0
- package/dist/esm/src/index.d.ts +203 -0
- package/dist/esm/src/index.js +276 -0
- package/dist/esm/src/key.d.ts +152 -0
- package/dist/esm/src/key.js +236 -0
- package/dist/esm/src/mfa.d.ts +94 -0
- package/dist/esm/src/mfa.js +163 -0
- package/dist/esm/src/org.d.ts +99 -0
- package/dist/esm/src/org.js +91 -0
- package/dist/esm/src/paginator.d.ts +76 -0
- package/dist/esm/src/paginator.js +94 -0
- package/dist/esm/src/response.d.ts +101 -0
- package/dist/esm/src/response.js +159 -0
- package/dist/esm/src/role.d.ts +283 -0
- package/dist/esm/src/role.js +248 -0
- package/dist/esm/src/schema.d.ts +6209 -0
- package/dist/esm/src/schema.js +6 -0
- package/dist/esm/src/schema_types.d.ts +113 -0
- package/dist/esm/src/schema_types.js +2 -0
- package/dist/esm/src/session/session_storage.d.ts +27 -0
- package/dist/esm/src/session/session_storage.js +43 -0
- package/dist/esm/src/session/signer_session_manager.d.ts +125 -0
- package/dist/esm/src/session/signer_session_manager.js +235 -0
- package/dist/esm/src/signer_session.d.ts +41 -0
- package/dist/esm/src/signer_session.js +72 -0
- package/dist/esm/src/user_export.d.ts +52 -0
- package/dist/esm/src/user_export.js +99 -0
- package/dist/esm/src/util.d.ts +56 -0
- package/dist/esm/src/util.js +76 -0
- package/dist/package.json +13 -45
- package/dist/src/api.d.ts +29 -18
- package/dist/src/api.js +70 -17
- package/dist/src/client.d.ts +35 -14
- package/dist/src/client.js +12 -8
- package/dist/src/error.d.ts +29 -0
- package/dist/src/error.js +36 -0
- package/dist/src/events.d.ts +1 -1
- package/dist/src/events.js +1 -1
- package/dist/src/index.d.ts +8 -11
- package/dist/src/index.js +11 -25
- package/dist/src/key.d.ts +18 -7
- package/dist/src/key.js +52 -19
- package/dist/src/role.d.ts +46 -3
- package/dist/src/role.js +60 -8
- package/dist/src/schema.d.ts +206 -72
- package/dist/src/schema.js +1 -1
- package/dist/src/schema_types.d.ts +3 -0
- package/dist/src/schema_types.js +1 -1
- package/dist/src/session/signer_session_manager.d.ts +49 -13
- package/dist/src/session/signer_session_manager.js +104 -26
- package/dist/src/util.d.ts +14 -0
- package/dist/src/util.js +24 -27
- package/package.json +19 -46
- package/src/api.ts +81 -23
- package/src/client.ts +12 -8
- package/src/error.ts +42 -0
- package/src/events.ts +3 -1
- package/src/index.ts +12 -24
- package/src/key.ts +36 -18
- package/src/role.ts +78 -7
- package/src/schema.ts +269 -110
- package/src/schema_types.ts +3 -0
- package/src/session/session_storage.ts +0 -32
- package/src/session/signer_session_manager.ts +137 -28
- package/src/util.ts +19 -10
- package/tsconfig.json +1 -21
- package/LICENSE-APACHE +0 -177
- package/LICENSE-MIT +0 -25
- package/NOTICE +0 -13
- package/dist/examples/ethers.d.ts +0 -1
- package/dist/examples/ethers.js +0 -142
- package/dist/src/ethers/index.d.ts +0 -95
- package/dist/src/ethers/index.js +0 -208
- package/dist/src/fido.js +0 -148
- package/dist/src/session/cognito_manager.d.ts +0 -71
- package/dist/src/session/cognito_manager.js +0 -129
- package/dist/src/session/generic.d.ts +0 -47
- package/dist/src/session/generic.js +0 -3
- package/dist/src/session/management_session_manager.d.ts +0 -59
- package/dist/src/session/management_session_manager.js +0 -111
- package/dist/src/session/oidc_session_manager.d.ts +0 -78
- package/dist/src/session/oidc_session_manager.js +0 -142
- package/dist/src/session/session_manager.d.ts +0 -99
- package/dist/src/session/session_manager.js +0 -136
- package/dist/src/sign.d.ts +0 -114
- package/dist/src/sign.js +0 -248
- package/dist/test/sessions.d.ts +0 -35
- package/dist/test/sessions.js +0 -56
- package/src/ethers/index.ts +0 -249
- package/src/session/cognito_manager.ts +0 -161
- package/src/session/session_manager.ts +0 -165
|
@@ -44,6 +44,9 @@ export type CreateSignerSessionRequest = schemas["CreateTokenRequest"];
|
|
|
44
44
|
export type RefreshSignerSessionRequest = schemas["AuthData"];
|
|
45
45
|
export type EvmSignRequest = schemas["Eth1SignRequest"];
|
|
46
46
|
export type EvmSignResponse = schemas["Eth1SignResponse"];
|
|
47
|
+
export type Eip191SignRequest = schemas["Eip191SignRequest"];
|
|
48
|
+
export type Eip712SignRequest = schemas["Eip712SignRequest"];
|
|
49
|
+
export type Eip191Or712SignResponse = schemas["Eip191Or712SignResponse"];
|
|
47
50
|
export type Eth2SignRequest = schemas["Eth2SignRequest"];
|
|
48
51
|
export type Eth2SignResponse = schemas["Eth2SignResponse"];
|
|
49
52
|
export type Eth2StakeRequest = schemas["StakeRequest"];
|
package/dist/src/schema_types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hX3R5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYV90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWZhUG9saWN5IH0gZnJvbSBcIi4vcm9sZVwiO1xuaW1wb3J0IHsgY29tcG9uZW50cyB9IGZyb20gXCIuL3NjaGVtYVwiO1xuaW1wb3J0IHsgSnNvbk1hcCB9IGZyb20gXCIuL3V0aWxcIjtcblxudHlwZSBzY2hlbWFzID0gY29tcG9uZW50c1tcInNjaGVtYXNcIl07XG5cbmV4cG9ydCB0eXBlIFVzZXJJbmZvID0gc2NoZW1hc1tcIlVzZXJJbmZvXCJdO1xuZXhwb3J0IHR5cGUgQ29uZmlndXJlZE1mYSA9IHNjaGVtYXNbXCJDb25maWd1cmVkTWZhXCJdO1xuZXhwb3J0IHR5cGUgUmF0Y2hldENvbmZpZyA9IHNjaGVtYXNbXCJSYXRjaGV0Q29uZmlnXCJdO1xuZXhwb3J0IHR5cGUgSWRlbnRpdHlQcm9vZiA9IHNjaGVtYXNbXCJJZGVudGl0eVByb29mXCJdO1xuZXhwb3J0IHR5cGUgVG90cEluZm8gPSBzY2hlbWFzW1wiVG90cEluZm9cIl07XG5cbmV4cG9ydCB0eXBlIE9pZGNBdXRoUmVzcG9uc2UgPSBzY2hlbWFzW1wiTmV3U2Vzc2lvblJlc3BvbnNlXCJdO1xuZXhwb3J0IHR5cGUgQXBpQWRkRmlkb0NoYWxsZW5nZSA9IHNjaGVtYXNbXCJGaWRvQ3JlYXRlQ2hhbGxlbmdlUmVzcG9uc2VcIl07XG5leHBvcnQgdHlwZSBBcGlNZmFGaWRvQ2hhbGxlbmdlID0gc2NoZW1hc1tcIkZpZG9Bc3NlcnRDaGFsbGVuZ2VcIl07XG5cbmV4cG9ydCB0eXBlIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgPSBzY2hlbWFzW1wiUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc1wiXTtcbmV4cG9ydCB0eXBlIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyA9IHNjaGVtYXNbXCJQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNcIl07XG5leHBvcnQgdHlwZSBQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVycyA9IHNjaGVtYXNbXCJQdWJsaWNLZXlDcmVkZW50aWFsUGFyYW1ldGVyc1wiXTtcbmV4cG9ydCB0eXBlIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yID0gc2NoZW1hc1tcIlB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yXCJdO1xuZXhwb3J0IHR5cGUgQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhID0gc2NoZW1hc1tcIkF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYVwiXTtcbmV4cG9ydCB0eXBlIFB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5ID0gc2NoZW1hc1tcIlB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5XCJdO1xuZXhwb3J0IHR5cGUgUHVibGljS2V5Q3JlZGVudGlhbCA9IHNjaGVtYXNbXCJQdWJsaWNLZXlDcmVkZW50aWFsXCJdO1xuXG5leHBvcnQgdHlwZSBPcmdJbmZvID0gc2NoZW1hc1tcIk9yZ0luZm9cIl07XG5leHBvcnQgdHlwZSBVc2VySWRJbmZvID0gc2NoZW1hc1tcIlVzZXJJZEluZm9cIl07XG5leHBvcnQgdHlwZSBVcGRhdGVPcmdSZXF1ZXN0ID0gc2NoZW1hc1tcIlVwZGF0ZU9yZ1JlcXVlc3RcIl07XG5leHBvcnQgdHlwZSBVcGRhdGVPcmdSZXNwb25zZSA9IHNjaGVtYXNbXCJVcGRhdGVPcmdSZXNwb25zZVwiXTtcblxuZXhwb3J0IHR5cGUgT2lkY0lkZW50aXR5ID0gc2NoZW1hc1tcIk9JRENJZGVudGl0eVwiXTtcbmV4cG9ydCB0eXBlIE1lbWJlclJvbGUgPSBzY2hlbWFzW1wiTWVtYmVyUm9sZVwiXTtcblxuZXhwb3J0IHR5cGUgU2NoZW1hS2V5VHlwZSA9IHNjaGVtYXNbXCJLZXlUeXBlXCJdO1xuXG5leHBvcnQgdHlwZSBMaXN0S2V5c1Jlc3BvbnNlID0gc2NoZW1hc1tcIlBhZ2luYXRlZExpc3RLZXlzUmVzcG9uc2VcIl07XG5leHBvcnQgdHlwZSBVcGRhdGVLZXlSZXF1ZXN0ID0gc2NoZW1hc1tcIlVwZGF0ZUtleVJlcXVlc3RcIl07XG5leHBvcnQgdHlwZSBLZXlJbmZvQXBpID0gc2NoZW1hc1tcIktleUluZm9cIl07XG5leHBvcnQgdHlwZSBLZXlJblJvbGVJbmZvID0gc2NoZW1hc1tcIktleUluUm9sZUluZm9cIl07XG5leHBvcnQgdHlwZSBVc2VySW5Sb2xlSW5mbyA9IHNjaGVtYXNbXCJVc2VySW5Sb2xlSW5mb1wiXTtcbmV4cG9ydCB0eXBlIEtleVR5cGVBcGkgPSBzY2hlbWFzW1wiS2V5VHlwZVwiXTtcblxuZXhwb3J0IHR5cGUgTGlzdFJvbGVzUmVzcG9uc2UgPSBzY2hlbWFzW1wiUGFnaW5hdGVkTGlzdFJvbGVzUmVzcG9uc2VcIl07XG5leHBvcnQgdHlwZSBMaXN0Um9sZUtleXNSZXNwb25zZSA9IHNjaGVtYXNbXCJQYWdpbmF0ZWRMaXN0Um9sZUtleXNSZXNwb25zZVwiXTtcbmV4cG9ydCB0eXBlIExpc3RSb2xlVXNlcnNSZXNwb25zZSA9IHNjaGVtYXNbXCJQYWdpbmF0ZWRMaXN0Um9sZVVzZXJzUmVzcG9uc2VcIl07XG5leHBvcnQgdHlwZSBVcGRhdGVSb2xlUmVxdWVzdCA9IHNjaGVtYXNbXCJVcGRhdGVSb2xlUmVxdWVzdFwiXTtcbmV4cG9ydCB0eXBlIEtleVdpdGhQb2xpY2llc0luZm8gPSBzY2hlbWFzW1wiS2V5SW5Sb2xlSW5mb1wiXTtcbmV4cG9ydCB0eXBlIFJvbGVJbmZvID0gc2NoZW1hc1tcIlJvbGVJbmZvXCJdO1xuXG5leHBvcnQgdHlwZSBTZXNzaW9uSW5mbyA9IHNjaGVtYXNbXCJTZXNzaW9uSW5mb1wiXTtcbmV4cG9ydCB0eXBlIENsaWVudFNlc3Npb25JbmZvID0gc2NoZW1hc1tcIkNsaWVudFNlc3Npb25JbmZvXCJdO1xuZXhwb3J0IHR5cGUgTmV3U2Vzc2lvblJlc3BvbnNlID0gc2NoZW1hc1tcIk5ld1Nlc3Npb25SZXNwb25zZVwiXTtcbmV4cG9ydCB0eXBlIFNlc3Npb25zUmVzcG9uc2UgPSBzY2hlbWFzW1wiUGFnaW5hdGVkU2Vzc2lvbnNSZXNwb25zZVwiXTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlU2lnbmVyU2Vzc2lvblJlcXVlc3QgPSBzY2hlbWFzW1wiQ3JlYXRlVG9rZW5SZXF1ZXN0XCJdO1xuZXhwb3J0IHR5cGUgUmVmcmVzaFNpZ25lclNlc3Npb25SZXF1ZXN0ID0gc2NoZW1hc1tcIkF1dGhEYXRhXCJdO1xuXG5leHBvcnQgdHlwZSBFdm1TaWduUmVxdWVzdCA9IHNjaGVtYXNbXCJFdGgxU2lnblJlcXVlc3RcIl07XG5leHBvcnQgdHlwZSBFdm1TaWduUmVzcG9uc2UgPSBzY2hlbWFzW1wiRXRoMVNpZ25SZXNwb25zZVwiXTtcbmV4cG9ydCB0eXBlIEVpcDE5MVNpZ25SZXF1ZXN0ID0gc2NoZW1hc1tcIkVpcDE5MVNpZ25SZXF1ZXN0XCJdO1xuZXhwb3J0IHR5cGUgRWlwNzEyU2lnblJlcXVlc3QgPSBzY2hlbWFzW1wiRWlwNzEyU2lnblJlcXVlc3RcIl07XG5leHBvcnQgdHlwZSBFaXAxOTFPcjcxMlNpZ25SZXNwb25zZSA9IHNjaGVtYXNbXCJFaXAxOTFPcjcxMlNpZ25SZXNwb25zZVwiXTtcbmV4cG9ydCB0eXBlIEV0aDJTaWduUmVxdWVzdCA9IHNjaGVtYXNbXCJFdGgyU2lnblJlcXVlc3RcIl07XG5leHBvcnQgdHlwZSBFdGgyU2lnblJlc3BvbnNlID0gc2NoZW1hc1tcIkV0aDJTaWduUmVzcG9uc2VcIl07XG5leHBvcnQgdHlwZSBFdGgyU3Rha2VSZXF1ZXN0ID0gc2NoZW1hc1tcIlN0YWtlUmVxdWVzdFwiXTtcbmV4cG9ydCB0eXBlIEV0aDJTdGFrZVJlc3BvbnNlID0gc2NoZW1hc1tcIlN0YWtlUmVzcG9uc2VcIl07XG5leHBvcnQgdHlwZSBFdGgyVW5zdGFrZVJlcXVlc3QgPSBzY2hlbWFzW1wiVW5zdGFrZVJlcXVlc3RcIl07XG5leHBvcnQgdHlwZSBFdGgyVW5zdGFrZVJlc3BvbnNlID0gc2NoZW1hc1tcIlVuc3Rha2VSZXNwb25zZVwiXTtcbmV4cG9ydCB0eXBlIEJsb2JTaWduUmVxdWVzdCA9IHNjaGVtYXNbXCJCbG9iU2lnblJlcXVlc3RcIl07XG5leHBvcnQgdHlwZSBCbG9iU2lnblJlc3BvbnNlID0gc2NoZW1hc1tcIkJsb2JTaWduUmVzcG9uc2VcIl07XG5leHBvcnQgdHlwZSBCdGNTaWduUmVxdWVzdCA9IHNjaGVtYXNbXCJCdGNTaWduUmVxdWVzdFwiXTtcbmV4cG9ydCB0eXBlIEJ0Y1NpZ25SZXNwb25zZSA9IHNjaGVtYXNbXCJCdGNTaWduUmVzcG9uc2VcIl07XG5leHBvcnQgdHlwZSBTb2xhbmFTaWduUmVxdWVzdCA9IHNjaGVtYXNbXCJTb2xhbmFTaWduUmVxdWVzdFwiXTtcbmV4cG9ydCB0eXBlIFNvbGFuYVNpZ25SZXNwb25zZSA9IHNjaGVtYXNbXCJTb2xhbmFTaWduUmVzcG9uc2VcIl07XG5leHBvcnQgdHlwZSBBdmFTaWduUmVxdWVzdCA9IHNjaGVtYXNbXCJBdmFTaWduUmVxdWVzdFwiXTtcbmV4cG9ydCB0eXBlIEF2YVNpZ25SZXNwb25zZSA9IHNjaGVtYXNbXCJBdmFTaWduUmVzcG9uc2VcIl07XG5cbmV4cG9ydCB0eXBlIEFjY2VwdGVkUmVzcG9uc2UgPSBzY2hlbWFzW1wiQWNjZXB0ZWRSZXNwb25zZVwiXTtcbmV4cG9ydCB0eXBlIEVycm9yUmVzcG9uc2UgPSBzY2hlbWFzW1wiRXJyb3JSZXNwb25zZVwiXTtcbmV4cG9ydCB0eXBlIEJ0Y1NpZ25hdHVyZUtpbmQgPSBzY2hlbWFzW1wiQnRjU2lnbmF0dXJlS2luZFwiXTtcblxuZXhwb3J0IHR5cGUgTWZhVHlwZSA9IHNjaGVtYXNbXCJNZmFUeXBlXCJdO1xuZXhwb3J0IHR5cGUgTWZhUmVxdWVzdEluZm8gPSBzY2hlbWFzW1wiTWZhUmVxdWVzdEluZm9cIl07XG5cbmV4cG9ydCB0eXBlIFVzZXJFeHBvcnRJbml0UmVxdWVzdCA9IHNjaGVtYXNbXCJVc2VyRXhwb3J0SW5pdFJlcXVlc3RcIl07XG5leHBvcnQgdHlwZSBVc2VyRXhwb3J0SW5pdFJlc3BvbnNlID0gc2NoZW1hc1tcIlVzZXJFeHBvcnRJbml0UmVzcG9uc2VcIl07XG5leHBvcnQgdHlwZSBVc2VyRXhwb3J0Q29tcGxldGVSZXF1ZXN0ID0gc2NoZW1hc1tcIlVzZXJFeHBvcnRDb21wbGV0ZVJlcXVlc3RcIl07XG5leHBvcnQgdHlwZSBVc2VyRXhwb3J0Q29tcGxldGVSZXNwb25zZSA9IHNjaGVtYXNbXCJVc2VyRXhwb3J0Q29tcGxldGVSZXNwb25zZVwiXTtcbmV4cG9ydCB0eXBlIFVzZXJFeHBvcnRMaXN0UmVzcG9uc2UgPSBzY2hlbWFzW1wiUGFnaW5hdGVkVXNlckV4cG9ydExpc3RSZXNwb25zZVwiXTtcbmV4cG9ydCB0eXBlIFVzZXJFeHBvcnRLZXlNYXRlcmlhbCA9IHNjaGVtYXNbXCJKc29uS2V5UGFja2FnZVwiXTtcblxuZXhwb3J0IHR5cGUgRW1wdHkgPSBzY2hlbWFzW1wiRW1wdHlJbXBsXCJdO1xuXG4vKiogT3B0aW9ucyBmb3IgYSBuZXcgT0lEQyB1c2VyICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU9pZGNVc2VyT3B0aW9ucyB7XG4gIC8qKiBUaGUgcm9sZSBvZiBhbiBPSURDIHVzZXIsIGRlZmF1bHQgaXMgXCJBbGllblwiICovXG4gIG1lbWJlclJvbGU/OiBNZW1iZXJSb2xlO1xuICAvKiogT3B0aW9uYWwgTUZBIHBvbGljeSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgdXNlciBhY2NvdW50ICovXG4gIG1mYVBvbGljeT86IE1mYVBvbGljeTtcbn1cblxuLyoqIEF2YSBQLSBvciBYLWNoYWluIHRyYW5zYWN0aW9uICovXG5leHBvcnQgdHlwZSBBdmFUeCA9IHsgUDogQXZhUENoYWluVHggfSB8IHsgWDogQXZhWENoYWluVHggfTtcblxuLyoqIEF2YSBQLWNoYWluIHRyYW5zYWN0aW9uICovXG5leHBvcnQgdHlwZSBBdmFQQ2hhaW5UeCA9XG4gIHwgeyBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcjogSnNvbk1hcCB9XG4gIHwgeyBBZGRTdWJuZXRWYWxpZGF0b3I6IEpzb25NYXAgfVxuICB8IHsgQWRkVmFsaWRhdG9yOiBKc29uTWFwIH1cbiAgfCB7IENyZWF0ZUNoYWluOiBKc29uTWFwIH1cbiAgfCB7IENyZWF0ZVN1Ym5ldDogSnNvbk1hcCB9XG4gIHwgeyBFeHBvcnQ6IEpzb25NYXAgfVxuICB8IHsgSW1wb3J0OiBKc29uTWFwIH07XG5cbi8qKiBBdmEgWC1jaGFpbiB0cmFuc2FjdGlvbiAqL1xuZXhwb3J0IHR5cGUgQXZhWENoYWluVHggPSB7IEJhc2U6IEpzb25NYXAgfSB8IHsgRXhwb3J0OiBKc29uTWFwIH0gfCB7IEltcG9ydDogSnNvbk1hcCB9O1xuIl19
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Events } from "../events";
|
|
2
|
+
import { EnvInterface } from "../env";
|
|
2
3
|
import { Client } from "../api";
|
|
3
|
-
import { HasEnv, OrgSessionManager } from "./session_manager";
|
|
4
4
|
import { SessionStorage } from "./session_storage";
|
|
5
|
-
import {
|
|
5
|
+
import { ClientSessionInfo, NewSessionResponse } from "../schema_types";
|
|
6
|
+
import { operations } from "../schema";
|
|
6
7
|
/** JSON representation of our "signer session" file format */
|
|
7
|
-
export interface
|
|
8
|
+
export interface SignerSessionData {
|
|
8
9
|
/** The organization ID */
|
|
9
10
|
org_id: string;
|
|
10
11
|
/** The role ID */
|
|
@@ -17,8 +18,10 @@ export interface SignerSessionObject {
|
|
|
17
18
|
session_info: ClientSessionInfo;
|
|
18
19
|
/** Session expiration (in seconds since UNIX epoch) beyond which it cannot be refreshed */
|
|
19
20
|
session_exp: number | undefined;
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
/** The environment */
|
|
22
|
+
env: {
|
|
23
|
+
["Dev-CubeSignerStack"]: EnvInterface;
|
|
24
|
+
};
|
|
22
25
|
}
|
|
23
26
|
/** Type of storage required for signer sessions */
|
|
24
27
|
export type SignerSessionStorage = SessionStorage<SignerSessionData>;
|
|
@@ -32,9 +35,13 @@ export interface SignerSessionLifetime {
|
|
|
32
35
|
/** Grace lifetime (in seconds). Defaults to 30 seconds (30). */
|
|
33
36
|
grace?: number;
|
|
34
37
|
}
|
|
35
|
-
/**
|
|
36
|
-
export declare class SignerSessionManager
|
|
38
|
+
/** Generic session manager interface. */
|
|
39
|
+
export declare class SignerSessionManager {
|
|
37
40
|
#private;
|
|
41
|
+
readonly env: EnvInterface;
|
|
42
|
+
readonly orgId: string;
|
|
43
|
+
readonly storage: SignerSessionStorage;
|
|
44
|
+
readonly events: Events;
|
|
38
45
|
/**
|
|
39
46
|
* @return {string} The current auth token.
|
|
40
47
|
* @internal
|
|
@@ -44,10 +51,19 @@ export declare class SignerSessionManager extends OrgSessionManager<SignerSessio
|
|
|
44
51
|
* Refreshes the current session if needed, then returns a client using the current session.
|
|
45
52
|
*
|
|
46
53
|
* May **UPDATE/MUTATE** self.
|
|
54
|
+
*
|
|
55
|
+
* @param {operations} operation The operation that this client will be
|
|
56
|
+
* used for. This parameter is used exclusively for more accurate error
|
|
57
|
+
* reporting and does not affect functionality.
|
|
58
|
+
* @return {Client} The client with the current session
|
|
47
59
|
*/
|
|
48
|
-
client(): Promise<Client>;
|
|
60
|
+
client(operation?: keyof operations): Promise<Client>;
|
|
49
61
|
/** Revokes the session. */
|
|
50
62
|
revoke(): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Refreshes the session and **UPDATES/MUTATES** self.
|
|
65
|
+
*/
|
|
66
|
+
refresh(): Promise<void>;
|
|
51
67
|
/**
|
|
52
68
|
* Returns whether it's time to refresh this token.
|
|
53
69
|
* @return {boolean} Whether it's time to refresh this token.
|
|
@@ -55,9 +71,28 @@ export declare class SignerSessionManager extends OrgSessionManager<SignerSessio
|
|
|
55
71
|
*/
|
|
56
72
|
isStale(): Promise<boolean>;
|
|
57
73
|
/**
|
|
58
|
-
*
|
|
74
|
+
* Return whether this session has expired and cannot be refreshed anymore.
|
|
75
|
+
* @return {boolean} Whether this session has expired.
|
|
76
|
+
* @internal
|
|
59
77
|
*/
|
|
60
|
-
|
|
78
|
+
hasExpired(): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Refreshes the session if it is about to expire.
|
|
81
|
+
* @return {boolean} Whether the session token was refreshed.
|
|
82
|
+
* @internal
|
|
83
|
+
*/
|
|
84
|
+
refreshIfNeeded(): Promise<boolean>;
|
|
85
|
+
/**
|
|
86
|
+
* Automatically refreshes the session in the background (if needed) every
|
|
87
|
+
* minute. This is a simple wrapper around `setInterval`.
|
|
88
|
+
* @return {number} The interval ID of the refresh timer.
|
|
89
|
+
*/
|
|
90
|
+
autoRefresh(): RefreshId;
|
|
91
|
+
/**
|
|
92
|
+
* Clears the auto refresh timer.
|
|
93
|
+
* @param {number} timer The timer ID to clear.
|
|
94
|
+
*/
|
|
95
|
+
clearAutoRefresh(timer: RefreshId): void;
|
|
61
96
|
/**
|
|
62
97
|
* @param {EnvInterface} env The CubeSigner environment
|
|
63
98
|
* @param {string} orgId The organization ID
|
|
@@ -81,9 +116,10 @@ export declare class SignerSessionManager extends OrgSessionManager<SignerSessio
|
|
|
81
116
|
static loadFromStorage(storage: SignerSessionStorage): Promise<SignerSessionManager>;
|
|
82
117
|
/**
|
|
83
118
|
* Constructor.
|
|
84
|
-
*
|
|
85
119
|
* @param {SignerSessionData} sessionData Session data
|
|
86
120
|
* @param {SignerSessionStorage} storage The session storage to use.
|
|
87
121
|
*/
|
|
88
|
-
|
|
122
|
+
constructor(sessionData: SignerSessionData, storage: SignerSessionStorage);
|
|
89
123
|
}
|
|
124
|
+
/** Type of the refresh timer ID. */
|
|
125
|
+
export type RefreshId = ReturnType<typeof setInterval>;
|
|
@@ -10,13 +10,16 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
11
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
12
|
};
|
|
13
|
-
var _SignerSessionManager_eventEmitter, _SignerSessionManager_client;
|
|
13
|
+
var _SignerSessionManager_instances, _a, _SignerSessionManager_eventEmitter, _SignerSessionManager_refreshing, _SignerSessionManager_client, _SignerSessionManager_createClient, _SignerSessionManager_hasTimestampExpired;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.SignerSessionManager = void 0;
|
|
16
|
+
const events_1 = require("../events");
|
|
16
17
|
const api_1 = require("../api");
|
|
17
|
-
const session_manager_1 = require("./session_manager");
|
|
18
18
|
const session_storage_1 = require("./session_storage");
|
|
19
|
-
const
|
|
19
|
+
const util_1 = require("../util");
|
|
20
|
+
const events_2 = require("../events");
|
|
21
|
+
const error_1 = require("../error");
|
|
22
|
+
const DEFAULT_EXPIRATION_BUFFER_SECS = 30;
|
|
20
23
|
/**
|
|
21
24
|
* Constructs {@link Date} from a number representing seconds since unix epoch.
|
|
22
25
|
* @param {number} secs Seconds since unix epoch.
|
|
@@ -25,8 +28,8 @@ const events_1 = require("../events");
|
|
|
25
28
|
function secondsSinceEpochToDate(secs) {
|
|
26
29
|
return new Date(secs * 1000);
|
|
27
30
|
}
|
|
28
|
-
/**
|
|
29
|
-
class SignerSessionManager
|
|
31
|
+
/** Generic session manager interface. */
|
|
32
|
+
class SignerSessionManager {
|
|
30
33
|
/**
|
|
31
34
|
* @return {string} The current auth token.
|
|
32
35
|
* @internal
|
|
@@ -39,14 +42,19 @@ class SignerSessionManager extends session_manager_1.OrgSessionManager {
|
|
|
39
42
|
* Refreshes the current session if needed, then returns a client using the current session.
|
|
40
43
|
*
|
|
41
44
|
* May **UPDATE/MUTATE** self.
|
|
45
|
+
*
|
|
46
|
+
* @param {operations} operation The operation that this client will be
|
|
47
|
+
* used for. This parameter is used exclusively for more accurate error
|
|
48
|
+
* reporting and does not affect functionality.
|
|
49
|
+
* @return {Client} The client with the current session
|
|
42
50
|
*/
|
|
43
|
-
async client() {
|
|
51
|
+
async client(operation) {
|
|
44
52
|
await this.refreshIfNeeded();
|
|
45
53
|
// trigger "session expired" if the session as a whole has expired
|
|
46
54
|
// or if (for whatever reason) the token is still stale
|
|
47
|
-
if (
|
|
48
|
-
(__classPrivateFieldGet(this, _SignerSessionManager_client, "f").session_exp && session_manager_1.SessionManager.hasExpired(__classPrivateFieldGet(this, _SignerSessionManager_client, "f").session_exp))) {
|
|
55
|
+
if (__classPrivateFieldGet(_a, _a, "m", _SignerSessionManager_hasTimestampExpired).call(_a, __classPrivateFieldGet(this, _SignerSessionManager_client, "f").token_exp) || this.hasExpired()) {
|
|
49
56
|
await __classPrivateFieldGet(this, _SignerSessionManager_eventEmitter, "f").emitSessionExpired();
|
|
57
|
+
throw new error_1.SessionExpiredError(operation);
|
|
50
58
|
}
|
|
51
59
|
return __classPrivateFieldGet(this, _SignerSessionManager_client, "f").client;
|
|
52
60
|
}
|
|
@@ -57,18 +65,14 @@ class SignerSessionManager extends session_manager_1.OrgSessionManager {
|
|
|
57
65
|
params: { path: { org_id: this.orgId } },
|
|
58
66
|
});
|
|
59
67
|
}
|
|
60
|
-
/**
|
|
61
|
-
* Returns whether it's time to refresh this token.
|
|
62
|
-
* @return {boolean} Whether it's time to refresh this token.
|
|
63
|
-
* @internal
|
|
64
|
-
*/
|
|
65
|
-
async isStale() {
|
|
66
|
-
return session_manager_1.SessionManager.isStale(__classPrivateFieldGet(this, _SignerSessionManager_client, "f").token_exp);
|
|
67
|
-
}
|
|
68
68
|
/**
|
|
69
69
|
* Refreshes the session and **UPDATES/MUTATES** self.
|
|
70
70
|
*/
|
|
71
71
|
async refresh() {
|
|
72
|
+
if (this.hasExpired()) {
|
|
73
|
+
await __classPrivateFieldGet(this, _SignerSessionManager_eventEmitter, "f").emitSessionExpired();
|
|
74
|
+
throw new error_1.SessionExpiredError("signerSessionRefresh");
|
|
75
|
+
}
|
|
72
76
|
const currSession = await this.storage.retrieve();
|
|
73
77
|
const client = new api_1.OpClient("signerSessionRefresh", __classPrivateFieldGet(this, _SignerSessionManager_client, "f").client, __classPrivateFieldGet(this, _SignerSessionManager_eventEmitter, "f"));
|
|
74
78
|
const csi = currSession.session_info;
|
|
@@ -87,13 +91,75 @@ class SignerSessionManager extends session_manager_1.OrgSessionManager {
|
|
|
87
91
|
};
|
|
88
92
|
await this.storage.save(newSession);
|
|
89
93
|
__classPrivateFieldSet(this, _SignerSessionManager_client, {
|
|
90
|
-
client: this.
|
|
94
|
+
client: __classPrivateFieldGet(this, _SignerSessionManager_instances, "m", _SignerSessionManager_createClient).call(this, newSession.token),
|
|
91
95
|
token_exp: secondsSinceEpochToDate(newSession.session_info.auth_token_exp),
|
|
92
96
|
session_exp: newSession.session_exp
|
|
93
97
|
? secondsSinceEpochToDate(newSession.session_exp)
|
|
94
98
|
: undefined,
|
|
95
99
|
}, "f");
|
|
96
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Returns whether it's time to refresh this token.
|
|
103
|
+
* @return {boolean} Whether it's time to refresh this token.
|
|
104
|
+
* @internal
|
|
105
|
+
*/
|
|
106
|
+
async isStale() {
|
|
107
|
+
return __classPrivateFieldGet(_a, _a, "m", _SignerSessionManager_hasTimestampExpired).call(_a, __classPrivateFieldGet(this, _SignerSessionManager_client, "f").token_exp, DEFAULT_EXPIRATION_BUFFER_SECS);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Return whether this session has expired and cannot be refreshed anymore.
|
|
111
|
+
* @return {boolean} Whether this session has expired.
|
|
112
|
+
* @internal
|
|
113
|
+
*/
|
|
114
|
+
hasExpired() {
|
|
115
|
+
return ((__classPrivateFieldGet(this, _SignerSessionManager_client, "f").session_exp || false) &&
|
|
116
|
+
__classPrivateFieldGet(_a, _a, "m", _SignerSessionManager_hasTimestampExpired).call(_a, __classPrivateFieldGet(this, _SignerSessionManager_client, "f").session_exp));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Refreshes the session if it is about to expire.
|
|
120
|
+
* @return {boolean} Whether the session token was refreshed.
|
|
121
|
+
* @internal
|
|
122
|
+
*/
|
|
123
|
+
async refreshIfNeeded() {
|
|
124
|
+
if (await this.isStale()) {
|
|
125
|
+
if (__classPrivateFieldGet(this, _SignerSessionManager_refreshing, "f")) {
|
|
126
|
+
// wait until done refreshing
|
|
127
|
+
while (__classPrivateFieldGet(this, _SignerSessionManager_refreshing, "f")) {
|
|
128
|
+
await (0, util_1.delay)(100);
|
|
129
|
+
}
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// refresh
|
|
134
|
+
__classPrivateFieldSet(this, _SignerSessionManager_refreshing, true, "f");
|
|
135
|
+
try {
|
|
136
|
+
await this.refresh();
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
__classPrivateFieldSet(this, _SignerSessionManager_refreshing, false, "f");
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Automatically refreshes the session in the background (if needed) every
|
|
148
|
+
* minute. This is a simple wrapper around `setInterval`.
|
|
149
|
+
* @return {number} The interval ID of the refresh timer.
|
|
150
|
+
*/
|
|
151
|
+
autoRefresh() {
|
|
152
|
+
return setInterval(async () => {
|
|
153
|
+
await this.refreshIfNeeded();
|
|
154
|
+
}, 60 * 1000);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Clears the auto refresh timer.
|
|
158
|
+
* @param {number} timer The timer ID to clear.
|
|
159
|
+
*/
|
|
160
|
+
clearAutoRefresh(timer) {
|
|
161
|
+
clearInterval(timer);
|
|
162
|
+
}
|
|
97
163
|
/**
|
|
98
164
|
* @param {EnvInterface} env The CubeSigner environment
|
|
99
165
|
* @param {string} orgId The organization ID
|
|
@@ -114,7 +180,7 @@ class SignerSessionManager extends session_manager_1.OrgSessionManager {
|
|
|
114
180
|
};
|
|
115
181
|
storage ??= new session_storage_1.MemorySessionStorage();
|
|
116
182
|
await storage.save(sessionData);
|
|
117
|
-
return await
|
|
183
|
+
return await _a.loadFromStorage(storage);
|
|
118
184
|
}
|
|
119
185
|
/**
|
|
120
186
|
* @param {SignerSessionData} sessionData The session information.
|
|
@@ -124,7 +190,7 @@ class SignerSessionManager extends session_manager_1.OrgSessionManager {
|
|
|
124
190
|
static async createFromSessionData(sessionData, storage) {
|
|
125
191
|
storage ??= new session_storage_1.MemorySessionStorage();
|
|
126
192
|
await storage.save(sessionData);
|
|
127
|
-
return await
|
|
193
|
+
return await _a.loadFromStorage(storage);
|
|
128
194
|
}
|
|
129
195
|
/**
|
|
130
196
|
* Uses an existing session to create a new signer session manager.
|
|
@@ -134,21 +200,25 @@ class SignerSessionManager extends session_manager_1.OrgSessionManager {
|
|
|
134
200
|
*/
|
|
135
201
|
static async loadFromStorage(storage) {
|
|
136
202
|
const session = await storage.retrieve();
|
|
137
|
-
return new
|
|
203
|
+
return new _a(session, storage);
|
|
138
204
|
}
|
|
139
205
|
/**
|
|
140
206
|
* Constructor.
|
|
141
|
-
*
|
|
142
207
|
* @param {SignerSessionData} sessionData Session data
|
|
143
208
|
* @param {SignerSessionStorage} storage The session storage to use.
|
|
144
209
|
*/
|
|
145
210
|
constructor(sessionData, storage) {
|
|
146
|
-
|
|
211
|
+
_SignerSessionManager_instances.add(this);
|
|
212
|
+
this.events = new events_1.Events();
|
|
147
213
|
_SignerSessionManager_eventEmitter.set(this, void 0);
|
|
214
|
+
_SignerSessionManager_refreshing.set(this, false);
|
|
148
215
|
_SignerSessionManager_client.set(this, void 0);
|
|
149
|
-
|
|
216
|
+
this.env = sessionData.env["Dev-CubeSignerStack"];
|
|
217
|
+
this.orgId = sessionData.org_id;
|
|
218
|
+
this.storage = storage;
|
|
219
|
+
__classPrivateFieldSet(this, _SignerSessionManager_eventEmitter, new events_2.EventEmitter([this.events]), "f");
|
|
150
220
|
__classPrivateFieldSet(this, _SignerSessionManager_client, {
|
|
151
|
-
client: this.
|
|
221
|
+
client: __classPrivateFieldGet(this, _SignerSessionManager_instances, "m", _SignerSessionManager_createClient).call(this, sessionData.token),
|
|
152
222
|
token_exp: secondsSinceEpochToDate(sessionData.session_info.auth_token_exp),
|
|
153
223
|
session_exp: sessionData.session_exp
|
|
154
224
|
? secondsSinceEpochToDate(sessionData.session_exp)
|
|
@@ -157,5 +227,13 @@ class SignerSessionManager extends session_manager_1.OrgSessionManager {
|
|
|
157
227
|
}
|
|
158
228
|
}
|
|
159
229
|
exports.SignerSessionManager = SignerSessionManager;
|
|
160
|
-
_SignerSessionManager_eventEmitter = new WeakMap(), _SignerSessionManager_client = new WeakMap()
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVyX3Nlc3Npb25fbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXNzaW9uL3NpZ25lcl9zZXNzaW9uX21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBS0EsZ0NBQTBDO0FBQzFDLHVEQUE4RTtBQUM5RSx1REFBeUU7QUFDekUsc0NBQXlDO0FBbUJ6Qzs7OztHQUlHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxJQUFZO0lBQzNDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFrQkQsbUNBQW1DO0FBQ25DLE1BQWEsb0JBQXFCLFNBQVEsbUNBQW9DO0lBSTVFOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFN0Isa0VBQWtFO1FBQ2xFLHVEQUF1RDtRQUN2RCxJQUNFLGdDQUFjLENBQUMsVUFBVSxDQUFDLHVCQUFBLElBQUksb0NBQVEsQ0FBQyxTQUFTLENBQUM7WUFDakQsQ0FBQyx1QkFBQSxJQUFJLG9DQUFRLENBQUMsV0FBVyxJQUFJLGdDQUFjLENBQUMsVUFBVSxDQUFDLHVCQUFBLElBQUksb0NBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUNqRixDQUFDO1lBQ0QsTUFBTSx1QkFBQSxJQUFJLDBDQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNoRCxDQUFDO1FBRUQsT0FBTyx1QkFBQSxJQUFJLG9DQUFRLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsS0FB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dFNlc3Npb25JbmZvLFxuICBOZXdTZXNzaW9uUmVzcG9uc2UsXG4gIFJlZnJlc2hTaWduZXJTZXNzaW9uUmVxdWVzdCxcbn0gZnJvbSBcIi4uL3NjaGVtYV90eXBlc1wiO1xuaW1wb3J0IHsgQ2xpZW50LCBPcENsaWVudCB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IEhhc0VudiwgT3JnU2Vzc2lvbk1hbmFnZXIsIFNlc3Npb25NYW5hZ2VyIH0gZnJvbSBcIi4vc2Vzc2lvbl9tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNZW1vcnlTZXNzaW9uU3RvcmFnZSwgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi9zZXNzaW9uX3N0b3JhZ2VcIjtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEVudkludGVyZmFjZSB9IGZyb20gXCIuLi9lbnZcIjtcblxuLyoqIEpTT04gcmVwcmVzZW50YXRpb24gb2Ygb3VyIFwic2lnbmVyIHNlc3Npb25cIiBmaWxlIGZvcm1hdCAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduZXJTZXNzaW9uT2JqZWN0IHtcbiAgLyoqIFRoZSBvcmdhbml6YXRpb24gSUQgKi9cbiAgb3JnX2lkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcm9sZSBJRCAqL1xuICByb2xlX2lkPzogc3RyaW5nO1xuICAvKiogVGhlIHB1cnBvc2Ugb2YgdGhlIHNlc3Npb24gdG9rZW4gKi9cbiAgcHVycG9zZT86IHN0cmluZztcbiAgLyoqIFRoZSB0b2tlbiB0byBpbmNsdWRlIGluIEF1dGhvcml6YXRpb24gaGVhZGVyICovXG4gIHRva2VuOiBzdHJpbmc7XG4gIC8qKiBTZXNzaW9uIGluZm8gKi9cbiAgc2Vzc2lvbl9pbmZvOiBDbGllbnRTZXNzaW9uSW5mbztcbiAgLyoqIFNlc3Npb24gZXhwaXJhdGlvbiAoaW4gc2Vjb25kcyBzaW5jZSBVTklYIGVwb2NoKSBiZXlvbmQgd2hpY2ggaXQgY2Fubm90IGJlIHJlZnJlc2hlZCAqL1xuICBzZXNzaW9uX2V4cDogbnVtYmVyIHwgdW5kZWZpbmVkOyAvLyBtYXkgYmUgbWlzc2luZyBpbiBsZWdhY3kgc2Vzc2lvbiBmaWxlc1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMge0BsaW5rIERhdGV9IGZyb20gYSBudW1iZXIgcmVwcmVzZW50aW5nIHNlY29uZHMgc2luY2UgdW5peCBlcG9jaC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWNzIFNlY29uZHMgc2luY2UgdW5peCBlcG9jaC5cbiAqIEByZXR1cm4ge0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuXG4gKi9cbmZ1bmN0aW9uIHNlY29uZHNTaW5jZUVwb2NoVG9EYXRlKHNlY3M6IG51bWJlcik6IERhdGUge1xuICByZXR1cm4gbmV3IERhdGUoc2VjcyAqIDEwMDApO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25lclNlc3Npb25EYXRhIGV4dGVuZHMgU2lnbmVyU2Vzc2lvbk9iamVjdCwgSGFzRW52IHt9XG5cbi8qKiBUeXBlIG9mIHN0b3JhZ2UgcmVxdWlyZWQgZm9yIHNpZ25lciBzZXNzaW9ucyAqL1xuZXhwb3J0IHR5cGUgU2lnbmVyU2Vzc2lvblN0b3JhZ2UgPSBTZXNzaW9uU3RvcmFnZTxTaWduZXJTZXNzaW9uRGF0YT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmVyU2Vzc2lvbkxpZmV0aW1lIHtcbiAgLyoqIFNlc3Npb24gbGlmZXRpbWUgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byBvbmUgd2VlayAoNjA0ODAwKS4gKi9cbiAgc2Vzc2lvbj86IG51bWJlcjtcbiAgLyoqIEF1dGggdG9rZW4gbGlmZXRpbWUgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byBmaXZlIG1pbnV0ZXMgKDMwMCkuICovXG4gIGF1dGg6IG51bWJlcjtcbiAgLyoqIFJlZnJlc2ggdG9rZW4gbGlmZXRpbWUgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byBvbmUgZGF5ICg4NjQwMCkuICovXG4gIHJlZnJlc2g/OiBudW1iZXI7XG4gIC8qKiBHcmFjZSBsaWZldGltZSAoaW4gc2Vjb25kcykuIERlZmF1bHRzIHRvIDMwIHNlY29uZHMgKDMwKS4gKi9cbiAgZ3JhY2U/OiBudW1iZXI7XG59XG5cbi8qKiBNYW5hZ2VyIGZvciBzaWduZXIgc2Vzc2lvbnMuICovXG5leHBvcnQgY2xhc3MgU2lnbmVyU2Vzc2lvbk1hbmFnZXIgZXh0ZW5kcyBPcmdTZXNzaW9uTWFuYWdlcjxTaWduZXJTZXNzaW9uRGF0YT4ge1xuICByZWFkb25seSAjZXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI7XG4gICNjbGllbnQ6IHsgY2xpZW50OiBDbGllbnQ7IHRva2VuX2V4cDogRGF0ZTsgc2Vzc2lvbl9leHA/OiBEYXRlIH07XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGN1cnJlbnQgYXV0aCB0b2tlbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBhc3luYyB0b2tlbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCB0aGlzLnN0b3JhZ2UucmV0cmlldmUoKTtcbiAgICByZXR1cm4gc2Vzc2lvbi50b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZiBuZWVkZWQsIHRoZW4gcmV0dXJucyBhIGNsaWVudCB1c2luZyB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgKlxuICAgKiBNYXkgKipVUERBVEUvTVVUQVRFKiogc2VsZi5cbiAgICovXG4gIGFzeW5jIGNsaWVudCgpOiBQcm9taXNlPENsaWVudD4ge1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaElmTmVlZGVkKCk7XG5cbiAgICAvLyB0cmlnZ2VyIFwic2Vzc2lvbiBleHBpcmVkXCIgaWYgdGhlIHNlc3Npb24gYXMgYSB3aG9sZSBoYXMgZXhwaXJlZFxuICAgIC8vIG9yIGlmIChmb3Igd2hhdGV2ZXIgcmVhc29uKSB0aGUgdG9rZW4gaXMgc3RpbGwgc3RhbGVcbiAgICBpZiAoXG4gICAgICBTZXNzaW9uTWFuYWdlci5oYXNFeHBpcmVkKHRoaXMuI2NsaWVudC50b2tlbl9leHApIHx8XG4gICAgICAodGhpcy4jY2xpZW50LnNlc3Npb25fZXhwICYmIFNlc3Npb25NYW5hZ2VyLmhhc0V4cGlyZWQodGhpcy4jY2xpZW50LnNlc3Npb25fZXhwKSlcbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMuI2V2ZW50RW1pdHRlci5lbWl0U2Vzc2lvbkV4cGlyZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jY2xpZW50LmNsaWVudDtcbiAgfVxuXG4gIC8qKiBSZXZva2VzIHRoZSBzZXNzaW9uLiAqL1xuICBhc3luYyByZXZva2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IE9wQ2xpZW50KFwicmV2b2tlQ3VycmVudFNlc3Npb25cIiwgYXdhaXQgdGhpcy5jbGllbnQoKSwgdGhpcy4jZXZlbnRFbWl0dGVyKTtcbiAgICBhd2FpdCBjbGllbnQuZGVsKFwiL3YwL29yZy97b3JnX2lkfS9zZXNzaW9uL3NlbGZcIiwge1xuICAgICAgcGFyYW1zOiB7IHBhdGg6IHsgb3JnX2lkOiB0aGlzLm9yZ0lkIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgaXQncyB0aW1lIHRvIHJlZnJlc2ggdGhpcyB0b2tlbi5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBpdCdzIHRpbWUgdG8gcmVmcmVzaCB0aGlzIHRva2VuLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFzeW5jIGlzU3RhbGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNlc3Npb25NYW5hZ2VyLmlzU3RhbGUodGhpcy4jY2xpZW50LnRva2VuX2V4cCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSBzZXNzaW9uIGFuZCAqKlVQREFURVMvTVVUQVRFUyoqIHNlbGYuXG4gICAqL1xuICBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJTZXNzaW9uID0gYXdhaXQgdGhpcy5zdG9yYWdlLnJldHJpZXZlKCk7XG5cbiAgICBjb25zdCBjbGllbnQgPSBuZXcgT3BDbGllbnQoXCJzaWduZXJTZXNzaW9uUmVmcmVzaFwiLCB0aGlzLiNjbGllbnQuY2xpZW50LCB0aGlzLiNldmVudEVtaXR0ZXIpO1xuICAgIGNvbnN0IGNzaSA9IGN1cnJTZXNzaW9uLnNlc3Npb25faW5mbztcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgY2xpZW50LnBhdGNoKFwiL3YxL29yZy97b3JnX2lkfS90b2tlbi9yZWZyZXNoXCIsIHtcbiAgICAgIHBhcmFtczogeyBwYXRoOiB7IG9yZ19pZDogdGhpcy5vcmdJZCB9IH0sXG4gICAgICBib2R5OiA8UmVmcmVzaFNpZ25lclNlc3Npb25SZXF1ZXN0PntcbiAgICAgICAgZXBvY2hfbnVtOiBjc2kuZXBvY2gsXG4gICAgICAgIGVwb2NoX3Rva2VuOiBjc2kuZXBvY2hfdG9rZW4sXG4gICAgICAgIG90aGVyX3Rva2VuOiBjc2kucmVmcmVzaF90b2tlbixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgbmV3U2Vzc2lvbiA9IDxTaWduZXJTZXNzaW9uRGF0YT57XG4gICAgICAuLi5jdXJyU2Vzc2lvbixcbiAgICAgIHNlc3Npb25faW5mbzogZGF0YS5zZXNzaW9uX2luZm8sXG4gICAgICB0b2tlbjogZGF0YS50b2tlbixcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNhdmUobmV3U2Vzc2lvbik7XG4gICAgdGhpcy4jY2xpZW50ID0ge1xuICAgICAgY2xpZW50OiB0aGlzLmNyZWF0ZUNsaWVudChuZXdTZXNzaW9uLnRva2VuKSxcbiAgICAgIHRva2VuX2V4cDogc2Vjb25kc1NpbmNlRXBvY2hUb0RhdGUobmV3U2Vzc2lvbi5zZXNzaW9uX2luZm8uYXV0aF90b2tlbl9leHApLFxuICAgICAgc2Vzc2lvbl9leHA6IG5ld1Nlc3Npb24uc2Vzc2lvbl9leHBcbiAgICAgICAgPyBzZWNvbmRzU2luY2VFcG9jaFRvRGF0ZShuZXdTZXNzaW9uLnNlc3Npb25fZXhwKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RW52SW50ZXJmYWNlfSBlbnYgVGhlIEN1YmVTaWduZXIgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yZ0lkIFRoZSBvcmdhbml6YXRpb24gSURcbiAgICogQHBhcmFtIHtOZXdTZXNzaW9uUmVzcG9uc2V9IHNlc3Npb24gVGhlIHNlc3Npb24gaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7U2lnbmVyU2Vzc2lvblN0b3JhZ2V9IHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIGZvciBzYXZpbmcgdGhlIHNlc3Npb24uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8U2lnbmVyU2Vzc2lvbk1hbmFnZXI+fSBOZXcgc2lnbmVyIHNlc3Npb24gbWFuYWdlci5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVGcm9tU2Vzc2lvbkluZm8oXG4gICAgZW52OiBFbnZJbnRlcmZhY2UsXG4gICAgb3JnSWQ6IHN0cmluZyxcbiAgICBzZXNzaW9uOiBOZXdTZXNzaW9uUmVzcG9uc2UsXG4gICAgc3RvcmFnZT86IFNpZ25lclNlc3Npb25TdG9yYWdlLFxuICApOiBQcm9taXNlPFNpZ25lclNlc3Npb25NYW5hZ2VyPiB7XG4gICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSB7XG4gICAgICBlbnY6IHtcbiAgICAgICAgW1wiRGV2LUN1YmVTaWduZXJTdGFja1wiXTogZW52LFxuICAgICAgfSxcbiAgICAgIG9yZ19pZDogb3JnSWQsXG4gICAgICB0b2tlbjogc2Vzc2lvbi50b2tlbixcbiAgICAgIHB1cnBvc2U6IFwic2lnbiB2aWEgb2lkY1wiLFxuICAgICAgc2Vzc2lvbl9pbmZvOiBzZXNzaW9uLnNlc3Npb25faW5mbyxcbiAgICAgIHNlc3Npb25fZXhwOiBzZXNzaW9uLmV4cGlyYXRpb24hLFxuICAgIH07XG4gICAgc3RvcmFnZSA/Pz0gbmV3IE1lbW9yeVNlc3Npb25TdG9yYWdlKCk7XG4gICAgYXdhaXQgc3RvcmFnZS5zYXZlKHNlc3Npb25EYXRhKTtcbiAgICByZXR1cm4gYXdhaXQgU2lnbmVyU2Vzc2lvbk1hbmFnZXIubG9hZEZyb21TdG9yYWdlKHN0b3JhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U2lnbmVyU2Vzc2lvbkRhdGF9IHNlc3Npb25EYXRhIFRoZSBzZXNzaW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0ge1NpZ25lclNlc3Npb25TdG9yYWdlfSBzdG9yYWdlIFRoZSBzdG9yYWdlIHRvIHVzZSBmb3Igc2F2aW5nIHRoZSBzZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFNpZ25lclNlc3Npb25NYW5hZ2VyPn0gTmV3IHNpZ25lciBzZXNzaW9uIG1hbmFnZXIuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgY3JlYXRlRnJvbVNlc3Npb25EYXRhKFxuICAgIHNlc3Npb25EYXRhOiBTaWduZXJTZXNzaW9uRGF0YSxcbiAgICBzdG9yYWdlPzogU2lnbmVyU2Vzc2lvblN0b3JhZ2UsXG4gICk6IFByb21pc2U8U2lnbmVyU2Vzc2lvbk1hbmFnZXI+IHtcbiAgICBzdG9yYWdlID8/PSBuZXcgTWVtb3J5U2Vzc2lvblN0b3JhZ2UoKTtcbiAgICBhd2FpdCBzdG9yYWdlLnNhdmUoc2Vzc2lvbkRhdGEpO1xuICAgIHJldHVybiBhd2FpdCBTaWduZXJTZXNzaW9uTWFuYWdlci5sb2FkRnJvbVN0b3JhZ2Uoc3RvcmFnZSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbiBleGlzdGluZyBzZXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBzaWduZXIgc2Vzc2lvbiBtYW5hZ2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1NpZ25lclNlc3Npb25TdG9yYWdlfSBzdG9yYWdlIFRoZSBzZXNzaW9uIHN0b3JhZ2UgdG8gdXNlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8U2luZ2VyU2Vzc2lvbj59IE5ldyBzaWduZXIgc2Vzc2lvbiBtYW5hZ2VyXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgbG9hZEZyb21TdG9yYWdlKHN0b3JhZ2U6IFNpZ25lclNlc3Npb25TdG9yYWdlKTogUHJvbWlzZTxTaWduZXJTZXNzaW9uTWFuYWdlcj4ge1xuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBzdG9yYWdlLnJldHJpZXZlKCk7XG4gICAgcmV0dXJuIG5ldyBTaWduZXJTZXNzaW9uTWFuYWdlcihzZXNzaW9uLCBzdG9yYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtTaWduZXJTZXNzaW9uRGF0YX0gc2Vzc2lvbkRhdGEgU2Vzc2lvbiBkYXRhXG4gICAqIEBwYXJhbSB7U2lnbmVyU2Vzc2lvblN0b3JhZ2V9IHN0b3JhZ2UgVGhlIHNlc3Npb24gc3RvcmFnZSB0byB1c2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3Ioc2Vzc2lvbkRhdGE6IFNpZ25lclNlc3Npb25EYXRhLCBzdG9yYWdlOiBTaWduZXJTZXNzaW9uU3RvcmFnZSkge1xuICAgIHN1cGVyKHNlc3Npb25EYXRhLmVudltcIkRldi1DdWJlU2lnbmVyU3RhY2tcIl0sIHNlc3Npb25EYXRhLm9yZ19pZCwgc3RvcmFnZSk7XG4gICAgdGhpcy4jZXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcihbdGhpcy5ldmVudHNdKTtcbiAgICB0aGlzLiNjbGllbnQgPSB7XG4gICAgICBjbGllbnQ6IHRoaXMuY3JlYXRlQ2xpZW50KHNlc3Npb25EYXRhLnRva2VuKSxcbiAgICAgIHRva2VuX2V4cDogc2Vjb25kc1NpbmNlRXBvY2hUb0RhdGUoc2Vzc2lvbkRhdGEuc2Vzc2lvbl9pbmZvLmF1dGhfdG9rZW5fZXhwKSxcbiAgICAgIHNlc3Npb25fZXhwOiBzZXNzaW9uRGF0YS5zZXNzaW9uX2V4cFxuICAgICAgICA/IHNlY29uZHNTaW5jZUVwb2NoVG9EYXRlKHNlc3Npb25EYXRhLnNlc3Npb25fZXhwKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
230
|
+
_a = SignerSessionManager, _SignerSessionManager_eventEmitter = new WeakMap(), _SignerSessionManager_refreshing = new WeakMap(), _SignerSessionManager_client = new WeakMap(), _SignerSessionManager_instances = new WeakSet(), _SignerSessionManager_createClient = function _SignerSessionManager_createClient(token) {
|
|
231
|
+
return (0, api_1.createHttpClient)(this.env.SignerApiRoot, token);
|
|
232
|
+
}, _SignerSessionManager_hasTimestampExpired = function _SignerSessionManager_hasTimestampExpired(exp, bufferSeconds) {
|
|
233
|
+
bufferSeconds ??= 0;
|
|
234
|
+
const expMsSinceEpoch = exp.getTime();
|
|
235
|
+
const nowMsSinceEpoch = new Date().getTime();
|
|
236
|
+
const bufferMs = bufferSeconds * 1000;
|
|
237
|
+
return expMsSinceEpoch < nowMsSinceEpoch + bufferMs;
|
|
238
|
+
};
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVyX3Nlc3Npb25fbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXNzaW9uL3NpZ25lcl9zZXNzaW9uX21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQW1DO0FBRW5DLGdDQUE0RDtBQUM1RCx1REFBeUU7QUFDekUsa0NBQWdDO0FBTWhDLHNDQUF5QztBQUN6QyxvQ0FBK0M7QUFHL0MsTUFBTSw4QkFBOEIsR0FBRyxFQUFFLENBQUM7QUFzQjFDOzs7O0dBSUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLElBQVk7SUFDM0MsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQWdCRCx5Q0FBeUM7QUFDekMsTUFBYSxvQkFBb0I7SUFTL0I7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQTRCO1FBQ3ZDLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTdCLGtFQUFrRTtRQUNsRSx1REFBdUQ7UUFDdkQsSUFBSSx1QkFBQSxFQUFvQixxREFBcUIsTUFBekMsRUFBb0IsRUFBc0IsdUJBQUEsSUFBSSxvQ0FBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQzNGLE1BQU0sdUJBQUEsSUFBSSwwQ0FBYyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDOUMsTUFBTSxJQUFJLDJCQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxPQUFPLHVCQUFBLElBQUksb0NBQVEs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Q0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFBLENBQUM7UUFDckQsdUJBQUEsSUFBSSxnQ0FBVztZQUNiLE1BQU0sRUFBRSx1QkFBQSxJQUFJLDJFQUFjLE1BQWxCLElBQUksRUFBZSxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzdDLFNBQVMsRUFBRSx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztZQUMzRSxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVc7Z0JBQ2xDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsU0FBUztTQUNkLE1BQUEsQ0FBQztJQUNKLENBQUM7Q0F3QkY7QUEzUEQsb0RBMlBDO2lUQWpCZSxLQUFhO0lBQ3pCLE9BQU8sSUFBQSxzQkFBZ0IsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6RCxDQUFDLGlHQVEyQixHQUFTLEVBQUUsYUFBc0I7SUFDM0QsYUFBYSxLQUFLLENBQUMsQ0FBQztJQUNwQixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE9BQU8sZUFBZSxHQUFHLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50cyB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEVudkludGVyZmFjZSB9IGZyb20gXCIuLi9lbnZcIjtcbmltcG9ydCB7IENsaWVudCwgY3JlYXRlSHR0cENsaWVudCwgT3BDbGllbnQgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgeyBNZW1vcnlTZXNzaW9uU3RvcmFnZSwgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi9zZXNzaW9uX3N0b3JhZ2VcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7XG4gIENsaWVudFNlc3Npb25JbmZvLFxuICBOZXdTZXNzaW9uUmVzcG9uc2UsXG4gIFJlZnJlc2hTaWduZXJTZXNzaW9uUmVxdWVzdCxcbn0gZnJvbSBcIi4uL3NjaGVtYV90eXBlc1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgU2Vzc2lvbkV4cGlyZWRFcnJvciB9IGZyb20gXCIuLi9lcnJvclwiO1xuaW1wb3J0IHsgb3BlcmF0aW9ucyB9IGZyb20gXCIuLi9zY2hlbWFcIjtcblxuY29uc3QgREVGQVVMVF9FWFBJUkFUSU9OX0JVRkZFUl9TRUNTID0gMzA7XG5cbi8qKiBKU09OIHJlcHJlc2VudGF0aW9uIG9mIG91ciBcInNpZ25lciBzZXNzaW9uXCIgZmlsZSBmb3JtYXQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmVyU2Vzc2lvbkRhdGEge1xuICAvKiogVGhlIG9yZ2FuaXphdGlvbiBJRCAqL1xuICBvcmdfaWQ6IHN0cmluZztcbiAgLyoqIFRoZSByb2xlIElEICovXG4gIHJvbGVfaWQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgcHVycG9zZSBvZiB0aGUgc2Vzc2lvbiB0b2tlbiAqL1xuICBwdXJwb3NlPzogc3RyaW5nO1xuICAvKiogVGhlIHRva2VuIHRvIGluY2x1ZGUgaW4gQXV0aG9yaXphdGlvbiBoZWFkZXIgKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIFNlc3Npb24gaW5mbyAqL1xuICBzZXNzaW9uX2luZm86IENsaWVudFNlc3Npb25JbmZvO1xuICAvKiogU2Vzc2lvbiBleHBpcmF0aW9uIChpbiBzZWNvbmRzIHNpbmNlIFVOSVggZXBvY2gpIGJleW9uZCB3aGljaCBpdCBjYW5ub3QgYmUgcmVmcmVzaGVkICovXG4gIHNlc3Npb25fZXhwOiBudW1iZXIgfCB1bmRlZmluZWQ7IC8vIG1heSBiZSBtaXNzaW5nIGluIGxlZ2FjeSBzZXNzaW9uIGZpbGVzXG4gIC8qKiBUaGUgZW52aXJvbm1lbnQgKi9cbiAgZW52OiB7XG4gICAgW1wiRGV2LUN1YmVTaWduZXJTdGFja1wiXTogRW52SW50ZXJmYWNlO1xuICB9O1xufVxuXG4vKipcbiAqIENvbnN0cnVjdHMge0BsaW5rIERhdGV9IGZyb20gYSBudW1iZXIgcmVwcmVzZW50aW5nIHNlY29uZHMgc2luY2UgdW5peCBlcG9jaC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWNzIFNlY29uZHMgc2luY2UgdW5peCBlcG9jaC5cbiAqIEByZXR1cm4ge0RhdGV9IFRoZSBlcXVpdmFsZW50IGRhdGUuXG4gKi9cbmZ1bmN0aW9uIHNlY29uZHNTaW5jZUVwb2NoVG9EYXRlKHNlY3M6IG51bWJlcik6IERhdGUge1xuICByZXR1cm4gbmV3IERhdGUoc2VjcyAqIDEwMDApO1xufVxuXG4vKiogVHlwZSBvZiBzdG9yYWdlIHJlcXVpcmVkIGZvciBzaWduZXIgc2Vzc2lvbnMgKi9cbmV4cG9ydCB0eXBlIFNpZ25lclNlc3Npb25TdG9yYWdlID0gU2Vzc2lvblN0b3JhZ2U8U2lnbmVyU2Vzc2lvbkRhdGE+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25lclNlc3Npb25MaWZldGltZSB7XG4gIC8qKiBTZXNzaW9uIGxpZmV0aW1lIChpbiBzZWNvbmRzKS4gRGVmYXVsdHMgdG8gb25lIHdlZWsgKDYwNDgwMCkuICovXG4gIHNlc3Npb24/OiBudW1iZXI7XG4gIC8qKiBBdXRoIHRva2VuIGxpZmV0aW1lIChpbiBzZWNvbmRzKS4gRGVmYXVsdHMgdG8gZml2ZSBtaW51dGVzICgzMDApLiAqL1xuICBhdXRoOiBudW1iZXI7XG4gIC8qKiBSZWZyZXNoIHRva2VuIGxpZmV0aW1lIChpbiBzZWNvbmRzKS4gRGVmYXVsdHMgdG8gb25lIGRheSAoODY0MDApLiAqL1xuICByZWZyZXNoPzogbnVtYmVyO1xuICAvKiogR3JhY2UgbGlmZXRpbWUgKGluIHNlY29uZHMpLiBEZWZhdWx0cyB0byAzMCBzZWNvbmRzICgzMCkuICovXG4gIGdyYWNlPzogbnVtYmVyO1xufVxuXG4vKiogR2VuZXJpYyBzZXNzaW9uIG1hbmFnZXIgaW50ZXJmYWNlLiAqL1xuZXhwb3J0IGNsYXNzIFNpZ25lclNlc3Npb25NYW5hZ2VyIHtcbiAgcmVhZG9ubHkgZW52OiBFbnZJbnRlcmZhY2U7XG4gIHJlYWRvbmx5IG9yZ0lkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0b3JhZ2U6IFNpZ25lclNlc3Npb25TdG9yYWdlO1xuICByZWFkb25seSBldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHJlYWRvbmx5ICNldmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjtcbiAgI3JlZnJlc2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgI2NsaWVudDogeyBjbGllbnQ6IENsaWVudDsgdG9rZW5fZXhwOiBEYXRlOyBzZXNzaW9uX2V4cD86IERhdGUgfTtcblxuICAvKipcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgY3VycmVudCBhdXRoIHRva2VuLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFzeW5jIHRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZXRyaWV2ZSgpO1xuICAgIHJldHVybiBzZXNzaW9uLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgY3VycmVudCBzZXNzaW9uIGlmIG5lZWRlZCwgdGhlbiByZXR1cm5zIGEgY2xpZW50IHVzaW5nIHRoZSBjdXJyZW50IHNlc3Npb24uXG4gICAqXG4gICAqIE1heSAqKlVQREFURS9NVVRBVEUqKiBzZWxmLlxuICAgKlxuICAgKiBAcGFyYW0ge29wZXJhdGlvbnN9IG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRoYXQgdGhpcyBjbGllbnQgd2lsbCBiZVxuICAgKiAgIHVzZWQgZm9yLiBUaGlzIHBhcmFtZXRlciBpcyB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBtb3JlIGFjY3VyYXRlIGVycm9yXG4gICAqICAgcmVwb3J0aW5nIGFuZCBkb2VzIG5vdCBhZmZlY3QgZnVuY3Rpb25hbGl0eS5cbiAgICogQHJldHVybiB7Q2xpZW50fSBUaGUgY2xpZW50IHdpdGggdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgKi9cbiAgYXN5bmMgY2xpZW50KG9wZXJhdGlvbj86IGtleW9mIG9wZXJhdGlvbnMpOiBQcm9taXNlPENsaWVudD4ge1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaElmTmVlZGVkKCk7XG5cbiAgICAvLyB0cmlnZ2VyIFwic2Vzc2lvbiBleHBpcmVkXCIgaWYgdGhlIHNlc3Npb24gYXMgYSB3aG9sZSBoYXMgZXhwaXJlZFxuICAgIC8vIG9yIGlmIChmb3Igd2hhdGV2ZXIgcmVhc29uKSB0aGUgdG9rZW4gaXMgc3RpbGwgc3RhbGVcbiAgICBpZiAoU2lnbmVyU2Vzc2lvbk1hbmFnZXIuI2hhc1RpbWVzdGFtcEV4cGlyZWQodGhpcy4jY2xpZW50LnRva2VuX2V4cCkgfHwgdGhpcy5oYXNFeHBpcmVkKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuI2V2ZW50RW1pdHRlci5lbWl0U2Vzc2lvbkV4cGlyZWQoKTtcbiAgICAgIHRocm93IG5ldyBTZXNzaW9uRXhwaXJlZEVycm9yKG9wZXJhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuI2NsaWVudC5jbGllbnQ7XG4gIH1cblxuICAvKiogUmV2b2tlcyB0aGUgc2Vzc2lvbi4gKi9cbiAgYXN5bmMgcmV2b2tlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBPcENsaWVudChcInJldm9rZUN1cnJlbnRTZXNzaW9uXCIsIGF3YWl0IHRoaXMuY2xpZW50KCksIHRoaXMuI2V2ZW50RW1pdHRlcik7XG4gICAgYXdhaXQgY2xpZW50LmRlbChcIi92MC9vcmcve29yZ19pZH0vc2Vzc2lvbi9zZWxmXCIsIHtcbiAgICAgIHBhcmFtczogeyBwYXRoOiB7IG9yZ19pZDogdGhpcy5vcmdJZCB9IH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSBzZXNzaW9uIGFuZCAqKlVQREFURVMvTVVUQVRFUyoqIHNlbGYuXG4gICAqL1xuICBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmhhc0V4cGlyZWQoKSkge1xuICAgICAgYXdhaXQgdGhpcy4jZXZlbnRFbWl0dGVyLmVtaXRTZXNzaW9uRXhwaXJlZCgpO1xuICAgICAgdGhyb3cgbmV3IFNlc3Npb25FeHBpcmVkRXJyb3IoXCJzaWduZXJTZXNzaW9uUmVmcmVzaFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyU2Vzc2lvbiA9IGF3YWl0IHRoaXMuc3RvcmFnZS5yZXRyaWV2ZSgpO1xuXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IE9wQ2xpZW50KFwic2lnbmVyU2Vzc2lvblJlZnJlc2hcIiwgdGhpcy4jY2xpZW50LmNsaWVudCwgdGhpcy4jZXZlbnRFbWl0dGVyKTtcbiAgICBjb25zdCBjc2kgPSBjdXJyU2Vzc2lvbi5zZXNzaW9uX2luZm87XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGNsaWVudC5wYXRjaChcIi92MS9vcmcve29yZ19pZH0vdG9rZW4vcmVmcmVzaFwiLCB7XG4gICAgICBwYXJhbXM6IHsgcGF0aDogeyBvcmdfaWQ6IHRoaXMub3JnSWQgfSB9LFxuICAgICAgYm9keTogPFJlZnJlc2hTaWduZXJTZXNzaW9uUmVxdWVzdD57XG4gICAgICAgIGVwb2NoX251bTogY3NpLmVwb2NoLFxuICAgICAgICBlcG9jaF90b2tlbjogY3NpLmVwb2NoX3Rva2VuLFxuICAgICAgICBvdGhlcl90b2tlbjogY3NpLnJlZnJlc2hfdG9rZW4sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IG5ld1Nlc3Npb24gPSA8U2lnbmVyU2Vzc2lvbkRhdGE+e1xuICAgICAgLi4uY3VyclNlc3Npb24sXG4gICAgICBzZXNzaW9uX2luZm86IGRhdGEuc2Vzc2lvbl9pbmZvLFxuICAgICAgdG9rZW46IGRhdGEudG9rZW4sXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zYXZlKG5ld1Nlc3Npb24pO1xuICAgIHRoaXMuI2NsaWVudCA9IHtcbiAgICAgIGNsaWVudDogdGhpcy4jY3JlYXRlQ2xpZW50KG5ld1Nlc3Npb24udG9rZW4pLFxuICAgICAgdG9rZW5fZXhwOiBzZWNvbmRzU2luY2VFcG9jaFRvRGF0ZShuZXdTZXNzaW9uLnNlc3Npb25faW5mby5hdXRoX3Rva2VuX2V4cCksXG4gICAgICBzZXNzaW9uX2V4cDogbmV3U2Vzc2lvbi5zZXNzaW9uX2V4cFxuICAgICAgICA/IHNlY29uZHNTaW5jZUVwb2NoVG9EYXRlKG5ld1Nlc3Npb24uc2Vzc2lvbl9leHApXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIGl0J3MgdGltZSB0byByZWZyZXNoIHRoaXMgdG9rZW4uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgaXQncyB0aW1lIHRvIHJlZnJlc2ggdGhpcyB0b2tlbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBhc3luYyBpc1N0YWxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTaWduZXJTZXNzaW9uTWFuYWdlci4jaGFzVGltZXN0YW1wRXhwaXJlZChcbiAgICAgIHRoaXMuI2NsaWVudC50b2tlbl9leHAsXG4gICAgICBERUZBVUxUX0VYUElSQVRJT05fQlVGRkVSX1NFQ1MsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIHNlc3Npb24gaGFzIGV4cGlyZWQgYW5kIGNhbm5vdCBiZSByZWZyZXNoZWQgYW55bW9yZS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGlzIHNlc3Npb24gaGFzIGV4cGlyZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgaGFzRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMuI2NsaWVudC5zZXNzaW9uX2V4cCB8fCBmYWxzZSkgJiZcbiAgICAgIFNpZ25lclNlc3Npb25NYW5hZ2VyLiNoYXNUaW1lc3RhbXBFeHBpcmVkKHRoaXMuI2NsaWVudC5zZXNzaW9uX2V4cClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgc2Vzc2lvbiBpZiBpdCBpcyBhYm91dCB0byBleHBpcmUuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNlc3Npb24gdG9rZW4gd2FzIHJlZnJlc2hlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBhc3luYyByZWZyZXNoSWZOZWVkZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGF3YWl0IHRoaXMuaXNTdGFsZSgpKSB7XG4gICAgICBpZiAodGhpcy4jcmVmcmVzaGluZykge1xuICAgICAgICAvLyB3YWl0IHVudGlsIGRvbmUgcmVmcmVzaGluZ1xuICAgICAgICB3aGlsZSAodGhpcy4jcmVmcmVzaGluZykge1xuICAgICAgICAgIGF3YWl0IGRlbGF5KDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmVmcmVzaFxuICAgICAgICB0aGlzLiNyZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aGlzLiNyZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSByZWZyZXNoZXMgdGhlIHNlc3Npb24gaW4gdGhlIGJhY2tncm91bmQgKGlmIG5lZWRlZCkgZXZlcnlcbiAgICogbWludXRlLiBUaGlzIGlzIGEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGBzZXRJbnRlcnZhbGAuXG4gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGludGVydmFsIElEIG9mIHRoZSByZWZyZXNoIHRpbWVyLlxuICAgKi9cbiAgYXV0b1JlZnJlc2goKTogUmVmcmVzaElkIHtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoSWZOZWVkZWQoKTtcbiAgICB9LCA2MCAqIDEwMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgYXV0byByZWZyZXNoIHRpbWVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZXIgVGhlIHRpbWVyIElEIHRvIGNsZWFyLlxuICAgKi9cbiAgY2xlYXJBdXRvUmVmcmVzaCh0aW1lcjogUmVmcmVzaElkKTogdm9pZCB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbnZJbnRlcmZhY2V9IGVudiBUaGUgQ3ViZVNpZ25lciBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3JnSWQgVGhlIG9yZ2FuaXphdGlvbiBJRFxuICAgKiBAcGFyYW0ge05ld1Nlc3Npb25SZXNwb25zZX0gc2Vzc2lvbiBUaGUgc2Vzc2lvbiBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtTaWduZXJTZXNzaW9uU3RvcmFnZX0gc3RvcmFnZSBUaGUgc3RvcmFnZSB0byB1c2UgZm9yIHNhdmluZyB0aGUgc2Vzc2lvbi5cbiAgICogQHJldHVybiB7UHJvbWlzZTxTaWduZXJTZXNzaW9uTWFuYWdlcj59IE5ldyBzaWduZXIgc2Vzc2lvbiBtYW5hZ2VyLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZUZyb21TZXNzaW9uSW5mbyhcbiAgICBlbnY6IEVudkludGVyZmFjZSxcbiAgICBvcmdJZDogc3RyaW5nLFxuICAgIHNlc3Npb246IE5ld1Nlc3Npb25SZXNwb25zZSxcbiAgICBzdG9yYWdlPzogU2lnbmVyU2Vzc2lvblN0b3JhZ2UsXG4gICk6IFByb21pc2U8U2lnbmVyU2Vzc2lvbk1hbmFnZXI+IHtcbiAgICBjb25zdCBzZXNzaW9uRGF0YSA9IHtcbiAgICAgIGVudjoge1xuICAgICAgICBbXCJEZXYtQ3ViZVNpZ25lclN0YWNrXCJdOiBlbnYsXG4gICAgICB9LFxuICAgICAgb3JnX2lkOiBvcmdJZCxcbiAgICAgIHRva2VuOiBzZXNzaW9uLnRva2VuLFxuICAgICAgcHVycG9zZTogXCJzaWduIHZpYSBvaWRjXCIsXG4gICAgICBzZXNzaW9uX2luZm86IHNlc3Npb24uc2Vzc2lvbl9pbmZvLFxuICAgICAgc2Vzc2lvbl9leHA6IHNlc3Npb24uZXhwaXJhdGlvbiEsXG4gICAgfTtcbiAgICBzdG9yYWdlID8/PSBuZXcgTWVtb3J5U2Vzc2lvblN0b3JhZ2UoKTtcbiAgICBhd2FpdCBzdG9yYWdlLnNhdmUoc2Vzc2lvbkRhdGEpO1xuICAgIHJldHVybiBhd2FpdCBTaWduZXJTZXNzaW9uTWFuYWdlci5sb2FkRnJvbVN0b3JhZ2Uoc3RvcmFnZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtTaWduZXJTZXNzaW9uRGF0YX0gc2Vzc2lvbkRhdGEgVGhlIHNlc3Npb24gaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7U2lnbmVyU2Vzc2lvblN0b3JhZ2V9IHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIGZvciBzYXZpbmcgdGhlIHNlc3Npb24uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8U2lnbmVyU2Vzc2lvbk1hbmFnZXI+fSBOZXcgc2lnbmVyIHNlc3Npb24gbWFuYWdlci5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVGcm9tU2Vzc2lvbkRhdGEoXG4gICAgc2Vzc2lvbkRhdGE6IFNpZ25lclNlc3Npb25EYXRhLFxuICAgIHN0b3JhZ2U/OiBTaWduZXJTZXNzaW9uU3RvcmFnZSxcbiAgKTogUHJvbWlzZTxTaWduZXJTZXNzaW9uTWFuYWdlcj4ge1xuICAgIHN0b3JhZ2UgPz89IG5ldyBNZW1vcnlTZXNzaW9uU3RvcmFnZSgpO1xuICAgIGF3YWl0IHN0b3JhZ2Uuc2F2ZShzZXNzaW9uRGF0YSk7XG4gICAgcmV0dXJuIGF3YWl0IFNpZ25lclNlc3Npb25NYW5hZ2VyLmxvYWRGcm9tU3RvcmFnZShzdG9yYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VzIGFuIGV4aXN0aW5nIHNlc3Npb24gdG8gY3JlYXRlIGEgbmV3IHNpZ25lciBzZXNzaW9uIG1hbmFnZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7U2lnbmVyU2Vzc2lvblN0b3JhZ2V9IHN0b3JhZ2UgVGhlIHNlc3Npb24gc3RvcmFnZSB0byB1c2VcbiAgICogQHJldHVybiB7UHJvbWlzZTxTaW5nZXJTZXNzaW9uPn0gTmV3IHNpZ25lciBzZXNzaW9uIG1hbmFnZXJcbiAgICovXG4gIHN0YXRpYyBhc3luYyBsb2FkRnJvbVN0b3JhZ2Uoc3RvcmFnZTogU2lnbmVyU2Vzc2lvblN0b3JhZ2UpOiBQcm9taXNlPFNpZ25lclNlc3Npb25NYW5hZ2VyPiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHN0b3JhZ2UucmV0cmlldmUoKTtcbiAgICByZXR1cm4gbmV3IFNpZ25lclNlc3Npb25NYW5hZ2VyKHNlc3Npb24sIHN0b3JhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge1NpZ25lclNlc3Npb25EYXRhfSBzZXNzaW9uRGF0YSBTZXNzaW9uIGRhdGFcbiAgICogQHBhcmFtIHtTaWduZXJTZXNzaW9uU3RvcmFnZX0gc3RvcmFnZSBUaGUgc2Vzc2lvbiBzdG9yYWdlIHRvIHVzZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNlc3Npb25EYXRhOiBTaWduZXJTZXNzaW9uRGF0YSwgc3RvcmFnZTogU2lnbmVyU2Vzc2lvblN0b3JhZ2UpIHtcbiAgICB0aGlzLmVudiA9IHNlc3Npb25EYXRhLmVudltcIkRldi1DdWJlU2lnbmVyU3RhY2tcIl07XG4gICAgdGhpcy5vcmdJZCA9IHNlc3Npb25EYXRhLm9yZ19pZDtcbiAgICB0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlO1xuICAgIHRoaXMuI2V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoW3RoaXMuZXZlbnRzXSk7XG4gICAgdGhpcy4jY2xpZW50ID0ge1xuICAgICAgY2xpZW50OiB0aGlzLiNjcmVhdGVDbGllbnQoc2Vzc2lvbkRhdGEudG9rZW4pLFxuICAgICAgdG9rZW5fZXhwOiBzZWNvbmRzU2luY2VFcG9jaFRvRGF0ZShzZXNzaW9uRGF0YS5zZXNzaW9uX2luZm8uYXV0aF90b2tlbl9leHApLFxuICAgICAgc2Vzc2lvbl9leHA6IHNlc3Npb25EYXRhLnNlc3Npb25fZXhwXG4gICAgICAgID8gc2Vjb25kc1NpbmNlRXBvY2hUb0RhdGUoc2Vzc2lvbkRhdGEuc2Vzc2lvbl9leHApXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBSRVNUIGNsaWVudCB3aXRoIGEgZ2l2ZW4gdG9rZW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuIFRoZSBhdXRob3JpemF0aW9uIHRva2VuIHRvIHVzZSBmb3IgdGhlIGNsaWVudFxuICAgKiBAcmV0dXJuIHtDbGllbnR9IFRoZSBuZXcgUkVTVCBjbGllbnRcbiAgICovXG4gICNjcmVhdGVDbGllbnQodG9rZW46IHN0cmluZyk6IENsaWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUh0dHBDbGllbnQodGhpcy5lbnYuU2lnbmVyQXBpUm9vdCwgdG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGltZXN0YW1wIGlzIHdpdGhpbiB7QGxpbmsgYnVmZmVyU2Vjb25kc30gc2Vjb25kcyBmcm9tIGV4cGlyYXRpb24uXG4gICAqIEBwYXJhbSB7RGF0ZX0gZXhwIFRoZSB0aW1lc3RhbXAgdG8gY2hlY2tcbiAgICogQHBhcmFtIHtudW1iZXJ9IGJ1ZmZlclNlY29uZHMgVGltZSBidWZmZXIgaW4gc2Vjb25kcyAoZGVmYXVsdHMgdG8gMHMpXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRpbWVzdGFtcCBoYXMgZXhwaXJlZFxuICAgKi9cbiAgc3RhdGljICNoYXNUaW1lc3RhbXBFeHBpcmVkKGV4cDogRGF0ZSwgYnVmZmVyU2Vjb25kcz86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGJ1ZmZlclNlY29uZHMgPz89IDA7XG4gICAgY29uc3QgZXhwTXNTaW5jZUVwb2NoID0gZXhwLmdldFRpbWUoKTtcbiAgICBjb25zdCBub3dNc1NpbmNlRXBvY2ggPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCBidWZmZXJNcyA9IGJ1ZmZlclNlY29uZHMgKiAxMDAwO1xuICAgIHJldHVybiBleHBNc1NpbmNlRXBvY2ggPCBub3dNc1NpbmNlRXBvY2ggKyBidWZmZXJNcztcbiAgfVxufVxuXG4vKiogVHlwZSBvZiB0aGUgcmVmcmVzaCB0aW1lciBJRC4gKi9cbmV4cG9ydCB0eXBlIFJlZnJlc2hJZCA9IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPjtcbiJdfQ==
|
package/dist/src/util.d.ts
CHANGED
|
@@ -4,6 +4,13 @@ export interface JsonMap {
|
|
|
4
4
|
}
|
|
5
5
|
/** JSON array type */
|
|
6
6
|
export type JsonArray = Array<string | number | boolean | null | JsonArray | JsonMap>;
|
|
7
|
+
/**
|
|
8
|
+
* Path join
|
|
9
|
+
* @param {string} dir Parent directory
|
|
10
|
+
* @param {string} file Pathname
|
|
11
|
+
* @return {string} New pathname
|
|
12
|
+
*/
|
|
13
|
+
export declare function pathJoin(dir: string, file: string): string;
|
|
7
14
|
/**
|
|
8
15
|
* Directory where CubeSigner stores config files.
|
|
9
16
|
* @return {string} Config dir
|
|
@@ -45,3 +52,10 @@ export declare function encodeToBase64Url(buffer: Iterable<number>): string;
|
|
|
45
52
|
* @return {Promise<void>} A promise that is resolved after `ms` milliseconds.
|
|
46
53
|
*/
|
|
47
54
|
export declare function delay(ms: number): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Converts a string or a uint8 array into a hex string. Strings are encoded in UTF-8 before
|
|
57
|
+
* being converted to hex.
|
|
58
|
+
* @param {string | Uint8Array} message The input
|
|
59
|
+
* @return {string} Hex string prefixed with "0x"
|
|
60
|
+
*/
|
|
61
|
+
export declare function encodeToHex(message: string | Uint8Array): string;
|
package/dist/src/util.js
CHANGED
|
@@ -1,30 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.delay = exports.encodeToBase64Url = exports.encodeToBase64 = exports.decodeBase64Url = exports.decodeBase64 = exports.configDir = void 0;
|
|
27
|
-
|
|
3
|
+
exports.encodeToHex = exports.delay = exports.encodeToBase64Url = exports.encodeToBase64 = exports.decodeBase64Url = exports.decodeBase64 = exports.configDir = exports.pathJoin = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Path join
|
|
6
|
+
* @param {string} dir Parent directory
|
|
7
|
+
* @param {string} file Pathname
|
|
8
|
+
* @return {string} New pathname
|
|
9
|
+
*/
|
|
10
|
+
function pathJoin(dir, file) {
|
|
11
|
+
const sep = globalThis?.process?.platform === "win32" ? "\\" : "/";
|
|
12
|
+
return `${dir}${sep}${file}`;
|
|
13
|
+
}
|
|
14
|
+
exports.pathJoin = pathJoin;
|
|
28
15
|
/**
|
|
29
16
|
* Directory where CubeSigner stores config files.
|
|
30
17
|
* @return {string} Config dir
|
|
@@ -33,7 +20,7 @@ function configDir() {
|
|
|
33
20
|
const configDir = process.platform === "darwin"
|
|
34
21
|
? `${process.env.HOME}/Library/Application Support`
|
|
35
22
|
: `${process.env.HOME}/.config`;
|
|
36
|
-
return
|
|
23
|
+
return pathJoin(configDir, "cubesigner");
|
|
37
24
|
}
|
|
38
25
|
exports.configDir = configDir;
|
|
39
26
|
/**
|
|
@@ -97,4 +84,14 @@ function delay(ms) {
|
|
|
97
84
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
98
85
|
}
|
|
99
86
|
exports.delay = delay;
|
|
100
|
-
|
|
87
|
+
/**
|
|
88
|
+
* Converts a string or a uint8 array into a hex string. Strings are encoded in UTF-8 before
|
|
89
|
+
* being converted to hex.
|
|
90
|
+
* @param {string | Uint8Array} message The input
|
|
91
|
+
* @return {string} Hex string prefixed with "0x"
|
|
92
|
+
*/
|
|
93
|
+
function encodeToHex(message) {
|
|
94
|
+
return ("0x" + (typeof message === "string" ? Buffer.from(message, "utf8") : message).toString("hex"));
|
|
95
|
+
}
|
|
96
|
+
exports.encodeToHex = encodeToHex;
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBOzs7OztHQUtHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEdBQVcsRUFBRSxJQUFZO0lBQ2hELE1BQU0sR0FBRyxHQUFHLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDbkUsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDL0IsQ0FBQztBQUhELDRCQUdDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsU0FBUztJQUN2QixNQUFNLFNBQVMsR0FDYixPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVE7UUFDM0IsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLDhCQUE4QjtRQUNuRCxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDO0lBQ3BDLE9BQU8sUUFBUSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBTkQsOEJBTUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxHQUFXO0lBQ3RDLE9BQU8sT0FBTyxNQUFNLEtBQUssVUFBVTtRQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFKRCxvQ0FJQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE1BQWM7SUFDNUMsb0dBQW9HO0lBQ3BHLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBSkQsMENBSUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixjQUFjLENBQUMsTUFBd0I7SUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsTUFBTSxHQUFHLEdBQ1AsT0FBTyxNQUFNLEtBQUssVUFBVTtRQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUEQsd0NBT0M7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE1BQXdCO0lBQ3hELE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxvR0FBb0c7SUFDcEcsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUpELDhDQUlDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixLQUFLLENBQUMsRUFBVTtJQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUZELHNCQUVDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixXQUFXLENBQUMsT0FBNEI7SUFDdEQsT0FBTyxDQUNMLElBQUksR0FBRyxDQUFDLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDOUYsQ0FBQztBQUNKLENBQUM7QUFKRCxrQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBKU09OIG1hcCB0eXBlICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25NYXAge1xuICBbbWVtYmVyOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IEpzb25BcnJheSB8IEpzb25NYXA7XG59XG5cbi8qKiBKU09OIGFycmF5IHR5cGUgKi9cbmV4cG9ydCB0eXBlIEpzb25BcnJheSA9IEFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgSnNvbkFycmF5IHwgSnNvbk1hcD47XG5cbi8qKlxuICogUGF0aCBqb2luXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyIFBhcmVudCBkaXJlY3RvcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlIFBhdGhuYW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5ldyBwYXRobmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aEpvaW4oZGlyOiBzdHJpbmcsIGZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlcCA9IGdsb2JhbFRoaXM/LnByb2Nlc3M/LnBsYXRmb3JtID09PSBcIndpbjMyXCIgPyBcIlxcXFxcIiA6IFwiL1wiO1xuICByZXR1cm4gYCR7ZGlyfSR7c2VwfSR7ZmlsZX1gO1xufVxuXG4vKipcbiAqIERpcmVjdG9yeSB3aGVyZSBDdWJlU2lnbmVyIHN0b3JlcyBjb25maWcgZmlsZXMuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbmZpZyBkaXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ0RpcigpOiBzdHJpbmcge1xuICBjb25zdCBjb25maWdEaXIgPVxuICAgIHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCJcbiAgICAgID8gYCR7cHJvY2Vzcy5lbnYuSE9NRX0vTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0YFxuICAgICAgOiBgJHtwcm9jZXNzLmVudi5IT01FfS8uY29uZmlnYDtcbiAgcmV0dXJuIHBhdGhKb2luKGNvbmZpZ0RpciwgXCJjdWJlc2lnbmVyXCIpO1xufVxuXG4vKipcbiAqIEJyb3dzZXItZnJpZW5kbHkgaGVscGVyIGZvciBkZWNvZGluZyBhICdiYXNlNjQnLWVuY29kZWQgc3RyaW5nIGludG8gYSBieXRlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiNjQgVGhlICdiYXNlNjQnLWVuY29kZWQgc3RyaW5nIHRvIGRlY29kZVxuICogQHJldHVybiB7VWludDhBcnJheX0gRGVjb2RlZCBieXRlIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVCYXNlNjQoYjY0OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIHR5cGVvZiBCdWZmZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgID8gQnVmZmVyLmZyb20oYjY0LCBcImJhc2U2NFwiKVxuICAgIDogVWludDhBcnJheS5mcm9tKGF0b2IoYjY0KSwgKGMpID0+IGMuY2hhckNvZGVBdCgwKSk7XG59XG5cbi8qKlxuICogQnJvd3Nlci1mcmllbmRseSBoZWxwZXIgZm9yIGRlY29kaW5nIGEgJ2Jhc2U2NHVybCctZW5jb2RlZCBzdHJpbmcgaW50byBhIGJ5dGUgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGI2NHVybCBUaGUgJ2Jhc2U2NHVybCctZW5jb2RlZCBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAcmV0dXJuIHtVaW50OEFycmF5fSBEZWNvZGVkIGJ5dGUgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUJhc2U2NFVybChiNjR1cmw6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAvLyBOT1RFOiB0aGVyZSBpcyBubyBcImJhc2U2NHVybFwiIGVuY29kaW5nIGluIHRoZSBcImJ1ZmZlclwiIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgKHVubGlrZSBpbiBub2RlLmpzKVxuICBjb25zdCBiNjQgPSBiNjR1cmwucmVwbGFjZSgvLS9nLCBcIitcIikucmVwbGFjZSgvXy9nLCBcIi9cIikucmVwbGFjZSgvPSokL2csIFwiXCIpO1xuICByZXR1cm4gZGVjb2RlQmFzZTY0KGI2NCk7XG59XG5cbi8qKlxuICpcbiAqIEJyb3dzZXItZnJpZW5kbHkgaGVscGVyIGZvciBlbmNvZGluZyBhIGJ5dGUgYXJyYXkgaW50byBhIHBhZGRlZCBgYmFzZTY0YC1lbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0l0ZXJhYmxlPG51bWJlcj59IGJ1ZmZlciBUaGUgYnl0ZSBhcnJheSB0byBlbmNvZGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlICdiYXNlNjQnIGVuY29kaW5nIG9mIHRoZSBieXRlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVG9CYXNlNjQoYnVmZmVyOiBJdGVyYWJsZTxudW1iZXI+KTogc3RyaW5nIHtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICBjb25zdCBiNjQgPVxuICAgIHR5cGVvZiBCdWZmZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBCdWZmZXIuZnJvbShieXRlcykudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgICAgIDogYnRvYShieXRlcy5yZWR1Y2UoKHMsIGIpID0+IHMgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpLCBcIlwiKSk7XG4gIHJldHVybiBiNjQ7XG59XG5cbi8qKlxuICogQnJvd3Nlci1mcmllbmRseSBoZWxwZXIgZm9yIGVuY29kaW5nIGEgYnl0ZSBhcnJheSBpbnRvIGEgJ2Jhc2U2NHVybGAtZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtJdGVyYWJsZTxudW1iZXI+fSBidWZmZXIgVGhlIGJ5dGUgYXJyYXkgdG8gZW5jb2RlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSAnYmFzZTY0dXJsJyBlbmNvZGluZyBvZiB0aGUgYnl0ZSBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVRvQmFzZTY0VXJsKGJ1ZmZlcjogSXRlcmFibGU8bnVtYmVyPik6IHN0cmluZyB7XG4gIGNvbnN0IGI2NCA9IGVuY29kZVRvQmFzZTY0KGJ1ZmZlcik7XG4gIC8vIE5PVEU6IHRoZXJlIGlzIG5vIFwiYmFzZTY0dXJsXCIgZW5jb2RpbmcgaW4gdGhlIFwiYnVmZmVyXCIgbW9kdWxlIGZvciB0aGUgYnJvd3NlciAodW5saWtlIGluIG5vZGUuanMpXG4gIHJldHVybiBiNjQucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0qJC9nLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBTbGVlcHMgZm9yIGBtc2AgbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBtcyBNaWxsaXNlY29uZHMgdG8gc2xlZXBcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGFmdGVyIGBtc2AgbWlsbGlzZWNvbmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBvciBhIHVpbnQ4IGFycmF5IGludG8gYSBoZXggc3RyaW5nLiBTdHJpbmdzIGFyZSBlbmNvZGVkIGluIFVURi04IGJlZm9yZVxuICogYmVpbmcgY29udmVydGVkIHRvIGhleC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gbWVzc2FnZSBUaGUgaW5wdXRcbiAqIEByZXR1cm4ge3N0cmluZ30gSGV4IHN0cmluZyBwcmVmaXhlZCB3aXRoIFwiMHhcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVG9IZXgobWVzc2FnZTogc3RyaW5nIHwgVWludDhBcnJheSk6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgXCIweFwiICsgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmZyb20obWVzc2FnZSwgXCJ1dGY4XCIpIDogbWVzc2FnZSkudG9TdHJpbmcoXCJoZXhcIilcbiAgKTtcbn1cbiJdfQ==
|