@0xpolygonid/js-sdk 1.10.0 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/browser/esm/index.js +194 -11
  2. package/dist/browser/esm/index.js.map +1 -1
  3. package/dist/browser/umd/index.js +196 -10
  4. package/dist/browser/umd/index.js.map +1 -1
  5. package/dist/node/cjs/iden3comm/constants.js +5 -1
  6. package/dist/node/cjs/iden3comm/handlers/credential-proposal.js +213 -0
  7. package/dist/node/cjs/iden3comm/handlers/index.js +1 -0
  8. package/dist/node/cjs/iden3comm/types/index.js +1 -0
  9. package/dist/node/cjs/iden3comm/types/protocol/proposal-request.js +2 -0
  10. package/dist/node/cjs/proof/proof-service.js +2 -1
  11. package/dist/node/cjs/proof/verifiers/pub-signals-verifier.js +5 -6
  12. package/dist/node/cjs/storage/blockchain/state.js +2 -2
  13. package/dist/node/esm/iden3comm/constants.js +5 -1
  14. package/dist/node/esm/iden3comm/handlers/credential-proposal.js +184 -0
  15. package/dist/node/esm/iden3comm/handlers/index.js +1 -0
  16. package/dist/node/esm/iden3comm/types/index.js +1 -0
  17. package/dist/node/esm/iden3comm/types/protocol/proposal-request.js +1 -0
  18. package/dist/node/esm/proof/proof-service.js +2 -1
  19. package/dist/node/esm/proof/verifiers/pub-signals-verifier.js +5 -6
  20. package/dist/node/esm/storage/blockchain/state.js +2 -2
  21. package/dist/types/iden3comm/constants.d.ts +2 -0
  22. package/dist/types/iden3comm/handlers/credential-proposal.d.ts +112 -0
  23. package/dist/types/iden3comm/handlers/index.d.ts +1 -0
  24. package/dist/types/iden3comm/types/index.d.ts +1 -0
  25. package/dist/types/iden3comm/types/protocol/proposal-request.d.ts +35 -0
  26. package/dist/types/proof/proof-service.d.ts +1 -1
  27. package/dist/types/storage/blockchain/state.d.ts +1 -1
  28. package/dist/types/storage/interfaces/state.d.ts +5 -4
  29. package/package.json +1 -1
@@ -60795,9 +60795,9 @@ var PolygonIdSdk = (function (exports) {
60795
60795
  };
60796
60796
  }
60797
60797
  /** {@inheritdoc IStateStorage.getGISTRootInfo} */
60798
- async getGISTRootInfo(id) {
60798
+ async getGISTRootInfo(root, id) {
60799
60799
  const { stateContract } = this.getStateContractAndProviderForId(id);
60800
- const data = await stateContract.getGISTRootInfo(id);
60800
+ const data = await stateContract.getGISTRootInfo(root);
60801
60801
  return {
60802
60802
  root: BigInt(data.root.toString()),
60803
60803
  replacedByRoot: BigInt(data.replacedByRoot.toString()),
@@ -63028,7 +63028,11 @@ var PolygonIdSdk = (function (exports) {
63028
63028
  // ContractInvokeRequestMessageType is type for request of contract invoke request
63029
63029
  CONTRACT_INVOKE_REQUEST_MESSAGE_TYPE: IDEN3_PROTOCOL + 'proofs/1.0/contract-invoke-request',
63030
63030
  // CredentialOnchainOfferMessageType is type of message with credential onchain offering
63031
- CREDENTIAL_ONCHAIN_OFFER_MESSAGE_TYPE: IDEN3_PROTOCOL + 'credentials/1.0/onchain-offer'
63031
+ CREDENTIAL_ONCHAIN_OFFER_MESSAGE_TYPE: IDEN3_PROTOCOL + 'credentials/1.0/onchain-offer',
63032
+ // ProposalRequestMessageType is type for proposal-request message
63033
+ PROPOSAL_REQUEST_MESSAGE_TYPE: IDEN3_PROTOCOL + 'credentials/0.1/proposal-request',
63034
+ // ProposalMessageType is type for proposal message
63035
+ PROPOSAL_MESSAGE_TYPE: IDEN3_PROTOCOL + 'credentials/0.1/proposal'
63032
63036
  });
63033
63037
  /**
63034
63038
  * Media types for iden3 comm communication protocol
@@ -86157,7 +86161,7 @@ var PolygonIdSdk = (function (exports) {
86157
86161
  this.challenge = authV2PubSignals.challenge;
86158
86162
  // no query verification
86159
86163
  // verify state
86160
- const gist = await this.checkGlobalState(authV2PubSignals.GISTRoot);
86164
+ const gist = await this.checkGlobalState(authV2PubSignals.GISTRoot, this.userId);
86161
86165
  let acceptedStateTransitionDelay = defaultAuthVerifyOpts;
86162
86166
  if (opts?.acceptedStateTransitionDelay) {
86163
86167
  acceptedStateTransitionDelay = opts.acceptedStateTransitionDelay;
@@ -86239,9 +86243,8 @@ var PolygonIdSdk = (function (exports) {
86239
86243
  throw userStateError;
86240
86244
  }
86241
86245
  };
86242
- this.checkGlobalState = async (state) => {
86243
- const gistStateResolved = await this.rootResolve(state.bigInt());
86244
- return gistStateResolved;
86246
+ this.checkGlobalState = async (state, id) => {
86247
+ return this.rootResolve(state.bigInt(), id.bigInt());
86245
86248
  };
86246
86249
  this.checkRevocationStateForId = async (issuerId, issuerClaimNonRevState) => {
86247
86250
  const issuerNonRevStateResolved = await this.resolve(issuerId, issuerClaimNonRevState.bigInt());
@@ -86357,10 +86360,10 @@ var PolygonIdSdk = (function (exports) {
86357
86360
  }
86358
86361
  return { latest: true, transitionTimestamp: 0 };
86359
86362
  }
86360
- async rootResolve(state) {
86363
+ async rootResolve(state, id) {
86361
86364
  let globalStateInfo;
86362
86365
  try {
86363
- globalStateInfo = await this._stateStorage.getGISTRootInfo(state);
86366
+ globalStateInfo = await this._stateStorage.getGISTRootInfo(state, id);
86364
86367
  }
86365
86368
  catch (e) {
86366
86369
  if (e.errorArgs[0] === 'Root does not exist') {
@@ -86629,7 +86632,8 @@ var PolygonIdSdk = (function (exports) {
86629
86632
  throw new Error(`CircuitId is not supported ${circuitId}`);
86630
86633
  }
86631
86634
  const gistRoot = V$1.fromString(pubSignals[2]).bigInt();
86632
- const globalStateInfo = await this._stateStorage.getGISTRootInfo(gistRoot);
86635
+ const userId = BigInt(pubSignals[0]);
86636
+ const globalStateInfo = await this._stateStorage.getGISTRootInfo(gistRoot, userId);
86633
86637
  if (globalStateInfo.createdAtTimestamp === 0n) {
86634
86638
  throw new Error(`gist state doesn't exists in contract`);
86635
86639
  }
@@ -87894,6 +87898,185 @@ var PolygonIdSdk = (function (exports) {
87894
87898
  }
87895
87899
  }
87896
87900
 
87901
+ /**
87902
+ * @beta
87903
+ * createProposalRequest is a function to create protocol proposal-request protocol message
87904
+ * @param {DID} sender - sender did
87905
+ * @param {DID} receiver - receiver did
87906
+ * @param {ProposalRequestCreationOptions} opts - creation options
87907
+ * @returns `Promise<ProposalRequestMessage>`
87908
+ */
87909
+ function createProposalRequest(sender, receiver, opts) {
87910
+ const uuidv4 = v4();
87911
+ const request = {
87912
+ id: uuidv4,
87913
+ thid: uuidv4,
87914
+ from: sender.string(),
87915
+ to: receiver.string(),
87916
+ typ: MediaType.PlainMessage,
87917
+ type: PROTOCOL_MESSAGE_TYPE.PROPOSAL_REQUEST_MESSAGE_TYPE,
87918
+ body: opts
87919
+ };
87920
+ return request;
87921
+ }
87922
+ /**
87923
+ * @beta
87924
+ * createProposal is a function to create protocol proposal protocol message
87925
+ * @param {DID} sender - sender did
87926
+ * @param {DID} receiver - receiver did
87927
+ * @param {Proposal[]} proposals - proposals
87928
+ * @returns `Promise<ProposalRequestMessage>`
87929
+ */
87930
+ function createProposal(sender, receiver, proposals) {
87931
+ const uuidv4 = v4();
87932
+ const request = {
87933
+ id: uuidv4,
87934
+ thid: uuidv4,
87935
+ from: sender.string(),
87936
+ to: receiver.string(),
87937
+ typ: MediaType.PlainMessage,
87938
+ type: PROTOCOL_MESSAGE_TYPE.PROPOSAL_MESSAGE_TYPE,
87939
+ body: {
87940
+ proposals: proposals || []
87941
+ }
87942
+ };
87943
+ return request;
87944
+ }
87945
+ /**
87946
+ *
87947
+ * Allows to process ProposalRequest protocol message
87948
+ * @beta
87949
+ * @class CredentialProposalHandler
87950
+ * @implements implements ICredentialProposalHandler interface
87951
+ */
87952
+ class CredentialProposalHandler {
87953
+ /**
87954
+ * @beta Creates an instance of CredentialProposalHandler.
87955
+ * @param {IPackageManager} _packerMgr - package manager to unpack message envelope
87956
+ * @param {IIdentityWallet} _identityWallet - identity wallet
87957
+ * @param {CredentialProposalHandlerParams} _params - credential proposal handler params
87958
+ *
87959
+ */
87960
+ constructor(_packerMgr, _identityWallet, _params) {
87961
+ this._packerMgr = _packerMgr;
87962
+ this._identityWallet = _identityWallet;
87963
+ this._params = _params;
87964
+ }
87965
+ /**
87966
+ * @inheritdoc ICredentialProposalHandler#parseProposalRequest
87967
+ */
87968
+ async parseProposalRequest(request) {
87969
+ const { unpackedMessage: message } = await this._packerMgr.unpack(request);
87970
+ const proposalRequest = message;
87971
+ if (message.type !== PROTOCOL_MESSAGE_TYPE.PROPOSAL_REQUEST_MESSAGE_TYPE) {
87972
+ throw new Error('Invalid media type');
87973
+ }
87974
+ return proposalRequest;
87975
+ }
87976
+ /**
87977
+ * @inheritdoc ICredentialProposalHandler#handleProposalRequest
87978
+ */
87979
+ async handleProposalRequest(request,
87980
+ //eslint-disable-next-line @typescript-eslint/no-unused-vars
87981
+ opts) {
87982
+ if (this._params.packerParams.mediaType === MediaType.SignedMessage &&
87983
+ !this._params.packerParams.packerOptions) {
87984
+ throw new Error(`jws packer options are required for ${MediaType.SignedMessage}`);
87985
+ }
87986
+ const proposalRequest = await this.parseProposalRequest(request);
87987
+ if (!proposalRequest.to) {
87988
+ throw new Error(`failed request. empty 'to' field`);
87989
+ }
87990
+ if (!proposalRequest.from) {
87991
+ throw new Error(`failed request. empty 'from' field`);
87992
+ }
87993
+ if (!proposalRequest.body?.credentials?.length) {
87994
+ throw new Error(`failed request. no 'credentials' in body`);
87995
+ }
87996
+ const senderDID = Z$2.parse(proposalRequest.from);
87997
+ let credOfferMessage = undefined;
87998
+ let proposalMessage = undefined;
87999
+ for (let i = 0; i < proposalRequest.body.credentials.length; i++) {
88000
+ const cred = proposalRequest.body.credentials[i];
88001
+ // check if there is credentials in the wallet
88002
+ let credsFromWallet = [];
88003
+ try {
88004
+ credsFromWallet = await this._identityWallet.findOwnedCredentialsByDID(senderDID, {
88005
+ type: cred.type,
88006
+ context: cred.context
88007
+ });
88008
+ }
88009
+ catch (e) {
88010
+ if (e.message !== 'no credential satisfied query') {
88011
+ throw e;
88012
+ }
88013
+ }
88014
+ if (credsFromWallet.length) {
88015
+ const guid = v4();
88016
+ if (!credOfferMessage) {
88017
+ credOfferMessage = {
88018
+ id: guid,
88019
+ typ: this._params.packerParams.mediaType,
88020
+ type: PROTOCOL_MESSAGE_TYPE.CREDENTIAL_OFFER_MESSAGE_TYPE,
88021
+ thid: proposalRequest.thid ?? guid,
88022
+ body: {
88023
+ url: this._params.agentUrl,
88024
+ credentials: []
88025
+ },
88026
+ from: proposalRequest.to,
88027
+ to: proposalRequest.from
88028
+ };
88029
+ }
88030
+ credOfferMessage.body.credentials.push(...credsFromWallet.map((c) => ({
88031
+ id: c.id,
88032
+ description: ''
88033
+ })));
88034
+ continue;
88035
+ }
88036
+ // credential not found in the wallet, prepare proposal protocol message
88037
+ const proposal = await this._params.proposalResolverFn(cred.context, cred.type);
88038
+ if (!proposal) {
88039
+ throw new Error(`can't resolve Proposal for type: ${cred.type}, context: ${cred.context}`);
88040
+ }
88041
+ if (!proposalMessage) {
88042
+ const guid = v4();
88043
+ proposalMessage = {
88044
+ id: guid,
88045
+ typ: this._params.packerParams.mediaType,
88046
+ type: PROTOCOL_MESSAGE_TYPE.PROPOSAL_MESSAGE_TYPE,
88047
+ thid: proposalRequest.thid ?? guid,
88048
+ body: {
88049
+ proposals: []
88050
+ },
88051
+ from: proposalRequest.to,
88052
+ to: proposalRequest.from
88053
+ };
88054
+ }
88055
+ proposalMessage.body?.proposals.push(proposal);
88056
+ }
88057
+ // if there is credentials in the wallet, return offer protocol message, otherwise proposal
88058
+ const response = byteEncoder.encode(JSON.stringify(proposalMessage ?? credOfferMessage));
88059
+ const packerOpts = this._params.packerParams.mediaType === MediaType.SignedMessage
88060
+ ? this._params.packerParams.packerOptions
88061
+ : {
88062
+ provingMethodAlg: T.provingMethodGroth16AuthV2Instance.methodAlg
88063
+ };
88064
+ return this._packerMgr.pack(this._params.packerParams.mediaType, response, {
88065
+ senderDID,
88066
+ ...packerOpts
88067
+ });
88068
+ }
88069
+ /**
88070
+ * @inheritdoc ICredentialProposalHandler#handleProposal
88071
+ */
88072
+ async handleProposal(proposal, opts) {
88073
+ if (opts?.proposalRequest && opts.proposalRequest.from !== proposal.to) {
88074
+ throw new Error(`sender of the request is not a target of response - expected ${opts.proposalRequest.from}, given ${proposal.to}`);
88075
+ }
88076
+ return { proposal };
88077
+ }
88078
+ }
88079
+
87897
88080
  exports.AbstractPrivateKeyStore = AbstractPrivateKeyStore;
87898
88081
  exports.AgentResolver = AgentResolver;
87899
88082
  exports.AtomicQueryMTPV2Inputs = AtomicQueryMTPV2Inputs;
@@ -87919,6 +88102,7 @@ var PolygonIdSdk = (function (exports) {
87919
88102
  exports.CircuitClaim = CircuitClaim;
87920
88103
  exports.CircuitStorage = CircuitStorage;
87921
88104
  exports.ContractRequestHandler = ContractRequestHandler;
88105
+ exports.CredentialProposalHandler = CredentialProposalHandler;
87922
88106
  exports.CredentialStatusPublisherRegistry = CredentialStatusPublisherRegistry;
87923
88107
  exports.CredentialStatusResolverRegistry = CredentialStatusResolverRegistry;
87924
88108
  exports.CredentialStorage = CredentialStorage;
@@ -88018,6 +88202,8 @@ var PolygonIdSdk = (function (exports) {
88018
88202
  exports.core = index$1;
88019
88203
  exports.createAuthorizationRequest = createAuthorizationRequest;
88020
88204
  exports.createAuthorizationRequestWithMessage = createAuthorizationRequestWithMessage;
88205
+ exports.createProposal = createProposal;
88206
+ exports.createProposalRequest = createProposalRequest;
88021
88207
  exports.createSchemaHash = createSchemaHash;
88022
88208
  exports.createVerifiablePresentation = createVerifiablePresentation;
88023
88209
  exports.credentialSubjectKey = credentialSubjectKey;