matrix-js-sdk 37.2.0 → 37.3.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/git-revision.txt +1 -1
  2. package/lib/client.d.ts +8 -2
  3. package/lib/client.d.ts.map +1 -1
  4. package/lib/client.js +11 -3
  5. package/lib/client.js.map +1 -1
  6. package/lib/common-crypto/CryptoBackend.d.ts +8 -0
  7. package/lib/common-crypto/CryptoBackend.d.ts.map +1 -1
  8. package/lib/common-crypto/CryptoBackend.js.map +1 -1
  9. package/lib/http-api/errors.d.ts +8 -0
  10. package/lib/http-api/errors.d.ts.map +1 -1
  11. package/lib/http-api/errors.js +14 -0
  12. package/lib/http-api/errors.js.map +1 -1
  13. package/lib/http-api/fetch.d.ts.map +1 -1
  14. package/lib/http-api/fetch.js +3 -3
  15. package/lib/http-api/fetch.js.map +1 -1
  16. package/lib/matrixrtc/LegacyMembershipManager.d.ts +9 -1
  17. package/lib/matrixrtc/LegacyMembershipManager.d.ts.map +1 -1
  18. package/lib/matrixrtc/LegacyMembershipManager.js +20 -0
  19. package/lib/matrixrtc/LegacyMembershipManager.js.map +1 -1
  20. package/lib/matrixrtc/MatrixRTCSession.d.ts.map +1 -1
  21. package/lib/matrixrtc/MatrixRTCSession.js.map +1 -1
  22. package/lib/matrixrtc/NewMembershipManager.d.ts +7 -58
  23. package/lib/matrixrtc/NewMembershipManager.d.ts.map +1 -1
  24. package/lib/matrixrtc/NewMembershipManager.js +130 -137
  25. package/lib/matrixrtc/NewMembershipManager.js.map +1 -1
  26. package/lib/matrixrtc/NewMembershipManagerActionScheduler.js +3 -3
  27. package/lib/matrixrtc/NewMembershipManagerActionScheduler.js.map +1 -1
  28. package/lib/matrixrtc/index.d.ts +1 -0
  29. package/lib/matrixrtc/index.d.ts.map +1 -1
  30. package/lib/matrixrtc/index.js +1 -0
  31. package/lib/matrixrtc/index.js.map +1 -1
  32. package/lib/matrixrtc/types.d.ts +77 -1
  33. package/lib/matrixrtc/types.d.ts.map +1 -1
  34. package/lib/matrixrtc/types.js +40 -1
  35. package/lib/matrixrtc/types.js.map +1 -1
  36. package/lib/models/room-summary.d.ts +30 -0
  37. package/lib/models/room-summary.d.ts.map +1 -1
  38. package/lib/models/room-summary.js +11 -0
  39. package/lib/models/room-summary.js.map +1 -1
  40. package/lib/models/room.d.ts +37 -1
  41. package/lib/models/room.d.ts.map +1 -1
  42. package/lib/models/room.js +133 -28
  43. package/lib/models/room.js.map +1 -1
  44. package/lib/oidc/tokenRefresher.d.ts.map +1 -1
  45. package/lib/oidc/tokenRefresher.js +8 -1
  46. package/lib/oidc/tokenRefresher.js.map +1 -1
  47. package/lib/pushprocessor.d.ts +10 -1
  48. package/lib/pushprocessor.d.ts.map +1 -1
  49. package/lib/pushprocessor.js +24 -9
  50. package/lib/pushprocessor.js.map +1 -1
  51. package/lib/rust-crypto/OutgoingRequestProcessor.d.ts.map +1 -1
  52. package/lib/rust-crypto/OutgoingRequestProcessor.js +6 -1
  53. package/lib/rust-crypto/OutgoingRequestProcessor.js.map +1 -1
  54. package/lib/rust-crypto/rust-crypto.d.ts +4 -1
  55. package/lib/rust-crypto/rust-crypto.d.ts.map +1 -1
  56. package/lib/rust-crypto/rust-crypto.js +55 -46
  57. package/lib/rust-crypto/rust-crypto.js.map +1 -1
  58. package/lib/sliding-sync-sdk.d.ts.map +1 -1
  59. package/lib/sliding-sync-sdk.js +86 -75
  60. package/lib/sliding-sync-sdk.js.map +1 -1
  61. package/lib/sliding-sync.d.ts +23 -60
  62. package/lib/sliding-sync.d.ts.map +1 -1
  63. package/lib/sliding-sync.js +62 -321
  64. package/lib/sliding-sync.js.map +1 -1
  65. package/package.json +6 -6
  66. package/src/client.ts +12 -5
  67. package/src/common-crypto/CryptoBackend.ts +9 -0
  68. package/src/http-api/errors.ts +14 -0
  69. package/src/http-api/fetch.ts +3 -4
  70. package/src/matrixrtc/LegacyMembershipManager.ts +27 -1
  71. package/src/matrixrtc/MatrixRTCSession.ts +2 -1
  72. package/src/matrixrtc/NewMembershipManager.ts +120 -165
  73. package/src/matrixrtc/NewMembershipManagerActionScheduler.ts +3 -3
  74. package/src/matrixrtc/index.ts +1 -0
  75. package/src/matrixrtc/types.ts +84 -1
  76. package/src/models/room-summary.ts +31 -0
  77. package/src/models/room.ts +133 -23
  78. package/src/oidc/tokenRefresher.ts +8 -2
  79. package/src/pushprocessor.ts +25 -16
  80. package/src/rust-crypto/OutgoingRequestProcessor.ts +6 -0
  81. package/src/rust-crypto/rust-crypto.ts +7 -1
  82. package/src/sliding-sync-sdk.ts +28 -28
  83. package/src/sliding-sync.ts +38 -329
@@ -111,6 +111,14 @@ export interface SyncCryptoCallbacks {
111
111
  * @param syncState - information about the completed sync.
112
112
  */
113
113
  onSyncCompleted(syncState: OnSyncCompletedData): void;
114
+ /**
115
+ * Mark all tracked users' device lists as dirty.
116
+ *
117
+ * This method will cause additional `/keys/query` requests on the server, so should be used only
118
+ * when the client has desynced tracking device list deltas from the server.
119
+ * In MSC4186: Simplified Sliding Sync, this can happen when the server expires the connection.
120
+ */
121
+ markAllTrackedUsersAsDirty(): Promise<void>;
114
122
  }
115
123
  /**
116
124
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"CryptoBackend.d.ts","sourceRoot":"","sources":["../../src/common-crypto/CryptoBackend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CryptoBackend.d.ts","sourceRoot":"","sources":["../../src/common-crypto/CryptoBackend.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;GAIG;AACH,MAAM,WAAW,aAAc,SAAQ,mBAAmB,EAAE,SAAS;IACjE;;;;;;;;OAQG;IACH,2BAA2B,EAAE,OAAO,CAAC;IAErC;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;;;;;;;;OASG;IACH,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAEjE;;;;OAIG;IACH,kBAAkB,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE7F;;;;;;;OAOG;IACH,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvH;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;;;;;;;;;OAWG;IACH,0BAA0B,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAEhF;;;;;OAKG;IACH,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3G;;;;;OAKG;IACH,kBAAkB,CAAC,WAAW,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D;;;;;;OAMG;IACH,eAAe,CAAC,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAEtD;;;;;;OAMG;IACH,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC;;OAEG;IACH,UAAU,EAAE,WAAW,CAAC;IACxB;;;OAGG;IACH,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAEhC;;;;;;;OAOG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE9F;;;;OAIG;IACH,IAAI,IAAI,IAAI,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAIlB,IAAI,EAAE,qBAAqB;IAH/C,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAGnB,IAAI,EAAE,qBAAqB,EAC3C,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;CAM/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"CryptoBackend.js","names":["DecryptionError","Error","constructor","code","msg","details","_defineProperty","name","detailedString","detailedStringForDecryptionError","err","result","message","Object","keys","map","k","join"],"sources":["../../src/common-crypto/CryptoBackend.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport type { IDeviceLists, IToDeviceEvent } from \"../sync-accumulator.ts\";\nimport { type IClearEvent, type MatrixEvent } from \"../models/event.ts\";\nimport { type Room } from \"../models/room.ts\";\nimport { type CryptoApi, type DecryptionFailureCode, type ImportRoomKeysOpts } from \"../crypto-api/index.ts\";\nimport { type KeyBackupInfo, type KeyBackupSession } from \"../crypto-api/keybackup.ts\";\nimport { type IMegolmSessionData } from \"../@types/crypto.ts\";\n\n/**\n * Common interface for the crypto implementations\n *\n * @internal\n */\nexport interface CryptoBackend extends SyncCryptoCallbacks, CryptoApi {\n /**\n * Whether sendMessage in a room with unknown and unverified devices\n * should throw an error and not send the message. This has 'Global' for\n * symmetry with setGlobalBlacklistUnverifiedDevices but there is currently\n * no room-level equivalent for this setting.\n *\n * @remarks This has no effect in Rust Crypto; it exists only for the sake of\n * the accessors in MatrixClient.\n */\n globalErrorOnUnknownDevices: boolean;\n\n /**\n * Shut down any background processes related to crypto\n */\n stop(): void;\n\n /**\n * Encrypt an event according to the configuration of the room.\n *\n * @param event - event to be sent\n *\n * @param room - destination room.\n *\n * @returns Promise which resolves when the event has been\n * encrypted, or null if nothing was needed\n */\n encryptEvent(event: MatrixEvent, room: Room): Promise<void>;\n\n /**\n * Decrypt a received event\n *\n * @returns a promise which resolves once we have finished decrypting.\n * Rejects with an error if there is a problem decrypting the event.\n */\n decryptEvent(event: MatrixEvent): Promise<EventDecryptionResult>;\n\n /**\n * Get a backup decryptor capable of decrypting megolm session data encrypted with the given backup information.\n * @param backupInfo - The backup information\n * @param privKey - The private decryption key.\n */\n getBackupDecryptor(backupInfo: KeyBackupInfo, privKey: Uint8Array): Promise<BackupDecryptor>;\n\n /**\n * Import a list of room keys restored from backup\n *\n * @param keys - a list of session export objects\n * @param backupVersion - the version of the backup these keys came from.\n * @param opts - options object\n * @returns a promise which resolves once the keys have been imported\n */\n importBackedUpRoomKeys(keys: IMegolmSessionData[], backupVersion: string, opts?: ImportRoomKeysOpts): Promise<void>;\n}\n\n/** The methods which crypto implementations should expose to the Sync api\n *\n * @internal\n */\nexport interface SyncCryptoCallbacks {\n /**\n * Called by the /sync loop whenever there are incoming to-device messages.\n *\n * The implementation may preprocess the received messages (eg, decrypt them) and return an\n * updated list of messages for dispatch to the rest of the system.\n *\n * Note that, unlike {@link ClientEvent.ToDeviceEvent} events, this is called on the raw to-device\n * messages, rather than the results of any decryption attempts.\n *\n * @param events - the received to-device messages\n * @returns A list of preprocessed to-device messages.\n */\n preprocessToDeviceMessages(events: IToDeviceEvent[]): Promise<IToDeviceEvent[]>;\n\n /**\n * Called by the /sync loop when one time key counts and unused fallback key details are received.\n *\n * @param oneTimeKeysCounts - the received one time key counts\n * @param unusedFallbackKeys - the received unused fallback keys\n */\n processKeyCounts(oneTimeKeysCounts?: Record<string, number>, unusedFallbackKeys?: string[]): Promise<void>;\n\n /**\n * Handle the notification from /sync that device lists have\n * been changed.\n *\n * @param deviceLists - device_lists field from /sync\n */\n processDeviceLists(deviceLists: IDeviceLists): Promise<void>;\n\n /**\n * Called by the /sync loop whenever an m.room.encryption event is received.\n *\n * This is called before RoomStateEvents are emitted for any of the events in the /sync\n * response (even if the other events technically happened first). This works around a problem\n * if the client uses a RoomStateEvent (typically a membership event) as a trigger to send a message\n * in a new room (or one where encryption has been newly enabled): that would otherwise leave the\n * crypto layer confused because it expects crypto to be set up, but it has not yet been.\n *\n * @param room - in which the event was received\n * @param event - encryption event to be processed\n */\n onCryptoEvent(room: Room, event: MatrixEvent): Promise<void>;\n\n /**\n * Called by the /sync loop after each /sync response is processed.\n *\n * Used to complete batch processing, or to initiate background processes\n *\n * @param syncState - information about the completed sync.\n */\n onSyncCompleted(syncState: OnSyncCompletedData): void;\n}\n\n/**\n * @internal\n */\nexport interface OnSyncCompletedData {\n /**\n * The 'next_batch' result from /sync, which will become the 'since' token for the next call to /sync.\n */\n nextSyncToken?: string;\n\n /**\n * True if we are working our way through a backlog of events after connecting.\n */\n catchingUp?: boolean;\n}\n\n/**\n * The result of a (successful) call to {@link CryptoBackend.decryptEvent}\n */\nexport interface EventDecryptionResult {\n /**\n * The plaintext payload for the event (typically containing <tt>type</tt> and <tt>content</tt> fields).\n */\n clearEvent: IClearEvent;\n /**\n * List of curve25519 keys involved in telling us about the senderCurve25519Key and claimedEd25519Key.\n * See {@link MatrixEvent#getForwardingCurve25519KeyChain}.\n */\n forwardingCurve25519KeyChain?: string[];\n /**\n * Key owned by the sender of this event. See {@link MatrixEvent#getSenderKey}.\n */\n senderCurve25519Key?: string;\n /**\n * ed25519 key claimed by the sender of this event. See {@link MatrixEvent#getClaimedEd25519Key}.\n */\n claimedEd25519Key?: string;\n /**\n * Whether the keys for this event have been received via an unauthenticated source (eg via key forwards, or\n * restored from backup)\n */\n untrusted?: boolean;\n}\n\n/**\n * Responsible for decrypting megolm session data retrieved from a remote backup.\n * The result of {@link CryptoBackend#getBackupDecryptor}.\n */\nexport interface BackupDecryptor {\n /**\n * Whether keys retrieved from this backup can be trusted.\n *\n * Depending on the backup algorithm, keys retrieved from the backup can be trusted or not.\n * If false, keys retrieved from the backup must be considered unsafe (authenticity cannot be guaranteed).\n * It could be by design (deniability) or for some technical reason (eg asymmetric encryption).\n */\n readonly sourceTrusted: boolean;\n\n /**\n *\n * Decrypt megolm session data retrieved from backup.\n *\n * @param ciphertexts - a Record of sessionId to session data.\n *\n * @returns An array of decrypted `IMegolmSessionData`\n */\n decryptSessions(ciphertexts: Record<string, KeyBackupSession>): Promise<IMegolmSessionData[]>;\n\n /**\n * Free any resources held by this decryptor.\n *\n * Should be called once the decryptor is no longer needed.\n */\n free(): void;\n}\n\n/**\n * Exception thrown when decryption fails\n *\n * @param code - Reason code for the failure.\n *\n * @param msg - user-visible message describing the problem\n *\n * @param details - key/value pairs reported in the logs but not shown\n * to the user.\n */\nexport class DecryptionError extends Error {\n public readonly detailedString: string;\n\n public constructor(\n public readonly code: DecryptionFailureCode,\n msg: string,\n details?: Record<string, string | Error>,\n ) {\n super(msg);\n this.name = \"DecryptionError\";\n this.detailedString = detailedStringForDecryptionError(this, details);\n }\n}\n\nfunction detailedStringForDecryptionError(err: DecryptionError, details?: Record<string, string | Error>): string {\n let result = err.name + \"[msg: \" + err.message;\n\n if (details) {\n result +=\n \", \" +\n Object.keys(details)\n .map((k) => k + \": \" + details[k])\n .join(\", \");\n }\n\n result += \"]\";\n\n return result;\n}\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;;AAwDA;AACA;AACA;AACA;;AAwDA;AACA;AACA;;AAaA;AACA;AACA;;AA0BA;AACA;AACA;AACA;;AA6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,eAAe,SAASC,KAAK,CAAC;EAGhCC,WAAWA,CACEC,IAA2B,EAC3CC,GAAW,EACXC,OAAwC,EAC1C;IACE,KAAK,CAACD,GAAG,CAAC;IAAC,KAJKD,IAA2B,GAA3BA,IAA2B;IAAAG,eAAA;IAK3C,IAAI,CAACC,IAAI,GAAG,iBAAiB;IAC7B,IAAI,CAACC,cAAc,GAAGC,gCAAgC,CAAC,IAAI,EAAEJ,OAAO,CAAC;EACzE;AACJ;AAEA,SAASI,gCAAgCA,CAACC,GAAoB,EAAEL,OAAwC,EAAU;EAC9G,IAAIM,MAAM,GAAGD,GAAG,CAACH,IAAI,GAAG,QAAQ,GAAGG,GAAG,CAACE,OAAO;EAE9C,IAAIP,OAAO,EAAE;IACTM,MAAM,IACF,IAAI,GACJE,MAAM,CAACC,IAAI,CAACT,OAAO,CAAC,CACfU,GAAG,CAAEC,CAAC,IAAKA,CAAC,GAAG,IAAI,GAAGX,OAAO,CAACW,CAAC,CAAC,CAAC,CACjCC,IAAI,CAAC,IAAI,CAAC;EACvB;EAEAN,MAAM,IAAI,GAAG;EAEb,OAAOA,MAAM;AACjB","ignoreList":[]}
1
+ {"version":3,"file":"CryptoBackend.js","names":["DecryptionError","Error","constructor","code","msg","details","_defineProperty","name","detailedString","detailedStringForDecryptionError","err","result","message","Object","keys","map","k","join"],"sources":["../../src/common-crypto/CryptoBackend.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport type { IDeviceLists, IToDeviceEvent } from \"../sync-accumulator.ts\";\nimport { type IClearEvent, type MatrixEvent } from \"../models/event.ts\";\nimport { type Room } from \"../models/room.ts\";\nimport { type CryptoApi, type DecryptionFailureCode, type ImportRoomKeysOpts } from \"../crypto-api/index.ts\";\nimport { type KeyBackupInfo, type KeyBackupSession } from \"../crypto-api/keybackup.ts\";\nimport { type IMegolmSessionData } from \"../@types/crypto.ts\";\n\n/**\n * Common interface for the crypto implementations\n *\n * @internal\n */\nexport interface CryptoBackend extends SyncCryptoCallbacks, CryptoApi {\n /**\n * Whether sendMessage in a room with unknown and unverified devices\n * should throw an error and not send the message. This has 'Global' for\n * symmetry with setGlobalBlacklistUnverifiedDevices but there is currently\n * no room-level equivalent for this setting.\n *\n * @remarks This has no effect in Rust Crypto; it exists only for the sake of\n * the accessors in MatrixClient.\n */\n globalErrorOnUnknownDevices: boolean;\n\n /**\n * Shut down any background processes related to crypto\n */\n stop(): void;\n\n /**\n * Encrypt an event according to the configuration of the room.\n *\n * @param event - event to be sent\n *\n * @param room - destination room.\n *\n * @returns Promise which resolves when the event has been\n * encrypted, or null if nothing was needed\n */\n encryptEvent(event: MatrixEvent, room: Room): Promise<void>;\n\n /**\n * Decrypt a received event\n *\n * @returns a promise which resolves once we have finished decrypting.\n * Rejects with an error if there is a problem decrypting the event.\n */\n decryptEvent(event: MatrixEvent): Promise<EventDecryptionResult>;\n\n /**\n * Get a backup decryptor capable of decrypting megolm session data encrypted with the given backup information.\n * @param backupInfo - The backup information\n * @param privKey - The private decryption key.\n */\n getBackupDecryptor(backupInfo: KeyBackupInfo, privKey: Uint8Array): Promise<BackupDecryptor>;\n\n /**\n * Import a list of room keys restored from backup\n *\n * @param keys - a list of session export objects\n * @param backupVersion - the version of the backup these keys came from.\n * @param opts - options object\n * @returns a promise which resolves once the keys have been imported\n */\n importBackedUpRoomKeys(keys: IMegolmSessionData[], backupVersion: string, opts?: ImportRoomKeysOpts): Promise<void>;\n}\n\n/** The methods which crypto implementations should expose to the Sync api\n *\n * @internal\n */\nexport interface SyncCryptoCallbacks {\n /**\n * Called by the /sync loop whenever there are incoming to-device messages.\n *\n * The implementation may preprocess the received messages (eg, decrypt them) and return an\n * updated list of messages for dispatch to the rest of the system.\n *\n * Note that, unlike {@link ClientEvent.ToDeviceEvent} events, this is called on the raw to-device\n * messages, rather than the results of any decryption attempts.\n *\n * @param events - the received to-device messages\n * @returns A list of preprocessed to-device messages.\n */\n preprocessToDeviceMessages(events: IToDeviceEvent[]): Promise<IToDeviceEvent[]>;\n\n /**\n * Called by the /sync loop when one time key counts and unused fallback key details are received.\n *\n * @param oneTimeKeysCounts - the received one time key counts\n * @param unusedFallbackKeys - the received unused fallback keys\n */\n processKeyCounts(oneTimeKeysCounts?: Record<string, number>, unusedFallbackKeys?: string[]): Promise<void>;\n\n /**\n * Handle the notification from /sync that device lists have\n * been changed.\n *\n * @param deviceLists - device_lists field from /sync\n */\n processDeviceLists(deviceLists: IDeviceLists): Promise<void>;\n\n /**\n * Called by the /sync loop whenever an m.room.encryption event is received.\n *\n * This is called before RoomStateEvents are emitted for any of the events in the /sync\n * response (even if the other events technically happened first). This works around a problem\n * if the client uses a RoomStateEvent (typically a membership event) as a trigger to send a message\n * in a new room (or one where encryption has been newly enabled): that would otherwise leave the\n * crypto layer confused because it expects crypto to be set up, but it has not yet been.\n *\n * @param room - in which the event was received\n * @param event - encryption event to be processed\n */\n onCryptoEvent(room: Room, event: MatrixEvent): Promise<void>;\n\n /**\n * Called by the /sync loop after each /sync response is processed.\n *\n * Used to complete batch processing, or to initiate background processes\n *\n * @param syncState - information about the completed sync.\n */\n onSyncCompleted(syncState: OnSyncCompletedData): void;\n\n /**\n * Mark all tracked users' device lists as dirty.\n *\n * This method will cause additional `/keys/query` requests on the server, so should be used only\n * when the client has desynced tracking device list deltas from the server.\n * In MSC4186: Simplified Sliding Sync, this can happen when the server expires the connection.\n */\n markAllTrackedUsersAsDirty(): Promise<void>;\n}\n\n/**\n * @internal\n */\nexport interface OnSyncCompletedData {\n /**\n * The 'next_batch' result from /sync, which will become the 'since' token for the next call to /sync.\n */\n nextSyncToken?: string;\n\n /**\n * True if we are working our way through a backlog of events after connecting.\n */\n catchingUp?: boolean;\n}\n\n/**\n * The result of a (successful) call to {@link CryptoBackend.decryptEvent}\n */\nexport interface EventDecryptionResult {\n /**\n * The plaintext payload for the event (typically containing <tt>type</tt> and <tt>content</tt> fields).\n */\n clearEvent: IClearEvent;\n /**\n * List of curve25519 keys involved in telling us about the senderCurve25519Key and claimedEd25519Key.\n * See {@link MatrixEvent#getForwardingCurve25519KeyChain}.\n */\n forwardingCurve25519KeyChain?: string[];\n /**\n * Key owned by the sender of this event. See {@link MatrixEvent#getSenderKey}.\n */\n senderCurve25519Key?: string;\n /**\n * ed25519 key claimed by the sender of this event. See {@link MatrixEvent#getClaimedEd25519Key}.\n */\n claimedEd25519Key?: string;\n /**\n * Whether the keys for this event have been received via an unauthenticated source (eg via key forwards, or\n * restored from backup)\n */\n untrusted?: boolean;\n}\n\n/**\n * Responsible for decrypting megolm session data retrieved from a remote backup.\n * The result of {@link CryptoBackend#getBackupDecryptor}.\n */\nexport interface BackupDecryptor {\n /**\n * Whether keys retrieved from this backup can be trusted.\n *\n * Depending on the backup algorithm, keys retrieved from the backup can be trusted or not.\n * If false, keys retrieved from the backup must be considered unsafe (authenticity cannot be guaranteed).\n * It could be by design (deniability) or for some technical reason (eg asymmetric encryption).\n */\n readonly sourceTrusted: boolean;\n\n /**\n *\n * Decrypt megolm session data retrieved from backup.\n *\n * @param ciphertexts - a Record of sessionId to session data.\n *\n * @returns An array of decrypted `IMegolmSessionData`\n */\n decryptSessions(ciphertexts: Record<string, KeyBackupSession>): Promise<IMegolmSessionData[]>;\n\n /**\n * Free any resources held by this decryptor.\n *\n * Should be called once the decryptor is no longer needed.\n */\n free(): void;\n}\n\n/**\n * Exception thrown when decryption fails\n *\n * @param code - Reason code for the failure.\n *\n * @param msg - user-visible message describing the problem\n *\n * @param details - key/value pairs reported in the logs but not shown\n * to the user.\n */\nexport class DecryptionError extends Error {\n public readonly detailedString: string;\n\n public constructor(\n public readonly code: DecryptionFailureCode,\n msg: string,\n details?: Record<string, string | Error>,\n ) {\n super(msg);\n this.name = \"DecryptionError\";\n this.detailedString = detailedStringForDecryptionError(this, details);\n }\n}\n\nfunction detailedStringForDecryptionError(err: DecryptionError, details?: Record<string, string | Error>): string {\n let result = err.name + \"[msg: \" + err.message;\n\n if (details) {\n result +=\n \", \" +\n Object.keys(details)\n .map((k) => k + \": \" + details[k])\n .join(\", \");\n }\n\n result += \"]\";\n\n return result;\n}\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;;AAwDA;AACA;AACA;AACA;;AAiEA;AACA;AACA;;AAaA;AACA;AACA;;AA0BA;AACA;AACA;AACA;;AA6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,eAAe,SAASC,KAAK,CAAC;EAGhCC,WAAWA,CACEC,IAA2B,EAC3CC,GAAW,EACXC,OAAwC,EAC1C;IACE,KAAK,CAACD,GAAG,CAAC;IAAC,KAJKD,IAA2B,GAA3BA,IAA2B;IAAAG,eAAA;IAK3C,IAAI,CAACC,IAAI,GAAG,iBAAiB;IAC7B,IAAI,CAACC,cAAc,GAAGC,gCAAgC,CAAC,IAAI,EAAEJ,OAAO,CAAC;EACzE;AACJ;AAEA,SAASI,gCAAgCA,CAACC,GAAoB,EAAEL,OAAwC,EAAU;EAC9G,IAAIM,MAAM,GAAGD,GAAG,CAACH,IAAI,GAAG,QAAQ,GAAGG,GAAG,CAACE,OAAO;EAE9C,IAAIP,OAAO,EAAE;IACTM,MAAM,IACF,IAAI,GACJE,MAAM,CAACC,IAAI,CAACT,OAAO,CAAC,CACfU,GAAG,CAAEC,CAAC,IAAKA,CAAC,GAAG,IAAI,GAAGX,OAAO,CAACW,CAAC,CAAC,CAAC,CACjCC,IAAI,CAAC,IAAI,CAAC;EACvB;EAEAN,MAAM,IAAI,GAAG;EAEb,OAAOA,MAAM;AACjB","ignoreList":[]}
@@ -85,5 +85,13 @@ export declare class TokenRefreshError extends Error {
85
85
  constructor(cause?: Error);
86
86
  get name(): string;
87
87
  }
88
+ /**
89
+ * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,
90
+ * and attempting to refresh said token failed in a way indicative of token invalidation.
91
+ */
92
+ export declare class TokenRefreshLogoutError extends Error {
93
+ constructor(cause?: Error);
94
+ get name(): string;
95
+ }
88
96
  export {};
89
97
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/http-api/errors.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,eAAe,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,UAAU,UAAW,SAAQ,OAAO,CAAC,WAAW,CAAC;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,KAAK;aAGZ,UAAU,CAAC,EAAE,MAAM;aACnB,WAAW,CAAC,EAAE,OAAO;gBAFrC,GAAG,EAAE,MAAM,EACK,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,WAAW,CAAC,EAAE,OAAO,YAAA;IAKzC;;;;;;;OAOG;IACI,gBAAgB,IAAI,OAAO;IAIlC;;;;;OAKG;IACI,eAAe,IAAI,MAAM,GAAG,IAAI;CAkB1C;AAED,qBAAa,WAAY,SAAQ,SAAS;IAgB3B,GAAG,CAAC,EAAE,MAAM;IACZ,KAAK,CAAC,EAAE,WAAW;IAf9B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,IAAI,EAAE,UAAU,CAAC;IAExB;;;;;;OAMG;gBAEC,SAAS,GAAE,UAAe,EAC1B,UAAU,CAAC,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,YAAA,EACZ,KAAK,CAAC,EAAE,WAAW,YAAA,EAC1B,WAAW,CAAC,EAAE,OAAO;IAelB,gBAAgB,IAAI,OAAO;IAO3B,eAAe,IAAI,MAAM,GAAG,IAAI;IAevC;;;OAGG;IACI,oBAAoB,IAAI,kBAAkB;IAmBjD;;;OAGG;WACW,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW;CAG9E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAS7E;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,KAAK;gBACnB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAIjD,IAAW,IAAI,IAAI,MAAM,CAExB;CACJ;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBACrB,KAAK,CAAC,EAAE,KAAK;IAIhC,IAAW,IAAI,IAAI,MAAM,CAExB;CACJ"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/http-api/errors.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,eAAe,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,UAAU,UAAW,SAAQ,OAAO,CAAC,WAAW,CAAC;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,KAAK;aAGZ,UAAU,CAAC,EAAE,MAAM;aACnB,WAAW,CAAC,EAAE,OAAO;gBAFrC,GAAG,EAAE,MAAM,EACK,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,WAAW,CAAC,EAAE,OAAO,YAAA;IAKzC;;;;;;;OAOG;IACI,gBAAgB,IAAI,OAAO;IAIlC;;;;;OAKG;IACI,eAAe,IAAI,MAAM,GAAG,IAAI;CAkB1C;AAED,qBAAa,WAAY,SAAQ,SAAS;IAgB3B,GAAG,CAAC,EAAE,MAAM;IACZ,KAAK,CAAC,EAAE,WAAW;IAf9B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,IAAI,EAAE,UAAU,CAAC;IAExB;;;;;;OAMG;gBAEC,SAAS,GAAE,UAAe,EAC1B,UAAU,CAAC,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,YAAA,EACZ,KAAK,CAAC,EAAE,WAAW,YAAA,EAC1B,WAAW,CAAC,EAAE,OAAO;IAelB,gBAAgB,IAAI,OAAO;IAO3B,eAAe,IAAI,MAAM,GAAG,IAAI;IAevC;;;OAGG;IACI,oBAAoB,IAAI,kBAAkB;IAmBjD;;;OAGG;WACW,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW;CAG9E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAS7E;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,KAAK;gBACnB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAIjD,IAAW,IAAI,IAAI,MAAM,CAExB;CACJ;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBACrB,KAAK,CAAC,EAAE,KAAK;IAIhC,IAAW,IAAI,IAAI,MAAM,CAExB;CACJ;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;gBAC3B,KAAK,CAAC,EAAE,KAAK;IAIhC,IAAW,IAAI,IAAI,MAAM,CAExB;CACJ"}
@@ -197,4 +197,18 @@ export class TokenRefreshError extends Error {
197
197
  return "TokenRefreshError";
198
198
  }
199
199
  }
200
+
201
+ /**
202
+ * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,
203
+ * and attempting to refresh said token failed in a way indicative of token invalidation.
204
+ */
205
+ export class TokenRefreshLogoutError extends Error {
206
+ constructor(cause) {
207
+ var _cause$message2;
208
+ super((_cause$message2 = cause === null || cause === void 0 ? void 0 : cause.message) !== null && _cause$message2 !== void 0 ? _cause$message2 : "");
209
+ }
210
+ get name() {
211
+ return "TokenRefreshLogoutError";
212
+ }
213
+ }
200
214
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":["HTTPError","Error","constructor","msg","httpStatus","httpHeaders","isRateLimitError","getRetryAfterMs","_this$httpHeaders","retryAfter","get","test","ms","Number","parseInt","isFinite","date","Date","toUTCString","getTime","now","MatrixError","errorJson","arguments","length","undefined","url","event","message","error","concat","_defineProperty","errcode","name","data","headerValue","isInteger","retry_after_ms","asWidgetApiErrorData","_this$httpStatus","_this$url","_this$errcode","_this$data$error","headers","value","http_status","http_headers","response","_objectSpread","fromWidgetApiErrorData","Headers","safeGetRetryAfterMs","defaultMs","_error$getRetryAfterM","_unused","ConnectionError","cause","TokenRefreshError","_cause$message"],"sources":["../../src/http-api/errors.ts"],"sourcesContent":["/*\nCopyright 2022 - 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type IMatrixApiError as IWidgetMatrixError } from \"matrix-widget-api\";\n\nimport { type IUsageLimit } from \"../@types/partials.ts\";\nimport { type MatrixEvent } from \"../models/event.ts\";\n\ninterface IErrorJson extends Partial<IUsageLimit> {\n [key: string]: any; // extensible\n errcode?: string;\n error?: string;\n}\n\n/**\n * Construct a generic HTTP error. This is a JavaScript Error with additional information\n * specific to HTTP responses.\n * @param msg - The error message to include.\n * @param httpStatus - The HTTP response status code.\n * @param httpHeaders - The HTTP response headers.\n */\nexport class HTTPError extends Error {\n public constructor(\n msg: string,\n public readonly httpStatus?: number,\n public readonly httpHeaders?: Headers,\n ) {\n super(msg);\n }\n\n /**\n * Check if this error was due to rate-limiting on the server side (and should therefore be retried after a delay).\n *\n * If this returns `true`, {@link getRetryAfterMs} can be called to retrieve the server-side\n * recommendation for the retry period.\n *\n * @returns Whether this error is due to rate-limiting.\n */\n public isRateLimitError(): boolean {\n return this.httpStatus === 429;\n }\n\n /**\n * @returns The recommended delay in milliseconds to wait before retrying\n * the request that triggered this error, or null if no delay is recommended.\n * @throws Error if the recommended delay is an invalid value.\n * @see {@link safeGetRetryAfterMs} for a version of this check that doesn't throw.\n */\n public getRetryAfterMs(): number | null {\n const retryAfter = this.httpHeaders?.get(\"Retry-After\");\n if (retryAfter != null) {\n if (/^\\d+$/.test(retryAfter)) {\n const ms = Number.parseInt(retryAfter) * 1000;\n if (!Number.isFinite(ms)) {\n throw new Error(\"Retry-After header integer value is too large\");\n }\n return ms;\n }\n const date = new Date(retryAfter);\n if (date.toUTCString() !== retryAfter) {\n throw new Error(\"Retry-After header value is not a valid HTTP-date or non-negative decimal integer\");\n }\n return date.getTime() - Date.now();\n }\n return null;\n }\n}\n\nexport class MatrixError extends HTTPError {\n // The Matrix 'errcode' value, e.g. \"M_FORBIDDEN\".\n public readonly errcode?: string;\n // The raw Matrix error JSON used to construct this object.\n public data: IErrorJson;\n\n /**\n * Construct a Matrix error. This is a JavaScript Error with additional\n * information specific to the standard Matrix error response.\n * @param errorJson - The Matrix error JSON returned from the homeserver.\n * @param httpStatus - The numeric HTTP status code given\n * @param httpHeaders - The HTTP response headers given\n */\n public constructor(\n errorJson: IErrorJson = {},\n httpStatus?: number,\n public url?: string,\n public event?: MatrixEvent,\n httpHeaders?: Headers,\n ) {\n let message = errorJson.error || \"Unknown message\";\n if (httpStatus) {\n message = `[${httpStatus}] ${message}`;\n }\n if (url) {\n message = `${message} (${url})`;\n }\n super(`MatrixError: ${message}`, httpStatus, httpHeaders);\n this.errcode = errorJson.errcode;\n this.name = errorJson.errcode || \"Unknown error code\";\n this.data = errorJson;\n }\n\n public isRateLimitError(): boolean {\n return (\n this.errcode === \"M_LIMIT_EXCEEDED\" ||\n ((this.errcode === \"M_UNKNOWN\" || this.errcode === undefined) && super.isRateLimitError())\n );\n }\n\n public getRetryAfterMs(): number | null {\n const headerValue = super.getRetryAfterMs();\n if (headerValue !== null) {\n return headerValue;\n }\n // Note: retry_after_ms is deprecated as of spec version v1.10\n if (this.errcode === \"M_LIMIT_EXCEEDED\" && \"retry_after_ms\" in this.data) {\n if (!Number.isInteger(this.data.retry_after_ms)) {\n throw new Error(\"retry_after_ms is not an integer\");\n }\n return this.data.retry_after_ms;\n }\n return null;\n }\n\n /**\n * @returns this error expressed as a JSON payload\n * for use by Widget API error responses.\n */\n public asWidgetApiErrorData(): IWidgetMatrixError {\n const headers: Record<string, string> = {};\n if (this.httpHeaders) {\n for (const [name, value] of this.httpHeaders) {\n headers[name] = value;\n }\n }\n return {\n http_status: this.httpStatus ?? 400,\n http_headers: headers,\n url: this.url ?? \"\",\n response: {\n errcode: this.errcode ?? \"M_UNKNOWN\",\n error: this.data.error ?? \"Unknown message\",\n ...this.data,\n },\n };\n }\n\n /**\n * @returns a new {@link MatrixError} from a JSON payload\n * received from Widget API error responses.\n */\n public static fromWidgetApiErrorData(data: IWidgetMatrixError): MatrixError {\n return new MatrixError(data.response, data.http_status, data.url, undefined, new Headers(data.http_headers));\n }\n}\n\n/**\n * @returns The recommended delay in milliseconds to wait before retrying the request.\n * @param error - The error to check for a retry delay.\n * @param defaultMs - The delay to use if the error was not due to rate-limiting or if no valid delay is recommended.\n */\nexport function safeGetRetryAfterMs(error: unknown, defaultMs: number): number {\n if (!(error instanceof HTTPError) || !error.isRateLimitError()) {\n return defaultMs;\n }\n try {\n return error.getRetryAfterMs() ?? defaultMs;\n } catch {\n return defaultMs;\n }\n}\n\n/**\n * Construct a ConnectionError. This is a JavaScript Error indicating\n * that a request failed because of some error with the connection, either\n * CORS was not correctly configured on the server, the server didn't response,\n * the request timed out, or the internet connection on the client side went down.\n */\nexport class ConnectionError extends Error {\n public constructor(message: string, cause?: Error) {\n super(message + (cause ? `: ${cause.message}` : \"\"));\n }\n\n public get name(): string {\n return \"ConnectionError\";\n }\n}\n\n/**\n * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,\n * and attempting to refresh said token also failed but in a way which was not indicative of token invalidation.\n * Assumed to be a temporary failure.\n */\nexport class TokenRefreshError extends Error {\n public constructor(cause?: Error) {\n super(cause?.message ?? \"\");\n }\n\n public get name(): string {\n return \"TokenRefreshError\";\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"errors.js","names":["HTTPError","Error","constructor","msg","httpStatus","httpHeaders","isRateLimitError","getRetryAfterMs","_this$httpHeaders","retryAfter","get","test","ms","Number","parseInt","isFinite","date","Date","toUTCString","getTime","now","MatrixError","errorJson","arguments","length","undefined","url","event","message","error","concat","_defineProperty","errcode","name","data","headerValue","isInteger","retry_after_ms","asWidgetApiErrorData","_this$httpStatus","_this$url","_this$errcode","_this$data$error","headers","value","http_status","http_headers","response","_objectSpread","fromWidgetApiErrorData","Headers","safeGetRetryAfterMs","defaultMs","_error$getRetryAfterM","_unused","ConnectionError","cause","TokenRefreshError","_cause$message","TokenRefreshLogoutError","_cause$message2"],"sources":["../../src/http-api/errors.ts"],"sourcesContent":["/*\nCopyright 2022 - 2024 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type IMatrixApiError as IWidgetMatrixError } from \"matrix-widget-api\";\n\nimport { type IUsageLimit } from \"../@types/partials.ts\";\nimport { type MatrixEvent } from \"../models/event.ts\";\n\ninterface IErrorJson extends Partial<IUsageLimit> {\n [key: string]: any; // extensible\n errcode?: string;\n error?: string;\n}\n\n/**\n * Construct a generic HTTP error. This is a JavaScript Error with additional information\n * specific to HTTP responses.\n * @param msg - The error message to include.\n * @param httpStatus - The HTTP response status code.\n * @param httpHeaders - The HTTP response headers.\n */\nexport class HTTPError extends Error {\n public constructor(\n msg: string,\n public readonly httpStatus?: number,\n public readonly httpHeaders?: Headers,\n ) {\n super(msg);\n }\n\n /**\n * Check if this error was due to rate-limiting on the server side (and should therefore be retried after a delay).\n *\n * If this returns `true`, {@link getRetryAfterMs} can be called to retrieve the server-side\n * recommendation for the retry period.\n *\n * @returns Whether this error is due to rate-limiting.\n */\n public isRateLimitError(): boolean {\n return this.httpStatus === 429;\n }\n\n /**\n * @returns The recommended delay in milliseconds to wait before retrying\n * the request that triggered this error, or null if no delay is recommended.\n * @throws Error if the recommended delay is an invalid value.\n * @see {@link safeGetRetryAfterMs} for a version of this check that doesn't throw.\n */\n public getRetryAfterMs(): number | null {\n const retryAfter = this.httpHeaders?.get(\"Retry-After\");\n if (retryAfter != null) {\n if (/^\\d+$/.test(retryAfter)) {\n const ms = Number.parseInt(retryAfter) * 1000;\n if (!Number.isFinite(ms)) {\n throw new Error(\"Retry-After header integer value is too large\");\n }\n return ms;\n }\n const date = new Date(retryAfter);\n if (date.toUTCString() !== retryAfter) {\n throw new Error(\"Retry-After header value is not a valid HTTP-date or non-negative decimal integer\");\n }\n return date.getTime() - Date.now();\n }\n return null;\n }\n}\n\nexport class MatrixError extends HTTPError {\n // The Matrix 'errcode' value, e.g. \"M_FORBIDDEN\".\n public readonly errcode?: string;\n // The raw Matrix error JSON used to construct this object.\n public data: IErrorJson;\n\n /**\n * Construct a Matrix error. This is a JavaScript Error with additional\n * information specific to the standard Matrix error response.\n * @param errorJson - The Matrix error JSON returned from the homeserver.\n * @param httpStatus - The numeric HTTP status code given\n * @param httpHeaders - The HTTP response headers given\n */\n public constructor(\n errorJson: IErrorJson = {},\n httpStatus?: number,\n public url?: string,\n public event?: MatrixEvent,\n httpHeaders?: Headers,\n ) {\n let message = errorJson.error || \"Unknown message\";\n if (httpStatus) {\n message = `[${httpStatus}] ${message}`;\n }\n if (url) {\n message = `${message} (${url})`;\n }\n super(`MatrixError: ${message}`, httpStatus, httpHeaders);\n this.errcode = errorJson.errcode;\n this.name = errorJson.errcode || \"Unknown error code\";\n this.data = errorJson;\n }\n\n public isRateLimitError(): boolean {\n return (\n this.errcode === \"M_LIMIT_EXCEEDED\" ||\n ((this.errcode === \"M_UNKNOWN\" || this.errcode === undefined) && super.isRateLimitError())\n );\n }\n\n public getRetryAfterMs(): number | null {\n const headerValue = super.getRetryAfterMs();\n if (headerValue !== null) {\n return headerValue;\n }\n // Note: retry_after_ms is deprecated as of spec version v1.10\n if (this.errcode === \"M_LIMIT_EXCEEDED\" && \"retry_after_ms\" in this.data) {\n if (!Number.isInteger(this.data.retry_after_ms)) {\n throw new Error(\"retry_after_ms is not an integer\");\n }\n return this.data.retry_after_ms;\n }\n return null;\n }\n\n /**\n * @returns this error expressed as a JSON payload\n * for use by Widget API error responses.\n */\n public asWidgetApiErrorData(): IWidgetMatrixError {\n const headers: Record<string, string> = {};\n if (this.httpHeaders) {\n for (const [name, value] of this.httpHeaders) {\n headers[name] = value;\n }\n }\n return {\n http_status: this.httpStatus ?? 400,\n http_headers: headers,\n url: this.url ?? \"\",\n response: {\n errcode: this.errcode ?? \"M_UNKNOWN\",\n error: this.data.error ?? \"Unknown message\",\n ...this.data,\n },\n };\n }\n\n /**\n * @returns a new {@link MatrixError} from a JSON payload\n * received from Widget API error responses.\n */\n public static fromWidgetApiErrorData(data: IWidgetMatrixError): MatrixError {\n return new MatrixError(data.response, data.http_status, data.url, undefined, new Headers(data.http_headers));\n }\n}\n\n/**\n * @returns The recommended delay in milliseconds to wait before retrying the request.\n * @param error - The error to check for a retry delay.\n * @param defaultMs - The delay to use if the error was not due to rate-limiting or if no valid delay is recommended.\n */\nexport function safeGetRetryAfterMs(error: unknown, defaultMs: number): number {\n if (!(error instanceof HTTPError) || !error.isRateLimitError()) {\n return defaultMs;\n }\n try {\n return error.getRetryAfterMs() ?? defaultMs;\n } catch {\n return defaultMs;\n }\n}\n\n/**\n * Construct a ConnectionError. This is a JavaScript Error indicating\n * that a request failed because of some error with the connection, either\n * CORS was not correctly configured on the server, the server didn't response,\n * the request timed out, or the internet connection on the client side went down.\n */\nexport class ConnectionError extends Error {\n public constructor(message: string, cause?: Error) {\n super(message + (cause ? `: ${cause.message}` : \"\"));\n }\n\n public get name(): string {\n return \"ConnectionError\";\n }\n}\n\n/**\n * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,\n * and attempting to refresh said token also failed but in a way which was not indicative of token invalidation.\n * Assumed to be a temporary failure.\n */\nexport class TokenRefreshError extends Error {\n public constructor(cause?: Error) {\n super(cause?.message ?? \"\");\n }\n\n public get name(): string {\n return \"TokenRefreshError\";\n }\n}\n\n/**\n * Construct a TokenRefreshError. This indicates that a request failed due to the token being expired,\n * and attempting to refresh said token failed in a way indicative of token invalidation.\n */\nexport class TokenRefreshLogoutError extends Error {\n public constructor(cause?: Error) {\n super(cause?.message ?? \"\");\n }\n\n public get name(): string {\n return \"TokenRefreshLogoutError\";\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/http-api/fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/http-api/fetch.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EACH,YAAY,EACZ,KAAK,sBAAsB,EAC3B,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,IAAI,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,UAAU,aAAa,CAAC,CAAC,CAAE,SAAQ,QAAQ;IACvC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;CACtB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACtE,MAAM,GACN,CAAC,SAAS;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAAG,SAAS,GACtC,CAAC,GACD,aAAa,CAAC,CAAC,CAAC,CAAC;AAQzB,qBAAa,YAAY,CAAC,CAAC,SAAS,SAAS;IAIrC,OAAO,CAAC,YAAY;aACJ,IAAI,EAAE,CAAC;IAJ3B,OAAO,CAAC,eAAe,CAAyB;gBAGpC,YAAY,EAAE,iBAAiB,CAAC,YAAY,EAAE,sBAAsB,CAAC,EAC7D,IAAI,EAAE,CAAC;IAOpB,KAAK,IAAI,IAAI;IAKb,KAAK,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC;IAOhG;;;OAGG;IACI,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhC,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,SAAS,EACrD,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA0B9B;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAAC,CAAmB;IAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACU,aAAa,CAAC,CAAC,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,SAAS,EACvB,IAAI,CAAC,EAAE,IAAI,EACX,SAAS,GAAE,YAAY,GAAG;QAAE,wBAAwB,CAAC,EAAE,OAAO,CAAA;KAAO,GACtE,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA6D9B;;;;OAIG;YAEW,eAAe;IAqB7B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACI,OAAO,CAAC,CAAC,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,SAAS,EACvB,IAAI,CAAC,EAAE,IAAI,EACX,IAAI,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAK9B;;;;;;;;;;;;;OAaG;IACU,eAAe,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,GAAG,MAAM,EACjB,IAAI,CAAC,EAAE,IAAI,EACX,IAAI,GAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,MAAM,GAAG,gBAAgB,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,CAAM,GAChH,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IA+E9B,OAAO,CAAC,kBAAkB;IAsB1B;;;;;;;OAOG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG;CAW/F"}
@@ -29,10 +29,9 @@ limitations under the License.
29
29
  * This is an internal module. See {@link MatrixHttpApi} for the public class.
30
30
  */
31
31
 
32
- import { ErrorResponse as OidcAuthError } from "oidc-client-ts";
33
32
  import { checkObjectHasKeys, encodeParams } from "../utils.js";
34
33
  import { Method } from "./method.js";
35
- import { ConnectionError, MatrixError, TokenRefreshError } from "./errors.js";
34
+ import { ConnectionError, MatrixError, TokenRefreshError, TokenRefreshLogoutError } from "./errors.js";
36
35
  import { HttpApiEvent } from "./interface.js";
37
36
  import { anySignal, parseErrorResponse, timeoutSignal } from "./utils.js";
38
37
  import { singleAsyncExecution } from "../utils/decorators.js";
@@ -206,7 +205,8 @@ export class FetchHttpApi {
206
205
  } catch (error) {
207
206
  var _this2$opts$logger;
208
207
  (_this2$opts$logger = _this2.opts.logger) === null || _this2$opts$logger === void 0 || _this2$opts$logger.warn("Failed to refresh token", error);
209
- if (error instanceof OidcAuthError || error instanceof MatrixError) {
208
+ // If we get a TokenError or MatrixError, we should log out, otherwise assume transient
209
+ if (error instanceof TokenRefreshLogoutError || error instanceof MatrixError) {
210
210
  return TokenRefreshOutcome.Logout;
211
211
  }
212
212
  return TokenRefreshOutcome.Failure;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","names":["ErrorResponse","OidcAuthError","checkObjectHasKeys","encodeParams","Method","ConnectionError","MatrixError","TokenRefreshError","HttpApiEvent","anySignal","parseErrorResponse","timeoutSignal","singleAsyncExecution","TokenRefreshOutcome","FetchHttpApi","constructor","eventEmitter","opts","_opts$useAuthorizatio","_defineProperty","_initProto","AbortController","onlyData","useAuthorizationHeader","abort","abortController","fetch","resource","options","fetchFn","globalThis","setIdBaseUrl","url","idBaseUrl","idServerRequest","method","path","params","prefix","accessToken","Error","queryParams","undefined","body","Get","fullUri","getUrl","json","headers","Authorization","concat","requestOtherUrl","authedRequest","_arguments","arguments","_this","_asyncToGenerator","paramOpts","length","_objectSpread","access_token","tokenRefreshPromise","response","request","error","errcode","doNotAttemptTokenRefresh","tryRefreshToken","Promise","allSettled","outcome","Success","Failure","inhibitLogoutEmit","emit","SessionLoggedOut","NoConsent","message","data","consent_uri","_this2","refreshToken","tokenRefreshFunction","Logout","_this2$opts$logger","logger","warn","baseUrl","_arguments2","_this3","_this3$opts$logger","_opts$json","_body$constructor","_opts$localTimeoutMs","_opts$keepAlive","urlForLogs","sanitizeUrlForLogs","debug","Object","assign","jsonBody","name","timeout","localTimeoutMs","keepAlive","signals","signal","push","abortSignal","JSON","stringify","cleanup","res","start","Date","now","_this3$opts$logger2","mode","redirect","referrer","referrerPolicy","cache","credentials","keepalive","priority","status","e","_this3$opts$logger3","ok","text","asUrl","URL","sanitizedQs","URLSearchParams","key","searchParams","keys","append","sanitizedQsString","toString","sanitizedQsUrlPiece","origin","pathname","_unused","baseUrlWithFallback","baseUrlWithoutTrailingSlash","endsWith","slice","_FetchHttpApi","_applyDecs"],"sources":["../../src/http-api/fetch.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module. See {@link MatrixHttpApi} for the public class.\n */\n\nimport { ErrorResponse as OidcAuthError } from \"oidc-client-ts\";\n\nimport { checkObjectHasKeys, encodeParams } from \"../utils.ts\";\nimport { type TypedEventEmitter } from \"../models/typed-event-emitter.ts\";\nimport { Method } from \"./method.ts\";\nimport { ConnectionError, MatrixError, TokenRefreshError } from \"./errors.ts\";\nimport {\n HttpApiEvent,\n type HttpApiEventHandlerMap,\n type IHttpOpts,\n type IRequestOpts,\n type Body,\n} from \"./interface.ts\";\nimport { anySignal, parseErrorResponse, timeoutSignal } from \"./utils.ts\";\nimport { type QueryDict } from \"../utils.ts\";\nimport { singleAsyncExecution } from \"../utils/decorators.ts\";\n\ninterface TypedResponse<T> extends Response {\n json(): Promise<T>;\n}\n\nexport type ResponseType<T, O extends IHttpOpts> = O extends { json: false }\n ? string\n : O extends { onlyData: true } | undefined\n ? T\n : TypedResponse<T>;\n\nconst enum TokenRefreshOutcome {\n Success = \"success\",\n Failure = \"failure\",\n Logout = \"logout\",\n}\n\nexport class FetchHttpApi<O extends IHttpOpts> {\n private abortController = new AbortController();\n\n public constructor(\n private eventEmitter: TypedEventEmitter<HttpApiEvent, HttpApiEventHandlerMap>,\n public readonly opts: O,\n ) {\n checkObjectHasKeys(opts, [\"baseUrl\", \"prefix\"]);\n opts.onlyData = !!opts.onlyData;\n opts.useAuthorizationHeader = opts.useAuthorizationHeader ?? true;\n }\n\n public abort(): void {\n this.abortController.abort();\n this.abortController = new AbortController();\n }\n\n public fetch(resource: URL | string, options?: RequestInit): ReturnType<typeof globalThis.fetch> {\n if (this.opts.fetchFn) {\n return this.opts.fetchFn(resource, options);\n }\n return globalThis.fetch(resource, options);\n }\n\n /**\n * Sets the base URL for the identity server\n * @param url - The new base url\n */\n public setIdBaseUrl(url?: string): void {\n this.opts.idBaseUrl = url;\n }\n\n public idServerRequest<T extends object = Record<string, unknown>>(\n method: Method,\n path: string,\n params: Record<string, string | string[]> | undefined,\n prefix: string,\n accessToken?: string,\n ): Promise<ResponseType<T, O>> {\n if (!this.opts.idBaseUrl) {\n throw new Error(\"No identity server base URL set\");\n }\n\n let queryParams: QueryDict | undefined = undefined;\n let body: Record<string, string | string[]> | undefined = undefined;\n if (method === Method.Get) {\n queryParams = params;\n } else {\n body = params;\n }\n\n const fullUri = this.getUrl(path, queryParams, prefix, this.opts.idBaseUrl);\n\n const opts: IRequestOpts = {\n json: true,\n headers: {},\n };\n if (accessToken) {\n opts.headers!.Authorization = `Bearer ${accessToken}`;\n }\n\n return this.requestOtherUrl(method, fullUri, body, opts);\n }\n\n /**\n * Promise used to block authenticated requests during a token refresh to avoid repeated expected errors.\n * @private\n */\n private tokenRefreshPromise?: Promise<unknown>;\n\n /**\n * Perform an authorised request to the homeserver.\n * @param method - The HTTP method e.g. \"GET\".\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g.\n * \"/createRoom\".\n *\n * @param queryParams - A dict of query params (these will NOT be\n * urlencoded). If unspecified, there will be no query params.\n *\n * @param body - The HTTP JSON body.\n *\n * @param paramOpts - additional options.\n * When `paramOpts.doNotAttemptTokenRefresh` is true, token refresh will not be attempted\n * when an expired token is encountered. Used to only attempt token refresh once.\n *\n * @returns Promise which resolves to\n * ```\n * {\n * data: {Object},\n * headers: {Object},\n * code: {Number},\n * }\n * ```\n * If `onlyData` is set, this will resolve to the `data` object only.\n * @returns Rejects with an error if a problem occurred.\n * This includes network problems and Matrix-specific error JSON.\n */\n public async authedRequest<T>(\n method: Method,\n path: string,\n queryParams?: QueryDict,\n body?: Body,\n paramOpts: IRequestOpts & { doNotAttemptTokenRefresh?: boolean } = {},\n ): Promise<ResponseType<T, O>> {\n if (!queryParams) queryParams = {};\n\n // avoid mutating paramOpts so they can be used on retry\n const opts = { ...paramOpts };\n\n if (this.opts.accessToken) {\n if (this.opts.useAuthorizationHeader) {\n if (!opts.headers) {\n opts.headers = {};\n }\n if (!opts.headers.Authorization) {\n opts.headers.Authorization = \"Bearer \" + this.opts.accessToken;\n }\n if (queryParams.access_token) {\n delete queryParams.access_token;\n }\n } else if (!queryParams.access_token) {\n queryParams.access_token = this.opts.accessToken;\n }\n }\n\n try {\n // Await any ongoing token refresh\n await this.tokenRefreshPromise;\n const response = await this.request<T>(method, path, queryParams, body, opts);\n return response;\n } catch (error) {\n if (!(error instanceof MatrixError)) {\n throw error;\n }\n\n if (error.errcode === \"M_UNKNOWN_TOKEN\" && !opts.doNotAttemptTokenRefresh) {\n const tokenRefreshPromise = this.tryRefreshToken();\n this.tokenRefreshPromise = Promise.allSettled([tokenRefreshPromise]);\n const outcome = await tokenRefreshPromise;\n\n if (outcome === TokenRefreshOutcome.Success) {\n // if we got a new token retry the request\n return this.authedRequest(method, path, queryParams, body, {\n ...paramOpts,\n doNotAttemptTokenRefresh: true,\n });\n }\n if (outcome === TokenRefreshOutcome.Failure) {\n throw new TokenRefreshError(error);\n }\n // Fall through to SessionLoggedOut handler below\n }\n\n // otherwise continue with error handling\n if (error.errcode == \"M_UNKNOWN_TOKEN\" && !opts?.inhibitLogoutEmit) {\n this.eventEmitter.emit(HttpApiEvent.SessionLoggedOut, error);\n } else if (error.errcode == \"M_CONSENT_NOT_GIVEN\") {\n this.eventEmitter.emit(HttpApiEvent.NoConsent, error.message, error.data.consent_uri);\n }\n\n throw error;\n }\n }\n\n /**\n * Attempt to refresh access tokens.\n * On success, sets new access and refresh tokens in opts.\n * @returns Promise that resolves to a boolean - true when token was refreshed successfully\n */\n @singleAsyncExecution\n private async tryRefreshToken(): Promise<TokenRefreshOutcome> {\n if (!this.opts.refreshToken || !this.opts.tokenRefreshFunction) {\n return TokenRefreshOutcome.Logout;\n }\n\n try {\n const { accessToken, refreshToken } = await this.opts.tokenRefreshFunction(this.opts.refreshToken);\n this.opts.accessToken = accessToken;\n this.opts.refreshToken = refreshToken;\n // successfully got new tokens\n return TokenRefreshOutcome.Success;\n } catch (error) {\n this.opts.logger?.warn(\"Failed to refresh token\", error);\n if (error instanceof OidcAuthError || error instanceof MatrixError) {\n return TokenRefreshOutcome.Logout;\n }\n return TokenRefreshOutcome.Failure;\n }\n }\n\n /**\n * Perform a request to the homeserver without any credentials.\n * @param method - The HTTP method e.g. \"GET\".\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g.\n * \"/createRoom\".\n *\n * @param queryParams - A dict of query params (these will NOT be\n * urlencoded). If unspecified, there will be no query params.\n *\n * @param body - The HTTP JSON body.\n *\n * @param opts - additional options\n *\n * @returns Promise which resolves to\n * ```\n * {\n * data: {Object},\n * headers: {Object},\n * code: {Number},\n * }\n * ```\n * If `onlyData</code> is set, this will resolve to the <code>data`\n * object only.\n * @returns Rejects with an error if a problem\n * occurred. This includes network problems and Matrix-specific error JSON.\n */\n public request<T>(\n method: Method,\n path: string,\n queryParams?: QueryDict,\n body?: Body,\n opts?: IRequestOpts,\n ): Promise<ResponseType<T, O>> {\n const fullUri = this.getUrl(path, queryParams, opts?.prefix, opts?.baseUrl);\n return this.requestOtherUrl<T>(method, fullUri, body, opts);\n }\n\n /**\n * Perform a request to an arbitrary URL.\n * @param method - The HTTP method e.g. \"GET\".\n * @param url - The HTTP URL object.\n *\n * @param body - The HTTP JSON body.\n *\n * @param opts - additional options\n *\n * @returns Promise which resolves to data unless `onlyData` is specified as false,\n * where the resolved value will be a fetch Response object.\n * @returns Rejects with an error if a problem\n * occurred. This includes network problems and Matrix-specific error JSON.\n */\n public async requestOtherUrl<T>(\n method: Method,\n url: URL | string,\n body?: Body,\n opts: Pick<IRequestOpts, \"headers\" | \"json\" | \"localTimeoutMs\" | \"keepAlive\" | \"abortSignal\" | \"priority\"> = {},\n ): Promise<ResponseType<T, O>> {\n const urlForLogs = this.sanitizeUrlForLogs(url);\n this.opts.logger?.debug(`FetchHttpApi: --> ${method} ${urlForLogs}`);\n\n const headers = Object.assign({}, opts.headers || {});\n const json = opts.json ?? true;\n // We can't use getPrototypeOf here as objects made in other contexts e.g. over postMessage won't have same ref\n const jsonBody = json && body?.constructor?.name === Object.name;\n\n if (json) {\n if (jsonBody && !headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (!headers[\"Accept\"]) {\n headers[\"Accept\"] = \"application/json\";\n }\n }\n\n const timeout = opts.localTimeoutMs ?? this.opts.localTimeoutMs;\n const keepAlive = opts.keepAlive ?? false;\n const signals = [this.abortController.signal];\n if (timeout !== undefined) {\n signals.push(timeoutSignal(timeout));\n }\n if (opts.abortSignal) {\n signals.push(opts.abortSignal);\n }\n\n let data: BodyInit;\n if (jsonBody) {\n data = JSON.stringify(body);\n } else {\n data = body as BodyInit;\n }\n\n const { signal, cleanup } = anySignal(signals);\n\n let res: Response;\n const start = Date.now();\n try {\n res = await this.fetch(url, {\n signal,\n method,\n body: data,\n headers,\n mode: \"cors\",\n redirect: \"follow\",\n referrer: \"\",\n referrerPolicy: \"no-referrer\",\n cache: \"no-cache\",\n credentials: \"omit\", // we send credentials via headers\n keepalive: keepAlive,\n priority: opts.priority,\n });\n\n this.opts.logger?.debug(\n `FetchHttpApi: <-- ${method} ${urlForLogs} [${Date.now() - start}ms ${res.status}]`,\n );\n } catch (e) {\n this.opts.logger?.debug(`FetchHttpApi: <-- ${method} ${urlForLogs} [${Date.now() - start}ms ${e}]`);\n if ((<Error>e).name === \"AbortError\") {\n throw e;\n }\n throw new ConnectionError(\"fetch failed\", <Error>e);\n } finally {\n cleanup();\n }\n\n if (!res.ok) {\n throw parseErrorResponse(res, await res.text());\n }\n\n if (this.opts.onlyData) {\n return (json ? res.json() : res.text()) as ResponseType<T, O>;\n }\n return res as ResponseType<T, O>;\n }\n\n private sanitizeUrlForLogs(url: URL | string): string {\n try {\n let asUrl: URL;\n if (typeof url === \"string\") {\n asUrl = new URL(url);\n } else {\n asUrl = url;\n }\n // Remove the values of any URL params that could contain potential secrets\n const sanitizedQs = new URLSearchParams();\n for (const key of asUrl.searchParams.keys()) {\n sanitizedQs.append(key, \"xxx\");\n }\n const sanitizedQsString = sanitizedQs.toString();\n const sanitizedQsUrlPiece = sanitizedQsString ? `?${sanitizedQsString}` : \"\";\n\n return asUrl.origin + asUrl.pathname + sanitizedQsUrlPiece;\n } catch {\n // defensive coding for malformed url\n return \"??\";\n }\n }\n /**\n * Form and return a homeserver request URL based on the given path params and prefix.\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g. \"/createRoom\".\n * @param queryParams - A dict of query params (these will NOT be urlencoded).\n * @param prefix - The full prefix to use e.g. \"/_matrix/client/v2_alpha\", defaulting to this.opts.prefix.\n * @param baseUrl - The baseUrl to use e.g. \"https://matrix.org\", defaulting to this.opts.baseUrl.\n * @returns URL\n */\n public getUrl(path: string, queryParams?: QueryDict, prefix?: string, baseUrl?: string): URL {\n const baseUrlWithFallback = baseUrl ?? this.opts.baseUrl;\n const baseUrlWithoutTrailingSlash = baseUrlWithFallback.endsWith(\"/\")\n ? baseUrlWithFallback.slice(0, -1)\n : baseUrlWithFallback;\n const url = new URL(baseUrlWithoutTrailingSlash + (prefix ?? this.opts.prefix) + path);\n if (queryParams) {\n encodeParams(queryParams, url.searchParams);\n }\n return url;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"fetch.js","names":["checkObjectHasKeys","encodeParams","Method","ConnectionError","MatrixError","TokenRefreshError","TokenRefreshLogoutError","HttpApiEvent","anySignal","parseErrorResponse","timeoutSignal","singleAsyncExecution","TokenRefreshOutcome","FetchHttpApi","constructor","eventEmitter","opts","_opts$useAuthorizatio","_defineProperty","_initProto","AbortController","onlyData","useAuthorizationHeader","abort","abortController","fetch","resource","options","fetchFn","globalThis","setIdBaseUrl","url","idBaseUrl","idServerRequest","method","path","params","prefix","accessToken","Error","queryParams","undefined","body","Get","fullUri","getUrl","json","headers","Authorization","concat","requestOtherUrl","authedRequest","_arguments","arguments","_this","_asyncToGenerator","paramOpts","length","_objectSpread","access_token","tokenRefreshPromise","response","request","error","errcode","doNotAttemptTokenRefresh","tryRefreshToken","Promise","allSettled","outcome","Success","Failure","inhibitLogoutEmit","emit","SessionLoggedOut","NoConsent","message","data","consent_uri","_this2","refreshToken","tokenRefreshFunction","Logout","_this2$opts$logger","logger","warn","baseUrl","_arguments2","_this3","_this3$opts$logger","_opts$json","_body$constructor","_opts$localTimeoutMs","_opts$keepAlive","urlForLogs","sanitizeUrlForLogs","debug","Object","assign","jsonBody","name","timeout","localTimeoutMs","keepAlive","signals","signal","push","abortSignal","JSON","stringify","cleanup","res","start","Date","now","_this3$opts$logger2","mode","redirect","referrer","referrerPolicy","cache","credentials","keepalive","priority","status","e","_this3$opts$logger3","ok","text","asUrl","URL","sanitizedQs","URLSearchParams","key","searchParams","keys","append","sanitizedQsString","toString","sanitizedQsUrlPiece","origin","pathname","_unused","baseUrlWithFallback","baseUrlWithoutTrailingSlash","endsWith","slice","_FetchHttpApi","_applyDecs"],"sources":["../../src/http-api/fetch.ts"],"sourcesContent":["/*\nCopyright 2022 The Matrix.org Foundation C.I.C.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\n/**\n * This is an internal module. See {@link MatrixHttpApi} for the public class.\n */\n\nimport { checkObjectHasKeys, encodeParams } from \"../utils.ts\";\nimport { type TypedEventEmitter } from \"../models/typed-event-emitter.ts\";\nimport { Method } from \"./method.ts\";\nimport { ConnectionError, MatrixError, TokenRefreshError, TokenRefreshLogoutError } from \"./errors.ts\";\nimport {\n HttpApiEvent,\n type HttpApiEventHandlerMap,\n type IHttpOpts,\n type IRequestOpts,\n type Body,\n} from \"./interface.ts\";\nimport { anySignal, parseErrorResponse, timeoutSignal } from \"./utils.ts\";\nimport { type QueryDict } from \"../utils.ts\";\nimport { singleAsyncExecution } from \"../utils/decorators.ts\";\n\ninterface TypedResponse<T> extends Response {\n json(): Promise<T>;\n}\n\nexport type ResponseType<T, O extends IHttpOpts> = O extends { json: false }\n ? string\n : O extends { onlyData: true } | undefined\n ? T\n : TypedResponse<T>;\n\nconst enum TokenRefreshOutcome {\n Success = \"success\",\n Failure = \"failure\",\n Logout = \"logout\",\n}\n\nexport class FetchHttpApi<O extends IHttpOpts> {\n private abortController = new AbortController();\n\n public constructor(\n private eventEmitter: TypedEventEmitter<HttpApiEvent, HttpApiEventHandlerMap>,\n public readonly opts: O,\n ) {\n checkObjectHasKeys(opts, [\"baseUrl\", \"prefix\"]);\n opts.onlyData = !!opts.onlyData;\n opts.useAuthorizationHeader = opts.useAuthorizationHeader ?? true;\n }\n\n public abort(): void {\n this.abortController.abort();\n this.abortController = new AbortController();\n }\n\n public fetch(resource: URL | string, options?: RequestInit): ReturnType<typeof globalThis.fetch> {\n if (this.opts.fetchFn) {\n return this.opts.fetchFn(resource, options);\n }\n return globalThis.fetch(resource, options);\n }\n\n /**\n * Sets the base URL for the identity server\n * @param url - The new base url\n */\n public setIdBaseUrl(url?: string): void {\n this.opts.idBaseUrl = url;\n }\n\n public idServerRequest<T extends object = Record<string, unknown>>(\n method: Method,\n path: string,\n params: Record<string, string | string[]> | undefined,\n prefix: string,\n accessToken?: string,\n ): Promise<ResponseType<T, O>> {\n if (!this.opts.idBaseUrl) {\n throw new Error(\"No identity server base URL set\");\n }\n\n let queryParams: QueryDict | undefined = undefined;\n let body: Record<string, string | string[]> | undefined = undefined;\n if (method === Method.Get) {\n queryParams = params;\n } else {\n body = params;\n }\n\n const fullUri = this.getUrl(path, queryParams, prefix, this.opts.idBaseUrl);\n\n const opts: IRequestOpts = {\n json: true,\n headers: {},\n };\n if (accessToken) {\n opts.headers!.Authorization = `Bearer ${accessToken}`;\n }\n\n return this.requestOtherUrl(method, fullUri, body, opts);\n }\n\n /**\n * Promise used to block authenticated requests during a token refresh to avoid repeated expected errors.\n * @private\n */\n private tokenRefreshPromise?: Promise<unknown>;\n\n /**\n * Perform an authorised request to the homeserver.\n * @param method - The HTTP method e.g. \"GET\".\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g.\n * \"/createRoom\".\n *\n * @param queryParams - A dict of query params (these will NOT be\n * urlencoded). If unspecified, there will be no query params.\n *\n * @param body - The HTTP JSON body.\n *\n * @param paramOpts - additional options.\n * When `paramOpts.doNotAttemptTokenRefresh` is true, token refresh will not be attempted\n * when an expired token is encountered. Used to only attempt token refresh once.\n *\n * @returns Promise which resolves to\n * ```\n * {\n * data: {Object},\n * headers: {Object},\n * code: {Number},\n * }\n * ```\n * If `onlyData` is set, this will resolve to the `data` object only.\n * @returns Rejects with an error if a problem occurred.\n * This includes network problems and Matrix-specific error JSON.\n */\n public async authedRequest<T>(\n method: Method,\n path: string,\n queryParams?: QueryDict,\n body?: Body,\n paramOpts: IRequestOpts & { doNotAttemptTokenRefresh?: boolean } = {},\n ): Promise<ResponseType<T, O>> {\n if (!queryParams) queryParams = {};\n\n // avoid mutating paramOpts so they can be used on retry\n const opts = { ...paramOpts };\n\n if (this.opts.accessToken) {\n if (this.opts.useAuthorizationHeader) {\n if (!opts.headers) {\n opts.headers = {};\n }\n if (!opts.headers.Authorization) {\n opts.headers.Authorization = \"Bearer \" + this.opts.accessToken;\n }\n if (queryParams.access_token) {\n delete queryParams.access_token;\n }\n } else if (!queryParams.access_token) {\n queryParams.access_token = this.opts.accessToken;\n }\n }\n\n try {\n // Await any ongoing token refresh\n await this.tokenRefreshPromise;\n const response = await this.request<T>(method, path, queryParams, body, opts);\n return response;\n } catch (error) {\n if (!(error instanceof MatrixError)) {\n throw error;\n }\n\n if (error.errcode === \"M_UNKNOWN_TOKEN\" && !opts.doNotAttemptTokenRefresh) {\n const tokenRefreshPromise = this.tryRefreshToken();\n this.tokenRefreshPromise = Promise.allSettled([tokenRefreshPromise]);\n const outcome = await tokenRefreshPromise;\n\n if (outcome === TokenRefreshOutcome.Success) {\n // if we got a new token retry the request\n return this.authedRequest(method, path, queryParams, body, {\n ...paramOpts,\n doNotAttemptTokenRefresh: true,\n });\n }\n if (outcome === TokenRefreshOutcome.Failure) {\n throw new TokenRefreshError(error);\n }\n // Fall through to SessionLoggedOut handler below\n }\n\n // otherwise continue with error handling\n if (error.errcode == \"M_UNKNOWN_TOKEN\" && !opts?.inhibitLogoutEmit) {\n this.eventEmitter.emit(HttpApiEvent.SessionLoggedOut, error);\n } else if (error.errcode == \"M_CONSENT_NOT_GIVEN\") {\n this.eventEmitter.emit(HttpApiEvent.NoConsent, error.message, error.data.consent_uri);\n }\n\n throw error;\n }\n }\n\n /**\n * Attempt to refresh access tokens.\n * On success, sets new access and refresh tokens in opts.\n * @returns Promise that resolves to a boolean - true when token was refreshed successfully\n */\n @singleAsyncExecution\n private async tryRefreshToken(): Promise<TokenRefreshOutcome> {\n if (!this.opts.refreshToken || !this.opts.tokenRefreshFunction) {\n return TokenRefreshOutcome.Logout;\n }\n\n try {\n const { accessToken, refreshToken } = await this.opts.tokenRefreshFunction(this.opts.refreshToken);\n this.opts.accessToken = accessToken;\n this.opts.refreshToken = refreshToken;\n // successfully got new tokens\n return TokenRefreshOutcome.Success;\n } catch (error) {\n this.opts.logger?.warn(\"Failed to refresh token\", error);\n // If we get a TokenError or MatrixError, we should log out, otherwise assume transient\n if (error instanceof TokenRefreshLogoutError || error instanceof MatrixError) {\n return TokenRefreshOutcome.Logout;\n }\n return TokenRefreshOutcome.Failure;\n }\n }\n\n /**\n * Perform a request to the homeserver without any credentials.\n * @param method - The HTTP method e.g. \"GET\".\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g.\n * \"/createRoom\".\n *\n * @param queryParams - A dict of query params (these will NOT be\n * urlencoded). If unspecified, there will be no query params.\n *\n * @param body - The HTTP JSON body.\n *\n * @param opts - additional options\n *\n * @returns Promise which resolves to\n * ```\n * {\n * data: {Object},\n * headers: {Object},\n * code: {Number},\n * }\n * ```\n * If `onlyData</code> is set, this will resolve to the <code>data`\n * object only.\n * @returns Rejects with an error if a problem\n * occurred. This includes network problems and Matrix-specific error JSON.\n */\n public request<T>(\n method: Method,\n path: string,\n queryParams?: QueryDict,\n body?: Body,\n opts?: IRequestOpts,\n ): Promise<ResponseType<T, O>> {\n const fullUri = this.getUrl(path, queryParams, opts?.prefix, opts?.baseUrl);\n return this.requestOtherUrl<T>(method, fullUri, body, opts);\n }\n\n /**\n * Perform a request to an arbitrary URL.\n * @param method - The HTTP method e.g. \"GET\".\n * @param url - The HTTP URL object.\n *\n * @param body - The HTTP JSON body.\n *\n * @param opts - additional options\n *\n * @returns Promise which resolves to data unless `onlyData` is specified as false,\n * where the resolved value will be a fetch Response object.\n * @returns Rejects with an error if a problem\n * occurred. This includes network problems and Matrix-specific error JSON.\n */\n public async requestOtherUrl<T>(\n method: Method,\n url: URL | string,\n body?: Body,\n opts: Pick<IRequestOpts, \"headers\" | \"json\" | \"localTimeoutMs\" | \"keepAlive\" | \"abortSignal\" | \"priority\"> = {},\n ): Promise<ResponseType<T, O>> {\n const urlForLogs = this.sanitizeUrlForLogs(url);\n this.opts.logger?.debug(`FetchHttpApi: --> ${method} ${urlForLogs}`);\n\n const headers = Object.assign({}, opts.headers || {});\n const json = opts.json ?? true;\n // We can't use getPrototypeOf here as objects made in other contexts e.g. over postMessage won't have same ref\n const jsonBody = json && body?.constructor?.name === Object.name;\n\n if (json) {\n if (jsonBody && !headers[\"Content-Type\"]) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (!headers[\"Accept\"]) {\n headers[\"Accept\"] = \"application/json\";\n }\n }\n\n const timeout = opts.localTimeoutMs ?? this.opts.localTimeoutMs;\n const keepAlive = opts.keepAlive ?? false;\n const signals = [this.abortController.signal];\n if (timeout !== undefined) {\n signals.push(timeoutSignal(timeout));\n }\n if (opts.abortSignal) {\n signals.push(opts.abortSignal);\n }\n\n let data: BodyInit;\n if (jsonBody) {\n data = JSON.stringify(body);\n } else {\n data = body as BodyInit;\n }\n\n const { signal, cleanup } = anySignal(signals);\n\n let res: Response;\n const start = Date.now();\n try {\n res = await this.fetch(url, {\n signal,\n method,\n body: data,\n headers,\n mode: \"cors\",\n redirect: \"follow\",\n referrer: \"\",\n referrerPolicy: \"no-referrer\",\n cache: \"no-cache\",\n credentials: \"omit\", // we send credentials via headers\n keepalive: keepAlive,\n priority: opts.priority,\n });\n\n this.opts.logger?.debug(\n `FetchHttpApi: <-- ${method} ${urlForLogs} [${Date.now() - start}ms ${res.status}]`,\n );\n } catch (e) {\n this.opts.logger?.debug(`FetchHttpApi: <-- ${method} ${urlForLogs} [${Date.now() - start}ms ${e}]`);\n if ((<Error>e).name === \"AbortError\") {\n throw e;\n }\n throw new ConnectionError(\"fetch failed\", <Error>e);\n } finally {\n cleanup();\n }\n\n if (!res.ok) {\n throw parseErrorResponse(res, await res.text());\n }\n\n if (this.opts.onlyData) {\n return (json ? res.json() : res.text()) as ResponseType<T, O>;\n }\n return res as ResponseType<T, O>;\n }\n\n private sanitizeUrlForLogs(url: URL | string): string {\n try {\n let asUrl: URL;\n if (typeof url === \"string\") {\n asUrl = new URL(url);\n } else {\n asUrl = url;\n }\n // Remove the values of any URL params that could contain potential secrets\n const sanitizedQs = new URLSearchParams();\n for (const key of asUrl.searchParams.keys()) {\n sanitizedQs.append(key, \"xxx\");\n }\n const sanitizedQsString = sanitizedQs.toString();\n const sanitizedQsUrlPiece = sanitizedQsString ? `?${sanitizedQsString}` : \"\";\n\n return asUrl.origin + asUrl.pathname + sanitizedQsUrlPiece;\n } catch {\n // defensive coding for malformed url\n return \"??\";\n }\n }\n /**\n * Form and return a homeserver request URL based on the given path params and prefix.\n * @param path - The HTTP path <b>after</b> the supplied prefix e.g. \"/createRoom\".\n * @param queryParams - A dict of query params (these will NOT be urlencoded).\n * @param prefix - The full prefix to use e.g. \"/_matrix/client/v2_alpha\", defaulting to this.opts.prefix.\n * @param baseUrl - The baseUrl to use e.g. \"https://matrix.org\", defaulting to this.opts.baseUrl.\n * @returns URL\n */\n public getUrl(path: string, queryParams?: QueryDict, prefix?: string, baseUrl?: string): URL {\n const baseUrlWithFallback = baseUrl ?? this.opts.baseUrl;\n const baseUrlWithoutTrailingSlash = baseUrlWithFallback.endsWith(\"/\")\n ? baseUrlWithFallback.slice(0, -1)\n : baseUrlWithFallback;\n const url = new URL(baseUrlWithoutTrailingSlash + (prefix ?? this.opts.prefix) + path);\n if (queryParams) {\n encodeParams(queryParams, url.searchParams);\n }\n return url;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@ import { type Room } from "../models/room.ts";
3
3
  import { type CallMembership } from "./CallMembership.ts";
4
4
  import { type Focus } from "./focus.ts";
5
5
  import { type MembershipConfig } from "./MatrixRTCSession.ts";
6
- import { type IMembershipManager } from "./NewMembershipManager.ts";
6
+ import { type IMembershipManager, type MembershipManagerEvent, Status } from "./types.ts";
7
7
  /**
8
8
  * This internal class is used by the MatrixRTCSession to manage the local user's own membership of the session.
9
9
  *
@@ -50,7 +50,15 @@ export declare class LegacyMembershipManager implements IMembershipManager {
50
50
  private get membershipKeepAlivePeriod();
51
51
  private get callMemberEventRetryJitter();
52
52
  constructor(joinConfig: MembershipConfig | undefined, room: Pick<Room, "getLiveTimeline" | "roomId" | "getVersion">, client: Pick<MatrixClient, "getUserId" | "getDeviceId" | "sendStateEvent" | "_unstable_sendDelayedStateEvent" | "_unstable_updateDelayedEvent">, getOldestMembership: () => CallMembership | undefined);
53
+ off(event: MembershipManagerEvent.StatusChanged, listener: (oldStatus: Status, newStatus: Status) => void): this;
54
+ on(event: MembershipManagerEvent.StatusChanged, listener: (oldStatus: Status, newStatus: Status) => void): this;
53
55
  isJoined(): boolean;
56
+ isActivated(): boolean;
57
+ /**
58
+ * Unimplemented
59
+ * @returns Status.Unknown
60
+ */
61
+ get status(): Status;
54
62
  join(fociPreferred: Focus[], fociActive?: Focus): void;
55
63
  leave(timeout?: number | undefined): Promise<boolean>;
56
64
  onRTCSessionMemberUpdate(memberships: CallMembership[]): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"LegacyMembershipManager.d.ts","sourceRoot":"","sources":["../../src/matrixrtc/LegacyMembershipManager.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,KAAK,cAAc,EAAuD,MAAM,qBAAqB,CAAC;AAC/G,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,uBAAwB,YAAW,kBAAkB;IA4C1D,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,mBAAmB;IArD/B,OAAO,CAAC,cAAc,CAAqB;IAE3C,OAAO,CAAC,kBAAkB,CAAC,CAAgC;IAE3D;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAC,CAAU;IACnC;;OAEG;IACH,OAAO,CAAC,cAAc,CAAC,CAAQ;IAE/B,OAAO,CAAC,2BAA2B,CAAS;IAC5C,OAAO,CAAC,wBAAwB,CAAS;IACzC;;;OAGG;IACH,OAAO,CAAC,yCAAyC,CAAC,CAAS;IAC3D,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,OAAO,KAAK,gCAAgC,GAE3C;IACD,OAAO,KAAK,uBAAuB,GAElC;IACD,OAAO,KAAK,iCAAiC,GAM5C;IACD,OAAO,KAAK,yBAAyB,GAEpC;IACD,OAAO,KAAK,0BAA0B,GAErC;gBAGW,UAAU,EAAE,gBAAgB,GAAG,SAAS,EACxC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ,GAAG,YAAY,CAAC,EAC7D,MAAM,EAAE,IAAI,CAChB,YAAY,EACV,WAAW,GACX,aAAa,GACb,gBAAgB,GAChB,iCAAiC,GACjC,8BAA8B,CACnC,EACO,mBAAmB,EAAE,MAAM,cAAc,GAAG,SAAS;IAG1D,QAAQ,IAAI,OAAO;IAInB,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,EAAE,KAAK,GAAG,IAAI;IAShD,KAAK,CAAC,OAAO,GAAE,MAAM,GAAG,SAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBhE,wBAAwB,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5E,cAAc,IAAI,KAAK,GAAG,SAAS;IAmB1C,OAAO,CAAC,gCAAgC,CAiBtC;IACF,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAYV,yBAAyB;IA4HvC,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAUjC;IAEF,OAAO,CAAC,sBAAsB;CAQjC"}
1
+ {"version":3,"file":"LegacyMembershipManager.d.ts","sourceRoot":"","sources":["../../src/matrixrtc/LegacyMembershipManager.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,KAAK,cAAc,EAAuD,MAAM,qBAAqB,CAAC;AAC/G,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAE1F;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,uBAAwB,YAAW,kBAAkB;IA4C1D,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,mBAAmB;IArD/B,OAAO,CAAC,cAAc,CAAqB;IAE3C,OAAO,CAAC,kBAAkB,CAAC,CAAgC;IAE3D;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAC,CAAU;IACnC;;OAEG;IACH,OAAO,CAAC,cAAc,CAAC,CAAQ;IAE/B,OAAO,CAAC,2BAA2B,CAAS;IAC5C,OAAO,CAAC,wBAAwB,CAAS;IACzC;;;OAGG;IACH,OAAO,CAAC,yCAAyC,CAAC,CAAS;IAC3D,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,OAAO,KAAK,gCAAgC,GAE3C;IACD,OAAO,KAAK,uBAAuB,GAElC;IACD,OAAO,KAAK,iCAAiC,GAM5C;IACD,OAAO,KAAK,yBAAyB,GAEpC;IACD,OAAO,KAAK,0BAA0B,GAErC;gBAGW,UAAU,EAAE,gBAAgB,GAAG,SAAS,EACxC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ,GAAG,YAAY,CAAC,EAC7D,MAAM,EAAE,IAAI,CAChB,YAAY,EACV,WAAW,GACX,aAAa,GACb,gBAAgB,GAChB,iCAAiC,GACjC,8BAA8B,CACnC,EACO,mBAAmB,EAAE,MAAM,cAAc,GAAG,SAAS;IAG1D,GAAG,CACN,KAAK,EAAE,sBAAsB,CAAC,aAAa,EAC3C,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,GACzD,IAAI;IAKA,EAAE,CACL,KAAK,EAAE,sBAAsB,CAAC,aAAa,EAC3C,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,GACzD,IAAI;IAKA,QAAQ,IAAI,OAAO;IAGnB,WAAW,IAAI,OAAO;IAG7B;;;OAGG;IACH,IAAW,MAAM,IAAI,MAAM,CAE1B;IAEM,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,EAAE,KAAK,GAAG,IAAI;IAShD,KAAK,CAAC,OAAO,GAAE,MAAM,GAAG,SAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBhE,wBAAwB,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5E,cAAc,IAAI,KAAK,GAAG,SAAS;IAmB1C,OAAO,CAAC,gCAAgC,CAiBtC;IACF,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAYV,yBAAyB;IA4HvC,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAUjC;IAEF,OAAO,CAAC,sBAAsB;CAQjC"}
@@ -24,6 +24,8 @@ import { EventTimeline } from "../models/event-timeline.js";
24
24
  import { sleep } from "../utils.js";
25
25
  import { DEFAULT_EXPIRE_DURATION } from "./CallMembership.js";
26
26
  import { isLivekitFocusActive } from "./LivekitFocus.js";
27
+ import { Status } from "./types.js";
28
+
27
29
  /**
28
30
  * This internal class is used by the MatrixRTCSession to manage the local user's own membership of the session.
29
31
  *
@@ -113,9 +115,27 @@ export class LegacyMembershipManager {
113
115
  }
114
116
  }));
115
117
  }
118
+ off(event, listener) {
119
+ logger.error("off is not implemented on LegacyMembershipManager");
120
+ return this;
121
+ }
122
+ on(event, listener) {
123
+ logger.error("on is not implemented on LegacyMembershipManager");
124
+ return this;
125
+ }
116
126
  isJoined() {
117
127
  return this.relativeExpiry !== undefined;
118
128
  }
129
+ isActivated() {
130
+ return this.isJoined();
131
+ }
132
+ /**
133
+ * Unimplemented
134
+ * @returns Status.Unknown
135
+ */
136
+ get status() {
137
+ return Status.Unknown;
138
+ }
119
139
  join(fociPreferred, fociActive) {
120
140
  this.ownFocusActive = fociActive;
121
141
  this.ownFociPreferred = fociPreferred;