diff --git a/apps/web/next-env.d.ts b/apps/web/next-env.d.ts
index 52e831b43..254b73c16 100644
--- a/apps/web/next-env.d.ts
+++ b/apps/web/next-env.d.ts
@@ -1,5 +1,6 @@
///
///
+///
// NOTE: This file should not be edited
// see https://nextjs.org/docs/pages/api-reference/config/typescript for more information.
diff --git a/apps/web/package.json b/apps/web/package.json
index de48b9d28..96c466bbb 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -47,7 +47,7 @@
"@mui/icons-material": "^6.1.6",
"@mui/material": "^6.3.0",
"@mui/x-date-pickers": "^7.23.3",
- "@next/third-parties": "^15.2.0",
+ "@next/third-parties": "^15.5.7",
"@reduxjs/toolkit": "^2.5.0",
"@reown/walletkit": "^1.2.1",
"@safe-global/api-kit": "^2.4.6",
@@ -76,7 +76,7 @@
"idb-keyval": "^6.2.1",
"js-cookie": "^3.0.1",
"lodash": "^4.17.21",
- "next": "patch:next@15.2.3#../../.yarn/patches/next-npm-15.2.3-06a6671f62.patch",
+ "next": "15.5.7",
"papaparse": "^5.3.2",
"qrcode.react": "^3.1.0",
"react": "^19.0.0",
@@ -96,8 +96,8 @@
"@faker-js/faker": "^9.0.3",
"@mdx-js/loader": "^3.0.1",
"@mdx-js/react": "^3.0.1",
- "@next/bundle-analyzer": "^15.0.4",
- "@next/mdx": "^15.0.4",
+ "@next/bundle-analyzer": "^15.5.7",
+ "@next/mdx": "^15.5.7",
"@openzeppelin/contracts": "^4.9.6",
"@safe-global/safe-core-sdk-types": "^5.0.1",
"@safe-global/test": "workspace:^",
@@ -135,7 +135,7 @@
"cypress-file-upload": "^5.0.8",
"cypress-visual-regression": "^5.2.2",
"eslint": "^9.20.1",
- "eslint-config-next": "^15.0.4",
+ "eslint-config-next": "^15.5.7",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-no-only-tests": "^3.3.0",
"eslint-plugin-prettier": "^5.2.1",
diff --git a/expo-plugins/notification-service-ios/dist/ios-notification-service-files/NotifeeNotificationServiceExtension-Info.plist b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/NotifeeNotificationServiceExtension-Info.plist
new file mode 100644
index 000000000..01b2b348e
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/NotifeeNotificationServiceExtension-Info.plist
@@ -0,0 +1,31 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ NotifeeNotificationServiceExtension
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ 1.0.0
+ CFBundleVersion
+ 1
+ NSExtension
+
+ NSExtensionPointIdentifier
+ com.apple.usernotifications.service
+ NSExtensionPrincipalClass
+ $(PRODUCT_MODULE_NAME).NotificationService
+
+
+
\ No newline at end of file
diff --git a/expo-plugins/notification-service-ios/dist/ios-notification-service-files/NotifeeNotificationServiceExtension.entitlements b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/NotifeeNotificationServiceExtension.entitlements
new file mode 100644
index 000000000..5366d587d
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/NotifeeNotificationServiceExtension.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.application-groups
+
+ [APP_GROUPS_PLACEHOLDER]
+
+
+
\ No newline at end of file
diff --git a/expo-plugins/notification-service-ios/dist/ios-notification-service-files/NotificationService.swift b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/NotificationService.swift
new file mode 100644
index 000000000..8b8cb4ac9
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/NotificationService.swift
@@ -0,0 +1,135 @@
+import UserNotifications
+import RNNotifeeCore
+import MMKV
+import SwiftCryptoTokenFormatter
+import BigInt
+
+struct ChainInfo: Codable {
+ let name: String
+ let symbol: String
+ let decimals: Int
+}
+
+struct ExtensionStore: Codable {
+ let chains: [String: ChainInfo]
+ let contacts: [String: String]
+}
+
+func loadExtensionStore() -> ExtensionStore? {
+ guard let groupDir = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "[NOTIFICATION_APP_GROUP_IDENTIFIER]")?.path else {
+ NSLog("[NotifeeDebug] Failed to get app group directory")
+ return nil
+ }
+ guard let kv = MMKV(mmapID: "extension", cryptKey: nil, rootPath: groupDir, mode: .multiProcess, expectedCapacity: 0) else {
+ NSLog("[NotifeeDebug] Failed to open MMKV")
+ return nil
+ }
+ guard let json = kv.string(forKey: "notification-extension-data") else {
+ NSLog("[NotifeeDebug] No data found for notification-extension-data key")
+ return nil
+ }
+ guard let data = json.data(using: String.Encoding.utf8) else {
+ NSLog("[NotifeeDebug] Failed to convert json to data")
+ return nil
+ }
+ return try? JSONDecoder().decode(ExtensionStore.self, from: data)
+}
+
+
+func parseNotification(userInfo: [AnyHashable: Any], store: ExtensionStore) -> (String, String)? {
+ NSLog("[NotifeeDebug] Parsing notification with userInfo: \(userInfo)")
+
+ guard let type = userInfo["type"] as? String else {
+ NSLog("[NotifeeDebug] No type found in notification")
+ return nil
+ }
+ NSLog("[NotifeeDebug] Notification type: \(type)")
+
+ let chainId = userInfo["chainId"] as? String
+ let address = userInfo["address"] as? String
+
+ NSLog("[NotifeeDebug] ChainId: \(chainId ?? "nil"), Address: \(address ?? "nil")")
+
+ let chainInfo = chainId.flatMap { store.chains[$0] }
+ let chainName = chainInfo?.name ?? (chainId != nil ? "Chain Id \(chainId!)" : "")
+ let safeName = address.flatMap { store.contacts[$0] } ?? (address ?? "")
+
+ NSLog("[NotifeeDebug] Resolved chainName: \(chainName), safeName: \(safeName)")
+
+ switch type {
+ case "INCOMING_ETHER":
+ // Use chain symbol if available, otherwise fall back to userInfo or default
+ let symbol = chainInfo?.symbol ?? userInfo["symbol"] as? String ?? "ETH"
+ let formatter = TokenFormatter()
+ let value = userInfo["value"] as? String ?? ""
+ // Use chain decimals if available, otherwise fall back to userInfo or default
+ let decimals = chainInfo?.decimals ?? Int(userInfo["decimals"] as? String ?? "18") ?? 18
+ let amount = formatter.string(
+ from: BigDecimal(BigInt(value) ?? BigInt(0), decimals),
+ decimalSeparator: Locale.autoupdatingCurrent.decimalSeparator ?? ".",
+ thousandSeparator: Locale.autoupdatingCurrent.groupingSeparator ?? ",")
+
+ return ("Incoming \(symbol) (\(chainName))", "\(safeName): \(amount) \(symbol) received")
+ case "INCOMING_TOKEN":
+ return ("Incoming token (\(chainName))", "\(safeName): tokens received")
+ case "EXECUTED_MULTISIG_TRANSACTION":
+ let status = (userInfo["failed"] as? String) == "true" ? "failed" : "successful"
+ return ("Transaction \(status) (\(chainName))", "\(safeName): Transaction \(status)")
+ case "CONFIRMATION_REQUEST":
+ return ("Confirmation required (\(chainName))", "\(safeName): A transaction requires your confirmation!")
+ default:
+ return nil
+ }
+}
+
+class NotificationService: UNNotificationServiceExtension {
+ let appGroup = "[NOTIFICATION_APP_GROUP_IDENTIFIER]"
+ var contentHandler: ((UNNotificationContent) -> Void)?
+ var bestAttemptContent: UNMutableNotificationContent?
+
+ override init() {
+ super.init()
+ if let groupDir = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroup)?.path {
+ MMKV.initialize(rootDir: groupDir)
+ } else {
+ NSLog("[NotifeeDebug] Failed to initialize MMKV: couldn't get app group directory")
+ }
+ }
+
+ override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
+ NSLog("[NotifeeDebug] Received notification request with id: \(request.identifier)")
+ self.contentHandler = contentHandler
+ self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
+
+ if let mutable = self.bestAttemptContent {
+ NSLog("[NotifeeDebug] Successfully created mutable content")
+
+ if let store = loadExtensionStore() {
+ NSLog("[NotifeeDebug] Successfully loaded extension store")
+
+ if let parsed = parseNotification(userInfo: request.content.userInfo, store: store) {
+ NSLog("[NotifeeDebug] Successfully parsed notification: title=\(parsed.0), body=\(parsed.1)")
+ mutable.title = parsed.0
+ mutable.body = parsed.1
+ mutable.badge = 1
+ } else {
+ NSLog("[NotifeeDebug] Failed to parse notification")
+ }
+ } else {
+ NSLog("[NotifeeDebug] Failed to load extension store")
+ }
+
+ NotifeeExtensionHelper.populateNotificationContent(request, with: mutable, withContentHandler: contentHandler)
+ } else {
+ NSLog("[NotifeeDebug] Failed to create mutable content")
+ contentHandler(request.content)
+ }
+ }
+
+ override func serviceExtensionTimeWillExpire() {
+ NSLog("[NotifeeDebug] Service extension time will expire")
+ if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
+ contentHandler(bestAttemptContent)
+ }
+ }
+}
diff --git a/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/BoolString.swift b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/BoolString.swift
new file mode 100644
index 000000000..749130421
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/BoolString.swift
@@ -0,0 +1,40 @@
+//
+// BoolString.swift
+// Multisig
+//
+// Created by Dmitry Bespalov on 26.07.21.
+// Copyright © 2021 Gnosis Ltd. All rights reserved.
+//
+
+import Foundation
+
+struct BoolString: Hashable, Codable {
+ var value: Bool
+
+ init(_ value: Bool) {
+ self.value = value
+ }
+
+ init(from decoder: Decoder) throws {
+ let container = try decoder.singleValueContainer()
+ let string = try container.decode(String.self)
+ value = string == "true"
+ }
+
+ func encode(to encoder: Encoder) throws {
+ var container = encoder.singleValueContainer()
+ try container.encode(value ? "true" : "false")
+ }
+}
+
+extension BoolString: ExpressibleByStringLiteral {
+ init(stringLiteral value: StringLiteralType) {
+ self.init(value == "true")
+ }
+}
+
+extension BoolString: CustomStringConvertible {
+ var description: String {
+ String(describing: value)
+ }
+}
diff --git a/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/CharacterSet+Hex.swift b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/CharacterSet+Hex.swift
new file mode 100644
index 000000000..b43b8359d
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/CharacterSet+Hex.swift
@@ -0,0 +1,24 @@
+//
+// CharacterSet+Hex.swift
+// Multisig
+//
+// Created by Moaaz on 5/22/20.
+// Copyright © 2020 Gnosis Ltd. All rights reserved.
+//
+
+import Foundation
+
+extension CharacterSet {
+
+ static var hexadecimalNumbers: CharacterSet {
+ return ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
+ }
+
+ static var hexadecimalLetters: CharacterSet {
+ return ["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]
+ }
+
+ static var hexadecimals: CharacterSet {
+ return hexadecimalNumbers.union(hexadecimalLetters)
+ }
+}
diff --git a/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/ConfigurationKey.swift b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/ConfigurationKey.swift
new file mode 100644
index 000000000..993c396be
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/ConfigurationKey.swift
@@ -0,0 +1,122 @@
+//
+// Configuration.swift
+// Multisig
+//
+// Created by Dmitry Bespalov on 27.05.20.
+// Copyright © 2020 Gnosis Ltd. All rights reserved.
+//
+
+import Foundation
+
+/// Allows to fetch a variable from the main Info.plist or override it
+/// with a concrete value.
+///
+/// All of the standard data types present in the Plist format
+/// are supported as well, plus the URL type that is converted from String
+/// value.
+///
+/// The supported values conform to the `InfoPlistValueType` protocol.
+/// You can conform your own types to this protocol.
+///
+/// Example usage:
+///
+/// struct Configuration {
+///
+/// @ConfigurationKey("TERMS_URL")
+/// var termsURL: URL
+///
+/// @ConfigurationKey("RELAY_SERVICE_URL")
+/// var relayServiceURL: URL
+///
+/// }
+///
+/// IMPORTANT: test your configuration values, otherwise the app will
+/// crash if the value with the specified key is not found or if the value
+/// cannot be converted to the supported type.
+///
+@propertyWrapper
+struct ConfigurationKey {
+ private let key: String
+ private var override: T?
+
+ init(_ key: String) {
+ self.key = key
+ }
+
+ var wrappedValue: T {
+ get {
+ if let overriden = override { return overriden }
+ guard let value = Bundle.main.object(forInfoDictionaryKey: key) else {
+ preconditionFailure("Configuration key \(key) not found in the info dictionary")
+ }
+ return T.convert(from: value)
+ }
+ set {
+ override = newValue
+ }
+ }
+
+}
+
+/// Value type that is used in the Info.plist dictionary
+protocol InfoPlistValueType {
+ /// Converts value from a plist object to the protocol's implementation type
+ /// - Parameter value: a value from Info.plist dictionary
+ static func convert(from value: Any) -> Self
+}
+
+extension URL: InfoPlistValueType {
+ static func convert(from value: Any) -> URL {
+ URL(string: value as! String)!
+ }
+}
+
+extension String: InfoPlistValueType {
+ static func convert(from value: Any) -> Self {
+ value as! String
+ }
+}
+
+extension Int: InfoPlistValueType {
+ static func convert(from value: Any) -> Self {
+ value as! Int
+ }
+}
+
+extension Double: InfoPlistValueType {
+ static func convert(from value: Any) -> Self {
+ value as! Double
+ }
+}
+
+extension Bool: InfoPlistValueType {
+ static func convert(from value: Any) -> Self {
+ if let bool = value as? Bool { return bool }
+ else if let nsString = value as? NSString { return nsString.boolValue }
+ preconditionFailure("Invalid configuration value: \(value)")
+ }
+}
+
+extension Dictionary: InfoPlistValueType where Key == String, Value == Any {
+ static func convert(from value: Any) -> Self {
+ value as! [String: Any]
+ }
+}
+
+extension Array: InfoPlistValueType where Element == Any {
+ static func convert(from value: Any) -> Self {
+ value as! [Any]
+ }
+}
+
+extension Date: InfoPlistValueType {
+ static func convert(from value: Any) -> Self {
+ value as! Date
+ }
+}
+
+extension Data: InfoPlistValueType {
+ static func convert(from value: Any) -> Self {
+ value as! Data
+ }
+}
diff --git a/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/Data+MultisigExtension.swift b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/Data+MultisigExtension.swift
new file mode 100644
index 000000000..7f0a736c0
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/Data+MultisigExtension.swift
@@ -0,0 +1,102 @@
+//
+// Copyright © 2018 Gnosis Ltd. All rights reserved.
+//
+
+import Foundation
+import CryptoSwift
+
+// MARK: - Hex String to Data conversion
+public extension Data {
+
+ static func value(of nibble: UInt8) -> UInt8? {
+ guard let letter = String(bytes: [nibble], encoding: .ascii) else { return nil }
+ return UInt8(letter, radix: 16)
+ }
+
+ // TODO: Duplicate code. Remove and use init(hex: String) instead, when
+ // disambiguation with other implementations of Data.init?(hex:) has been achieved
+ init(hexWC: String) {
+ var data = Data()
+ let string = hexWC.hasPrefix("0x") ? String(hexWC.dropFirst(2)) : hexWC
+
+ // Convert the string to bytes for better performance
+ guard
+ let stringData = string.data(using: .ascii, allowLossyConversion: true)
+ else {
+ self = data
+ return
+ }
+
+ let stringBytes = Array(stringData)
+ for idx in stride(from: 0, to: stringBytes.count, by: 2) {
+ guard let high = Data.value(of: stringBytes[idx]) else {
+ data.removeAll()
+ break
+ }
+ if idx < stringBytes.count - 1, let low = Data.value(of: stringBytes[idx + 1]) {
+ data.append((high << 4) | low)
+ } else {
+ data.append(high)
+ }
+ }
+ self = data
+ }
+
+ /// Creates data from hex string, padding to even byte character count from the left with 0.
+ /// For example, "0x1" will become "0x01".
+ ///
+ /// - Parameter ethHex: hex string.
+ init(ethHex: String) {
+ var value = ethHex
+ while value.hasPrefix("0x") || value.hasPrefix("0X") { value = String(value.dropFirst(2)) }
+ // if ethHex is not full byte, Data(hex:) adds nibble at the end, but we need it in the beginning
+ let paddingToByte = value.count % 2 == 1 ? "0" : ""
+ value = paddingToByte + value
+ self.init(hexWC: value)
+ }
+
+ init?(exactlyHex hex: String) {
+ var value = hex.lowercased()
+ if value.hasPrefix("0x") {
+ value.removeFirst(2)
+ }
+ guard value.rangeOfCharacter(from: CharacterSet.hexadecimals.inverted) == nil else {
+ return nil
+ }
+ self.init(hexWC: value)
+ }
+
+ func toHexStringWithPrefix() -> String {
+ "0x" + toHexString()
+ }
+
+ /// Pads data with `value` from the left to total width of `count`
+ ///
+ /// - Parameters:
+ /// - count: total padded with=
+ /// - value: padding value, default is 0
+ /// - Returns: padded data of size `count`
+ func leftPadded(to count: Int, with value: UInt8 = 0) -> Data {
+ if self.count >= count { return self }
+ return Data(repeating: value, count: count - self.count) + self
+ }
+
+ func rightPadded(to count: Int, with value: UInt8 = 0) -> Data {
+ if self.count >= count { return self }
+ return self + Data(repeating: value, count: count - self.count)
+ }
+
+ func endTruncated(to count: Int) -> Data {
+ guard self.count > count else { return self }
+ return prefix(count)
+ }
+
+ init?(randomOfSize count: Int) {
+ var bytes: [UInt8] = .init(repeating: 0, count: count)
+ let result = SecRandomCopyBytes(kSecRandomDefault, bytes.count, &bytes)
+ guard result == errSecSuccess else {
+ return nil
+ }
+ self.init(bytes)
+ }
+}
diff --git a/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/DataString.swift b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/DataString.swift
new file mode 100644
index 000000000..a5641ffe3
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/DataString.swift
@@ -0,0 +1,45 @@
+//
+// DataString.swift
+// Multisig
+//
+// Created by Dmitry Bespalov on 16.06.20.
+// Copyright © 2020 Gnosis Ltd. All rights reserved.
+//
+
+import Foundation
+
+struct DataString: Hashable, Codable {
+ let data: Data
+
+ init(_ data: Data) {
+ self.data = data
+ }
+
+ init(hex: String) {
+ self.data = Data(hex: hex)
+ }
+
+ init(from decoder: Decoder) throws {
+ let container = try decoder.singleValueContainer()
+ let string = try container.decode(String.self)
+ data = Data(hex: string)
+ }
+
+ func encode(to encoder: Encoder) throws {
+ var container = encoder.singleValueContainer()
+ try container.encode(data.toHexStringWithPrefix())
+ }
+
+}
+
+extension DataString: ExpressibleByStringLiteral {
+ init(stringLiteral value: StringLiteralType) {
+ self.init(Data(ethHex: value))
+ }
+}
+
+extension DataString: CustomStringConvertible {
+ var description: String {
+ data.toHexStringWithPrefix()
+ }
+}
diff --git a/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/UInt256.swift b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/UInt256.swift
new file mode 100644
index 000000000..76a4120c8
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/UInt256.swift
@@ -0,0 +1,19 @@
+//
+// UInt256.swift
+// Multisig
+//
+// Created by Dmitry Bespalov on 15.06.20.
+// Copyright © 2020 Gnosis Ltd. All rights reserved.
+//
+
+import Foundation
+import BigInt
+
+typealias UInt256 = BigUInt
+typealias Int256 = BigInt
+
+extension UInt256 {
+ var data32: Data {
+ Data(ethHex: String(self, radix: 16)).leftPadded(to: 32).suffix(32)
+ }
+}
diff --git a/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/UInt256String.swift b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/UInt256String.swift
new file mode 100644
index 000000000..75528d842
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/ios-notification-service-files/Utils/UInt256String.swift
@@ -0,0 +1,78 @@
+//
+// UInt256String.swift
+// Multisig
+//
+// Created by Dmitry Bespalov on 16.06.20.
+// Copyright © 2020 Gnosis Ltd. All rights reserved.
+//
+
+import Foundation
+
+struct UInt256String: Hashable, Codable {
+ let value: UInt256
+
+ var data32: Data {
+ value.data32
+ }
+
+ init(_ value: T) where T: BinaryInteger {
+ self.value = UInt256(value)
+ }
+
+ init(_ value: UInt256) {
+ self.value = value
+ }
+
+ init(from decoder: Decoder) throws {
+ let container = try decoder.singleValueContainer()
+ if let string = try? container.decode(String.self) {
+ if string.hasPrefix("0x") {
+ let data = Data(ethHex: string)
+ value = UInt256(data)
+ } else if let uint256 = UInt256(string) {
+ value = uint256
+ } else {
+ let context = DecodingError.Context.init(
+ codingPath: decoder.codingPath,
+ debugDescription: "Could not convert String \(string) to UInt256")
+ throw DecodingError.valueNotFound(UInt256.self, context)
+ }
+ } else if let uint = try? container.decode(UInt.self) {
+ value = UInt256(uint)
+ } else if let int = try? container.decode(Int.self), int >= 0 {
+ value = UInt256(int)
+ } else {
+ let context = DecodingError.Context.init(
+ codingPath: decoder.codingPath,
+ debugDescription: "Could not convert value to UInt256")
+ throw DecodingError.valueNotFound(UInt256.self, context)
+ }
+ }
+
+ func encode(to encoder: Encoder) throws {
+ var container = encoder.singleValueContainer()
+ try container.encode(value.description)
+ }
+}
+
+extension UInt256String: ExpressibleByStringLiteral {
+ init(stringLiteral value: StringLiteralType) {
+ if let uint256Value = UInt256(value) {
+ self = UInt256String(uint256Value)
+ } else {
+ preconditionFailure("Invalid literal UInt256 value: \(value)")
+ }
+ }
+}
+
+extension UInt256String: ExpressibleByIntegerLiteral {
+ init(integerLiteral value: UInt) {
+ self.init(UInt256(value))
+ }
+}
+
+extension UInt256String: CustomStringConvertible {
+ var description: String {
+ String(value)
+ }
+}
diff --git a/expo-plugins/notification-service-ios/dist/plugin/config.d.ts b/expo-plugins/notification-service-ios/dist/plugin/config.d.ts
new file mode 100644
index 000000000..e72b8ba50
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/plugin/config.d.ts
@@ -0,0 +1,19 @@
+/** IOS */
+export declare const DEFAULT_IOS_BUILD_NUMBER = '1'
+export declare const DEFAULT_APP_VERSION = '1.0.0'
+export declare const DEFAULT_IOS_DEPLOYMENT_TARGET = '13.4'
+export declare const TARGET_DEVICES = '"1,2"'
+export declare const EXTENSION_SERVICE_NAME = 'NotifeeNotificationServiceExtension'
+export declare const EXTENSION_SERVICE_FILE = 'NotificationService.swift'
+export declare const FILES_TO_ADD: string[]
+export declare const PODFILE_MODIF_NEEDED =
+ "\n$NotifeeExtension = true\ntarget 'NotifeeNotificationServiceExtension' do\n pod 'RNNotifeeCore', :path => '../../../node_modules/@notifee/react-native/RNNotifeeCore.podspec'\n pod 'MMKV', :git => 'https://github.com/Tencent/MMKV.git', :branch => 'master'\n pod 'CryptoSwift', '~> 1.8.3'\n pod 'SwiftCryptoTokenFormatter', :git => 'https://github.com/compojoom/SwiftCryptoTokenFormatter', :branch => 'main'\n use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']\nend"
+export declare const PODFILE_TARGET_STRING = "target 'NotifeeNotificationServiceExtension'"
+export declare const APP_VERSION_STRING = '[IF_YOU_SEE_THIS_YOU_FORGOT_TO_ADD_APP_VERSION_IN_EXPO_CONFIG]'
+export declare const BUNDLE_IDENTIFIER_STRING =
+ '[IF_YOU_SEE_THIS_YOU_FORGOT_TO_ADD_BUNDLE_IDENTIFIER_IN_IOS_EXPO_CONFIG]'
+export declare const IOS_BUILD_NUMBER_STRING = '[IF_YOU_SEE_THIS_YOU_FORGOT_TO_ADD_BUILD_NUMBER_IN_IOS_EXPO_CONFIG]'
+export declare const NOTIFICATION_APP_GROUP_IDENTIFIER_STRING = '[NOTIFICATION_APP_GROUP_IDENTIFIER]'
+export declare const APP_GROUPS_PLACEHOLDER = '[APP_GROUPS_PLACEHOLDER]'
+export declare const BACKGROUND_MODES_TO_ENABLE: string[]
+export declare const USER_ACTIVITY_TYPES_KEYS: string[]
diff --git a/expo-plugins/notification-service-ios/dist/plugin/config.js b/expo-plugins/notification-service-ios/dist/plugin/config.js
new file mode 100644
index 000000000..262e60fee
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/plugin/config.js
@@ -0,0 +1,47 @@
+'use strict'
+Object.defineProperty(exports, '__esModule', { value: true })
+exports.USER_ACTIVITY_TYPES_KEYS =
+ exports.BACKGROUND_MODES_TO_ENABLE =
+ exports.APP_GROUPS_PLACEHOLDER =
+ exports.NOTIFICATION_APP_GROUP_IDENTIFIER_STRING =
+ exports.IOS_BUILD_NUMBER_STRING =
+ exports.BUNDLE_IDENTIFIER_STRING =
+ exports.APP_VERSION_STRING =
+ exports.PODFILE_TARGET_STRING =
+ exports.PODFILE_MODIF_NEEDED =
+ exports.FILES_TO_ADD =
+ exports.EXTENSION_SERVICE_FILE =
+ exports.EXTENSION_SERVICE_NAME =
+ exports.TARGET_DEVICES =
+ exports.DEFAULT_IOS_DEPLOYMENT_TARGET =
+ exports.DEFAULT_APP_VERSION =
+ exports.DEFAULT_IOS_BUILD_NUMBER =
+ void 0
+/** IOS */
+exports.DEFAULT_IOS_BUILD_NUMBER = '1'
+exports.DEFAULT_APP_VERSION = '1.0.0'
+exports.DEFAULT_IOS_DEPLOYMENT_TARGET = '13.4'
+exports.TARGET_DEVICES = '"1,2"' // IPHONE / IPAD
+exports.EXTENSION_SERVICE_NAME = 'NotifeeNotificationServiceExtension'
+exports.EXTENSION_SERVICE_FILE = 'NotificationService.swift'
+exports.FILES_TO_ADD = [
+ `NotifeeNotificationServiceExtension-Info.plist`,
+ `NotifeeNotificationServiceExtension.entitlements`,
+]
+exports.PODFILE_MODIF_NEEDED = `
+$NotifeeExtension = true
+target 'NotifeeNotificationServiceExtension' do
+ pod 'RNNotifeeCore', :path => '../../../node_modules/@notifee/react-native/RNNotifeeCore.podspec'
+ pod 'MMKV', :git => 'https://github.com/Tencent/MMKV.git', :branch => 'master'
+ pod 'CryptoSwift', '~> 1.8.3'
+ pod 'SwiftCryptoTokenFormatter', :git => 'https://github.com/compojoom/SwiftCryptoTokenFormatter', :branch => 'main'
+ use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
+end`
+exports.PODFILE_TARGET_STRING = "target 'NotifeeNotificationServiceExtension'"
+exports.APP_VERSION_STRING = '[IF_YOU_SEE_THIS_YOU_FORGOT_TO_ADD_APP_VERSION_IN_EXPO_CONFIG]'
+exports.BUNDLE_IDENTIFIER_STRING = '[IF_YOU_SEE_THIS_YOU_FORGOT_TO_ADD_BUNDLE_IDENTIFIER_IN_IOS_EXPO_CONFIG]'
+exports.IOS_BUILD_NUMBER_STRING = '[IF_YOU_SEE_THIS_YOU_FORGOT_TO_ADD_BUILD_NUMBER_IN_IOS_EXPO_CONFIG]'
+exports.NOTIFICATION_APP_GROUP_IDENTIFIER_STRING = '[NOTIFICATION_APP_GROUP_IDENTIFIER]'
+exports.APP_GROUPS_PLACEHOLDER = '[APP_GROUPS_PLACEHOLDER]'
+exports.BACKGROUND_MODES_TO_ENABLE = ['remote-notification']
+exports.USER_ACTIVITY_TYPES_KEYS = ['INSendMessageIntent']
diff --git a/expo-plugins/notification-service-ios/dist/plugin/ios.d.ts b/expo-plugins/notification-service-ios/dist/plugin/ios.d.ts
new file mode 100644
index 000000000..ac274cd3a
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/plugin/ios.d.ts
@@ -0,0 +1,14 @@
+import { NotifeeExpoPluginProps } from './types'
+import { ConfigPlugin } from '@expo/config-plugins'
+declare const _default: {
+ setAPSEnvironment: ConfigPlugin
+ addCommunicationNotificationsCapability: ConfigPlugin
+ addBackgroundModes: ConfigPlugin
+ addNotificationServiceFilesToProject: ConfigPlugin
+ addNotifeeToPodfile: ConfigPlugin
+ signAppAndNotificationServiceExtension: ConfigPlugin
+ createAndAddNotificationServiceExtensionTarget: ConfigPlugin
+ addNotifeeTargetToExpoAppExtensions: ConfigPlugin
+ addNotificationServiceGroup: ConfigPlugin
+}
+export default _default
diff --git a/expo-plugins/notification-service-ios/dist/plugin/ios.js b/expo-plugins/notification-service-ios/dist/plugin/ios.js
new file mode 100644
index 000000000..f37da569c
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/plugin/ios.js
@@ -0,0 +1,452 @@
+'use strict'
+var __createBinding =
+ (this && this.__createBinding) ||
+ (Object.create
+ ? function (o, m, k, k2) {
+ if (k2 === undefined) k2 = k
+ var desc = Object.getOwnPropertyDescriptor(m, k)
+ if (!desc || ('get' in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = {
+ enumerable: true,
+ get: function () {
+ return m[k]
+ },
+ }
+ }
+ Object.defineProperty(o, k2, desc)
+ }
+ : function (o, m, k, k2) {
+ if (k2 === undefined) k2 = k
+ o[k2] = m[k]
+ })
+var __setModuleDefault =
+ (this && this.__setModuleDefault) ||
+ (Object.create
+ ? function (o, v) {
+ Object.defineProperty(o, 'default', { enumerable: true, value: v })
+ }
+ : function (o, v) {
+ o['default'] = v
+ })
+var __importStar =
+ (this && this.__importStar) ||
+ (function () {
+ var ownKeys = function (o) {
+ ownKeys =
+ Object.getOwnPropertyNames ||
+ function (o) {
+ var ar = []
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k
+ return ar
+ }
+ return ownKeys(o)
+ }
+ return function (mod) {
+ if (mod && mod.__esModule) return mod
+ var result = {}
+ if (mod != null)
+ for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== 'default') __createBinding(result, mod, k[i])
+ __setModuleDefault(result, mod)
+ return result
+ }
+ })()
+Object.defineProperty(exports, '__esModule', { value: true })
+const config_plugins_1 = require('@expo/config-plugins')
+const fs = __importStar(require('fs'))
+const path = __importStar(require('path'))
+const config_1 = require('./config')
+const utils_1 = require('./utils')
+/**
+ * Adds Notifee to the iOS Podfile within an Expo project configuration.
+ *
+ * @param {object} c - The Expo configuration object.
+ * @returns {object} - The updated Expo configuration object after modifying the Podfile.
+ */
+const addNotifeeToPodfile = (c) => {
+ return (0, config_plugins_1.withDangerousMod)(c, [
+ 'ios',
+ async (c) => {
+ const pathToPodfile = path.join(c.modRequest.projectRoot, 'ios', 'Podfile')
+ try {
+ const podfile = fs.readFileSync(pathToPodfile, 'utf8')
+ const hasAlreadyNeededChanges = podfile.includes(config_1.PODFILE_TARGET_STRING)
+ //Add at end of podfile
+ if (!hasAlreadyNeededChanges) {
+ fs.appendFileSync(pathToPodfile, config_1.PODFILE_MODIF_NEEDED)
+ }
+ ;(0, utils_1.log)('Added Notifee to Podfile')
+ } catch {
+ ;(0, utils_1.throwError)('Error when trying to add Notifee to Podfile')
+ }
+ return c
+ },
+ ])
+}
+/**
+ * Adds necessary notification service files to the iOS project for Notifee configuration.
+ *
+ * @param {object} c - The Expo configuration object.
+ * @param {NotifeeExpoPluginProps} props - The properties required for configuring Notifee-Expo-Plugin.
+ * @returns {object} - The updated Expo configuration object after adding the notification service files.
+ */
+const addNotificationServiceFilesToProject = (c, props) => {
+ const serviceExtensionFilesFolderPath = path.join(
+ require.resolve('@safe-global/notification-service-ios/package.json'),
+ '../ios-notification-service-files/',
+ )
+ const updatedConfig = (0, config_plugins_1.withDangerousMod)(c, [
+ 'ios',
+ async (config) => {
+ const p = path.join(config.modRequest.projectRoot, 'ios')
+ try {
+ //Create folders
+ fs.mkdirSync(path.join(p, config_1.EXTENSION_SERVICE_NAME), { recursive: true })
+ if (!config.version) {
+ ;(0, utils_1.logError)("You need to define 'version' in the expo config!")
+ }
+ const appVersion = !!config.version ? config.version : config_1.DEFAULT_APP_VERSION
+ if (!c.ios || !c.ios.bundleIdentifier) {
+ ;(0, utils_1.logError)("You need to define 'bundleIdentifier' in the ios object of the expo config!")
+ }
+ const bundleIdentifier = 'group.' + config.ios?.bundleIdentifier + '.notifee'
+ if (!c.ios || !c.ios.bundleIdentifier) {
+ ;(0, utils_1.logError)("You need to define 'buildNumber' in the ios object of the expo config!")
+ }
+ const buildNumber = !!config.ios?.buildNumber ? config.ios.buildNumber : config_1.DEFAULT_IOS_BUILD_NUMBER
+ //Transfer files & Edit necessary values
+ for (const fileName of config_1.FILES_TO_ADD) {
+ const pathToFileToRead = path.join(serviceExtensionFilesFolderPath, fileName)
+ const pathWhereToWrite = path.join(p, config_1.EXTENSION_SERVICE_NAME, fileName)
+ let file = fs.readFileSync(pathToFileToRead, 'utf8')
+ if (fileName === config_1.EXTENSION_SERVICE_NAME + '-Info.plist') {
+ file = file.replace(config_1.APP_VERSION_STRING, appVersion)
+ file = file.replace(config_1.IOS_BUILD_NUMBER_STRING, buildNumber)
+ } else if (fileName === config_1.EXTENSION_SERVICE_NAME + '.entitlements') {
+ // Build the app groups array for entitlements
+ const defaultNotifeeGroup = bundleIdentifier
+ const mainAppGroup = props.appGroupIdentifier || `group.${config.ios?.bundleIdentifier}`
+ const additionalGroups = props.additionalAppGroups || []
+ // Combine all app groups (notifee group + main app group + additional groups)
+ const allAppGroups = [defaultNotifeeGroup, mainAppGroup, ...additionalGroups]
+ // Remove duplicates
+ const uniqueAppGroups = Array.from(new Set(allAppGroups))
+ // Generate the XML string for app groups
+ const appGroupsXml = uniqueAppGroups.map((group) => `\t\t${group}`).join('\n')
+ file = file.replace(config_1.APP_GROUPS_PLACEHOLDER, appGroupsXml)
+ }
+ fs.writeFileSync(pathWhereToWrite, file)
+ }
+ // Copy Utils folder if it exists
+ const sourceUtilsPath = path.join(serviceExtensionFilesFolderPath, 'Utils')
+ const destUtilsPath = path.join(p, config_1.EXTENSION_SERVICE_NAME, 'Utils')
+ if (fs.existsSync(sourceUtilsPath)) {
+ // Create Utils directory if it doesn't exist
+ fs.mkdirSync(destUtilsPath, { recursive: true })
+ // Copy all files from Utils directory
+ const utilsFiles = fs.readdirSync(sourceUtilsPath)
+ for (const utilFile of utilsFiles) {
+ const sourcePath = path.join(sourceUtilsPath, utilFile)
+ const destPath = path.join(destUtilsPath, utilFile)
+ fs.copyFileSync(sourcePath, destPath)
+ }
+ ;(0, utils_1.log)('Copied Utils folder successfully!')
+ }
+ const notificationServicePath = !!props.customNotificationServiceFilePath
+ ? props.customNotificationServiceFilePath
+ : path.join(serviceExtensionFilesFolderPath, config_1.EXTENSION_SERVICE_FILE)
+ const pathWhereToWriteNotificationService = path.join(
+ p,
+ config_1.EXTENSION_SERVICE_NAME,
+ config_1.EXTENSION_SERVICE_FILE,
+ )
+ // Determine the app group identifier to use
+ const appGroupIdentifier = props.appGroupIdentifier || `group.${config.ios?.bundleIdentifier}`
+ let notificationServiceFile = fs.readFileSync(notificationServicePath, 'utf8')
+ // Replace the app group identifier placeholder
+ notificationServiceFile = notificationServiceFile.replaceAll(
+ config_1.NOTIFICATION_APP_GROUP_IDENTIFIER_STRING,
+ appGroupIdentifier,
+ )
+ fs.writeFileSync(pathWhereToWriteNotificationService, notificationServiceFile)
+ ;(0, utils_1.log)('Added NotificationService files!')
+ } catch {
+ ;(0, utils_1.logError)('serviceExtensionFilesFolderPath: ' + serviceExtensionFilesFolderPath)
+ ;(0, utils_1.logError)('Error while copying notification service files')
+ }
+ return config
+ },
+ ])
+ //Make files added before available in xcode project
+ return (0, config_plugins_1.withXcodeProject)(updatedConfig, (nc) => {
+ const x = nc.modResults
+ // Create the main service extension group
+ const mainGroup = x.addPbxGroup(
+ [...config_1.FILES_TO_ADD, config_1.EXTENSION_SERVICE_FILE],
+ config_1.EXTENSION_SERVICE_NAME,
+ config_1.EXTENSION_SERVICE_NAME,
+ )
+ // Create Utils subgroup if files exist
+ const sourceUtilsPath = path.join(serviceExtensionFilesFolderPath, 'Utils')
+ if (fs.existsSync(sourceUtilsPath)) {
+ const utilsFiles = fs.readdirSync(sourceUtilsPath)
+ if (utilsFiles.length > 0) {
+ // Create a Utils subgroup within the main group
+ const utilsGroup = x.addPbxGroup(utilsFiles, 'Utils', 'Utils')
+ // Add the Utils group to the main group
+ x.addToPbxGroup(utilsGroup.uuid, mainGroup.uuid)
+ // Add Utils files to Sources build phase
+ const target = x.pbxTargetByName(config_1.EXTENSION_SERVICE_NAME)
+ if (target) {
+ const sourcesBuildPhase = x.buildPhaseObject('PBXSourcesBuildPhase', 'Sources', target.uuid)
+ if (sourcesBuildPhase) {
+ for (const utilFile of utilsFiles) {
+ if (utilFile.endsWith('.swift')) {
+ x.addToPbxBuildFileSection(`Utils/${utilFile}`)
+ x.addToPbxSourcesBuildPhase(`Utils/${utilFile}`, sourcesBuildPhase)
+ }
+ }
+ }
+ }
+ }
+ }
+ // Add the main group to the root group
+ const pbxs = x.hash.project.objects['PBXGroup']
+ Object.keys(pbxs).forEach(function (v) {
+ if (typeof pbxs[v] === 'object' && !pbxs[v].name && !pbxs[v].path) {
+ x.addToPbxGroup(mainGroup.uuid, v)
+ }
+ })
+ return nc
+ })
+}
+/**
+ * Signs the main iOS app target and the notification service extension target with the specified Apple development team ID.
+ *
+ * @param {object} c - The current Expo configuration object.
+ * @param {NotifeeExpoPluginProps} props - The properties containing the Apple development team ID.
+ * @returns {object} - The updated Expo configuration object after signing targets.
+ */
+const signAppAndNotificationServiceExtension = (c, props) => {
+ if (!props.appleDevTeamId) {
+ return c
+ }
+ return (0, config_plugins_1.withXcodeProject)(c, (nc) => {
+ const xcodeProject = nc.modResults
+ //Sign main target
+ const mainTarget = xcodeProject.pbxTargetByName(c.name)
+ if (mainTarget) {
+ xcodeProject.addTargetAttribute('DevelopmentTeam', props.appleDevTeamId, mainTarget)
+ }
+ //Sign notification service extension target
+ const target = xcodeProject.pbxTargetByName(config_1.EXTENSION_SERVICE_NAME)
+ if (target) {
+ xcodeProject.addTargetAttribute('DevelopmentTeam', props.appleDevTeamId, target)
+ }
+ ;(0, utils_1.log)('Signed the main app and notification service extension targets with: ' + props.appleDevTeamId)
+ return nc
+ })
+}
+/**
+ * Sets the APS Environment Entitlement in the app's entitlements plist file to specify whether to use the development or production Apple Push Notification service (APNs).
+ *
+ * @param {object} c - The current Expo configuration object.
+ * @param {NotifeeExpoPluginProps} props - The properties containing the APS environment mode (production or development).
+ * @returns {object} - The updated Expo configuration object after setting the APS environment.
+ */
+const setAPSEnvironment = (c, props) => {
+ return (0, config_plugins_1.withEntitlementsPlist)(c, (nc) => {
+ nc.modResults['aps-environment'] = props.apsEnvMode
+ ;(0, utils_1.log)('Set aps-environment to: ' + props.apsEnvMode)
+ return nc
+ })
+}
+/**
+ * Adds the application group entitlement necessary for Notifee to the iOS project's entitlements plist.
+ *
+ * @param {object} c - The Expo configuration object.
+ * @returns {object} - The updated Expo configuration object with added application group entitlement.
+ */
+const addNotificationServiceGroup = (c) => {
+ return (0, config_plugins_1.withEntitlementsPlist)(c, (nc) => {
+ const g = 'com.apple.security.application-groups'
+ if (!Array.isArray(nc.modResults[g])) {
+ nc.modResults[g] = []
+ }
+ const gName = `group.${nc.ios?.bundleIdentifier}`
+ const modResults = nc.modResults[g]
+ if (!modResults.includes(gName)) {
+ modResults.push(gName)
+ }
+ ;(0, utils_1.log)(`Added '${gName} to com.apple.security.application-groups`)
+ return nc
+ })
+}
+/**
+ * Adds required background modes to the iOS project's Info.plist for Notifee functionality.
+ *
+ * @param {object} c - The Expo configuration object.
+ * @returns {object} - The updated Expo configuration object with added background modes.
+ */
+const addBackgroundModes = (c, props) => {
+ return (0, config_plugins_1.withInfoPlist)(c, (nc) => {
+ //Added this condition so it doesn't add background modes capability without anything selected when the user wants no background modes.
+ if (props.backgroundModes && props.backgroundModes.length === 0) {
+ return nc
+ }
+ if (!Array.isArray(nc.modResults.UIBackgroundModes)) {
+ nc.modResults.UIBackgroundModes = []
+ }
+ if (!props.backgroundModes) {
+ props.backgroundModes = config_1.BACKGROUND_MODES_TO_ENABLE
+ }
+ for (const mode of props.backgroundModes) {
+ if (!nc.modResults.UIBackgroundModes.includes(mode)) {
+ nc.modResults.UIBackgroundModes.push(mode)
+ }
+ }
+ ;(0, utils_1.log)('Added background modes (' + props.backgroundModes.join(', ') + ')')
+ return nc
+ })
+}
+/**
+ * Enables communication notifications capability for the iOS project if specified in props.
+ * This includes setting entitlements and adding necessary keys to Info.plist.
+ *
+ * @param {object} c - The Expo configuration object.
+ * @param {NotifeeExpoPluginProps} props - The properties object containing configuration options.
+ * @returns {object} - The updated Expo configuration object with added communication notifications capability.
+ */
+const addCommunicationNotificationsCapability = (c, props) => {
+ if (!props.enableCommunicationNotifications) {
+ return c
+ }
+ const updatedConfig = (0, config_plugins_1.withEntitlementsPlist)(c, (nc) => {
+ if (props.enableCommunicationNotifications) {
+ nc.modResults['com.apple.developer.usernotifications.communication'] = true
+ }
+ ;(0, utils_1.log)('Added communication notifications capability')
+ return nc
+ })
+ return (0, config_plugins_1.withInfoPlist)(updatedConfig, (nc) => {
+ if (!Array.isArray(nc.modResults.NSUserActivityTypes)) {
+ nc.modResults.NSUserActivityTypes = []
+ }
+ for (const v of config_1.USER_ACTIVITY_TYPES_KEYS) {
+ if (!nc.modResults.NSUserActivityTypes.includes(v)) {
+ nc.modResults.NSUserActivityTypes.push(v)
+ }
+ }
+ ;(0, utils_1.log)('Added INSendMessageIntent to NSUserActivityTypes for communication notifications')
+ return nc
+ })
+}
+/**
+ * Creates and adds a notification service extension target to the Xcode project if it doesn't already exist.
+ * Configures necessary settings and build phases for the extension target.
+ *
+ * @param {object} c - The Expo configuration object.
+ * @param {NotifeeExpoPluginProps} props - The properties object containing configuration options.
+ * @returns {object} - The updated Expo configuration object with the added notification service extension target.
+ */
+const createAndAddNotificationServiceExtensionTarget = (c, props) => {
+ return (0, config_plugins_1.withXcodeProject)(c, (nc) => {
+ const x = nc.modResults
+ if (!!x.pbxTargetByName(config_1.EXTENSION_SERVICE_NAME)) {
+ return nc
+ }
+ /**
+ * Needed or project with one target won't add notification extension service target
+ * correctly and it will throw cannot install podfiles
+ */
+ const po = x.hash.project.objects
+ po['PBXContainerItemProxy'] = po['PBXTargetDependency'] ?? {}
+ po['PBXTargetDependency'] = po['PBXTargetDependency'] ?? {}
+ // Create a new target for the notification service extension
+ const newTargetBundleIdentifier = c.ios?.bundleIdentifier + '.' + config_1.EXTENSION_SERVICE_NAME
+ const nt = x.addTarget(
+ config_1.EXTENSION_SERVICE_NAME,
+ 'app_extension',
+ config_1.EXTENSION_SERVICE_NAME,
+ newTargetBundleIdentifier,
+ )
+ // Add necessary files to the new target
+ x.addBuildPhase([], 'PBXFrameworksBuildPhase', 'Frameworks', nt.uuid)
+ x.addBuildPhase([], 'PBXResourcesBuildPhase', 'Resources', nt.uuid)
+ x.addBuildPhase(['NotificationService.swift'], 'PBXSourcesBuildPhase', 'Sources', nt.uuid)
+ // Set the info of notification service extension target
+ const config = x.pbxXCBuildConfigurationSection()
+ for (const v in config) {
+ if (
+ !!config[v].buildSettings &&
+ config[v].buildSettings.PRODUCT_NAME === `"${config_1.EXTENSION_SERVICE_NAME}"`
+ ) {
+ config[v].buildSettings = {
+ ...config[v].buildSettings,
+ TARGETED_DEVICE_FAMILY: config_1.TARGET_DEVICES,
+ IPHONEOS_DEPLOYMENT_TARGET: props.iosDeploymentTarget ?? config_1.DEFAULT_IOS_DEPLOYMENT_TARGET,
+ DEVELOPMENT_TEAM: props.appleDevTeamId,
+ CODE_SIGN_ENTITLEMENTS: `${config_1.EXTENSION_SERVICE_NAME}/${config_1.EXTENSION_SERVICE_NAME}.entitlements`,
+ CODE_SIGN_STYLE: 'Automatic',
+ SWIFT_VERSION: '5.0',
+ }
+ } else if (!!config[v].buildSettings && config[v].buildSettings.PRODUCT_NAME === `"${c.name}"`) {
+ config[v].buildSettings = {
+ ...config[v].buildSettings,
+ DEVELOPMENT_TEAM: props.appleDevTeamId,
+ }
+ }
+ }
+ ;(0, utils_1.log)(`Created Notification Service Extension (${newTargetBundleIdentifier})`)
+ return nc
+ })
+}
+/**
+ * Adds the Notifee target to the Expo app extensions configuration for EAS builds.
+ * Configures the target name, bundle identifier, and entitlements for the Notifee extension.
+ *
+ * @param {object} c - The Expo configuration object.
+ * @returns {object} - The updated Expo configuration object with Notifee target added to app extensions.
+ */
+const addNotifeeTargetToExpoAppExtensions = (c) => {
+ const bundleIdentifier = c.ios?.bundleIdentifier + '.' + config_1.EXTENSION_SERVICE_NAME
+ const expoAppExtension = {
+ targetName: config_1.EXTENSION_SERVICE_NAME,
+ bundleIdentifier,
+ entitlements: {
+ 'com.apple.security.application-groups': [
+ `group.${c.ios?.bundleIdentifier}.notifee`,
+ `group.${c.ios?.bundleIdentifier}`,
+ ],
+ },
+ }
+ return {
+ ...c,
+ extra: {
+ ...c.extra,
+ eas: {
+ ...c.extra?.eas,
+ build: {
+ ...c.extra?.eas?.build,
+ experimental: {
+ ...c.extra?.eas?.build?.experimental,
+ ios: {
+ ...c.extra?.eas?.build?.experimental?.ios,
+ appExtensions: [...(c.extra?.eas?.build?.experimental?.ios?.appExtensions ?? []), expoAppExtension],
+ },
+ },
+ },
+ },
+ },
+ }
+}
+exports.default = {
+ setAPSEnvironment,
+ addCommunicationNotificationsCapability,
+ addBackgroundModes,
+ addNotificationServiceFilesToProject,
+ addNotifeeToPodfile,
+ signAppAndNotificationServiceExtension,
+ createAndAddNotificationServiceExtensionTarget,
+ addNotifeeTargetToExpoAppExtensions,
+ addNotificationServiceGroup,
+}
diff --git a/expo-plugins/notification-service-ios/dist/plugin/types.d.ts b/expo-plugins/notification-service-ios/dist/plugin/types.d.ts
new file mode 100644
index 000000000..548562df2
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/plugin/types.d.ts
@@ -0,0 +1,54 @@
+/**
+ * Defines the possible types for Notifee Android icons.
+ */
+export type NotifeeAndroidIconType = 'large' | 'small'
+/**
+ * Defines the possible environments for Apple Push Notification Service (APNs).
+ */
+export type APSEnvironmentMode = 'production' | 'development'
+/**
+ * Describes the properties required for configuring Notifee-Expo-Plugin in an Expo project.
+ */
+export type NotifeeExpoPluginProps = {
+ /**
+ * Sets the APS Environment Entitlement. Determines whether to use the development or production
+ * Apple Push Notification service (APNs).
+ */
+ apsEnvMode: APSEnvironmentMode
+ /**
+ * Sets the deployment target of the notification service extension for iOS.
+ * This should match the deployment target of the main app.
+ */
+ iosDeploymentTarget: string
+ /**
+ * Specifies the background modes to enable for the app.
+ * If not provided, the default value will be: ["remote-notification"].
+ * On the other hand, an empty array [] will signal to the plugin to skip the backgroundModes step completly.
+ * See possible values here: https://developer.apple.com/documentation/bundleresources/information_property_list/uibackgroundmodes
+ */
+ backgroundModes?: string[]
+ /**
+ * Enables communication notifications, which adds the necessary configurations
+ * for communication notifications as mentioned in https://github.com/invertase/notifee/pull/526.
+ */
+ enableCommunicationNotifications?: boolean
+ /**
+ * Automatically signs the app and the notification service extension targets with the provided Apple developer team ID.
+ */
+ appleDevTeamId?: string
+ /**
+ * Specifies the path to a custom notification service file, which should already include
+ * the necessary configurations for Notifee along with any additional customizations.
+ */
+ customNotificationServiceFilePath?: string
+ /**
+ * Specifies the app group identifier to use for sharing data between the main app and the notification service extension.
+ * If not provided, defaults to the main app's bundle identifier app group (group.{bundleIdentifier}).
+ */
+ appGroupIdentifier?: string
+ /**
+ * Specifies additional app groups that the notification service extension should have access to.
+ * These will be added to the entitlements in addition to the default notifee app group.
+ */
+ additionalAppGroups?: string[]
+}
diff --git a/expo-plugins/notification-service-ios/dist/plugin/types.js b/expo-plugins/notification-service-ios/dist/plugin/types.js
new file mode 100644
index 000000000..0a483a32d
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/plugin/types.js
@@ -0,0 +1,2 @@
+'use strict'
+Object.defineProperty(exports, '__esModule', { value: true })
diff --git a/expo-plugins/notification-service-ios/dist/plugin/utils.d.ts b/expo-plugins/notification-service-ios/dist/plugin/utils.d.ts
new file mode 100644
index 000000000..85420a6f1
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/plugin/utils.d.ts
@@ -0,0 +1,27 @@
+import { NotifeeExpoPluginProps } from './types'
+/**
+ * Throws an error prefixed with the package name.
+ *
+ * @param {string} message - The error message.
+ * @throws {Error} Always throws an error.
+ */
+export declare const throwError: (message: string) => never
+/**
+ * Validates the properties passed to the Notifee Expo plugin.
+ *
+ * @param {NotifeeExpoPluginProps} props - The properties to validate.
+ * @throws {Error} If any validation check fails.
+ */
+export declare const validateProps: (props: NotifeeExpoPluginProps) => void
+/**
+ * Logs a message to the console with the package name prefixed.
+ *
+ * @param {string} message - The message to log.
+ */
+export declare const log: (message: string) => void
+/**
+ * Logs an error message to the console with the package name prefixed.
+ *
+ * @param {string} message - The error message to log.
+ */
+export declare const logError: (message: string) => void
diff --git a/expo-plugins/notification-service-ios/dist/plugin/utils.js b/expo-plugins/notification-service-ios/dist/plugin/utils.js
new file mode 100644
index 000000000..566bcd283
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/plugin/utils.js
@@ -0,0 +1,64 @@
+'use strict'
+Object.defineProperty(exports, '__esModule', { value: true })
+exports.logError = exports.log = exports.validateProps = exports.throwError = void 0
+const errorPrefix = 'expo-plugins/notification-service-ios:'
+/**
+ * Throws an error prefixed with the package name.
+ *
+ * @param {string} message - The error message.
+ * @throws {Error} Always throws an error.
+ */
+const throwError = (message) => {
+ throw new Error(errorPrefix + message)
+}
+exports.throwError = throwError
+/**
+ * Validates the properties passed to the Notifee Expo plugin.
+ *
+ * @param {NotifeeExpoPluginProps} props - The properties to validate.
+ * @throws {Error} If any validation check fails.
+ */
+const validateProps = (props) => {
+ if (!props) {
+ ;(0, exports.throwError)(
+ "You need to pass options to this plugin! The props 'apsEnvMode' & 'iosDeploymentTarget' are required!",
+ )
+ }
+ if (typeof props.iosDeploymentTarget !== 'string') {
+ ;(0, exports.throwError)("'iosDeploymentTarget' needs to be a string!")
+ }
+ if (typeof props.apsEnvMode !== 'string') {
+ ;(0, exports.throwError)("'apsEnvMode' needs to be a string!")
+ }
+ if (props.appleDevTeamId && typeof props.appleDevTeamId !== 'string') {
+ ;(0, exports.throwError)("'appleDevTeamId' needs to be a string!")
+ }
+ if (props.enableCommunicationNotifications && typeof props.enableCommunicationNotifications !== 'boolean') {
+ ;(0, exports.throwError)("'enableCommunicationNotifications' needs to be a boolean!")
+ }
+ if (props.customNotificationServiceFilePath && typeof props.customNotificationServiceFilePath !== 'string') {
+ ;(0, exports.throwError)("'customNotificationServiceFilePath' needs to be a string!")
+ }
+ if (props.backgroundModes && !Array.isArray(props.backgroundModes)) {
+ ;(0, exports.throwError)("'backgroundModes' needs to be an array!")
+ }
+}
+exports.validateProps = validateProps
+/**
+ * Logs a message to the console with the package name prefixed.
+ *
+ * @param {string} message - The message to log.
+ */
+const log = (message) => {
+ console.log(`${errorPrefix}: ` + message)
+}
+exports.log = log
+/**
+ * Logs an error message to the console with the package name prefixed.
+ *
+ * @param {string} message - The error message to log.
+ */
+const logError = (message) => {
+ console.error(`${errorPrefix}: ` + message)
+}
+exports.logError = logError
diff --git a/expo-plugins/notification-service-ios/dist/plugin/withNotifee.d.ts b/expo-plugins/notification-service-ios/dist/plugin/withNotifee.d.ts
new file mode 100644
index 000000000..a1283a3d3
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/plugin/withNotifee.d.ts
@@ -0,0 +1,12 @@
+import { ConfigPlugin } from '@expo/config-plugins'
+import { NotifeeExpoPluginProps } from './types'
+/**
+ * Configures Notifee settings for both Android and iOS platforms in an Expo project.
+ *
+ * @param {object} c - The Expo configuration object.
+ * @param {NotifeeExpoPluginProps} props - The properties required for configuring Notifee-Expo-Plugin.
+ *
+ * @returns {object} - The updated Expo configuration object.
+ */
+declare const withNotifee: ConfigPlugin
+export default withNotifee
diff --git a/expo-plugins/notification-service-ios/dist/plugin/withNotifee.js b/expo-plugins/notification-service-ios/dist/plugin/withNotifee.js
new file mode 100644
index 000000000..aeeaa66bc
--- /dev/null
+++ b/expo-plugins/notification-service-ios/dist/plugin/withNotifee.js
@@ -0,0 +1,32 @@
+'use strict'
+var __importDefault =
+ (this && this.__importDefault) ||
+ function (mod) {
+ return mod && mod.__esModule ? mod : { default: mod }
+ }
+Object.defineProperty(exports, '__esModule', { value: true })
+const utils_1 = require('./utils')
+const ios_1 = __importDefault(require('./ios'))
+/**
+ * Configures Notifee settings for both Android and iOS platforms in an Expo project.
+ *
+ * @param {object} c - The Expo configuration object.
+ * @param {NotifeeExpoPluginProps} props - The properties required for configuring Notifee-Expo-Plugin.
+ *
+ * @returns {object} - The updated Expo configuration object.
+ */
+const withNotifee = (c, props) => {
+ ;(0, utils_1.validateProps)(props)
+ /** iOS Configuration */
+ c = ios_1.default.setAPSEnvironment(c, props)
+ c = ios_1.default.addBackgroundModes(c, props)
+ c = ios_1.default.addCommunicationNotificationsCapability(c, props)
+ c = ios_1.default.addNotificationServiceGroup(c, props)
+ c = ios_1.default.addNotifeeToPodfile(c, props)
+ c = ios_1.default.addNotificationServiceFilesToProject(c, props)
+ c = ios_1.default.addNotifeeTargetToExpoAppExtensions(c, props)
+ c = ios_1.default.createAndAddNotificationServiceExtensionTarget(c, props)
+ c = ios_1.default.signAppAndNotificationServiceExtension(c, props)
+ return c
+}
+exports.default = withNotifee
diff --git a/packages/utils/src/types/contracts/@openzeppelin/contracts/build/contracts/ERC20.ts b/packages/utils/src/types/contracts/@openzeppelin/contracts/build/contracts/ERC20.ts
new file mode 100644
index 000000000..cba6a5a80
--- /dev/null
+++ b/packages/utils/src/types/contracts/@openzeppelin/contracts/build/contracts/ERC20.ts
@@ -0,0 +1,330 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type {
+ BaseContract,
+ BigNumberish,
+ BytesLike,
+ FunctionFragment,
+ Result,
+ Interface,
+ EventFragment,
+ AddressLike,
+ ContractRunner,
+ ContractMethod,
+ Listener,
+} from "ethers";
+import type {
+ TypedContractEvent,
+ TypedDeferredTopicFilter,
+ TypedEventLog,
+ TypedLogDescription,
+ TypedListener,
+ TypedContractMethod,
+} from "../../../../common";
+
+export interface ERC20Interface extends Interface {
+ getFunction(
+ nameOrSignature:
+ | "allowance"
+ | "approve"
+ | "balanceOf"
+ | "decimals"
+ | "decreaseAllowance"
+ | "increaseAllowance"
+ | "name"
+ | "symbol"
+ | "totalSupply"
+ | "transfer"
+ | "transferFrom"
+ ): FunctionFragment;
+
+ getEvent(nameOrSignatureOrTopic: "Approval" | "Transfer"): EventFragment;
+
+ encodeFunctionData(
+ functionFragment: "allowance",
+ values: [AddressLike, AddressLike]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "approve",
+ values: [AddressLike, BigNumberish]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "balanceOf",
+ values: [AddressLike]
+ ): string;
+ encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
+ encodeFunctionData(
+ functionFragment: "decreaseAllowance",
+ values: [AddressLike, BigNumberish]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "increaseAllowance",
+ values: [AddressLike, BigNumberish]
+ ): string;
+ encodeFunctionData(functionFragment: "name", values?: undefined): string;
+ encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
+ encodeFunctionData(
+ functionFragment: "totalSupply",
+ values?: undefined
+ ): string;
+ encodeFunctionData(
+ functionFragment: "transfer",
+ values: [AddressLike, BigNumberish]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "transferFrom",
+ values: [AddressLike, AddressLike, BigNumberish]
+ ): string;
+
+ decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
+ decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
+ decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
+ decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
+ decodeFunctionResult(
+ functionFragment: "decreaseAllowance",
+ data: BytesLike
+ ): Result;
+ decodeFunctionResult(
+ functionFragment: "increaseAllowance",
+ data: BytesLike
+ ): Result;
+ decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
+ decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
+ decodeFunctionResult(
+ functionFragment: "totalSupply",
+ data: BytesLike
+ ): Result;
+ decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result;
+ decodeFunctionResult(
+ functionFragment: "transferFrom",
+ data: BytesLike
+ ): Result;
+}
+
+export namespace ApprovalEvent {
+ export type InputTuple = [
+ owner: AddressLike,
+ spender: AddressLike,
+ value: BigNumberish
+ ];
+ export type OutputTuple = [owner: string, spender: string, value: bigint];
+ export interface OutputObject {
+ owner: string;
+ spender: string;
+ value: bigint;
+ }
+ export type Event = TypedContractEvent;
+ export type Filter = TypedDeferredTopicFilter;
+ export type Log = TypedEventLog;
+ export type LogDescription = TypedLogDescription;
+}
+
+export namespace TransferEvent {
+ export type InputTuple = [
+ from: AddressLike,
+ to: AddressLike,
+ value: BigNumberish
+ ];
+ export type OutputTuple = [from: string, to: string, value: bigint];
+ export interface OutputObject {
+ from: string;
+ to: string;
+ value: bigint;
+ }
+ export type Event = TypedContractEvent;
+ export type Filter = TypedDeferredTopicFilter;
+ export type Log = TypedEventLog;
+ export type LogDescription = TypedLogDescription;
+}
+
+export interface ERC20 extends BaseContract {
+ connect(runner?: ContractRunner | null): ERC20;
+ waitForDeployment(): Promise;
+
+ interface: ERC20Interface;
+
+ queryFilter(
+ event: TCEvent,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined
+ ): Promise>>;
+ queryFilter(
+ filter: TypedDeferredTopicFilter,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined
+ ): Promise>>;
+
+ on(
+ event: TCEvent,
+ listener: TypedListener
+ ): Promise;
+ on(
+ filter: TypedDeferredTopicFilter,
+ listener: TypedListener
+ ): Promise;
+
+ once(
+ event: TCEvent,
+ listener: TypedListener
+ ): Promise;
+ once(
+ filter: TypedDeferredTopicFilter,
+ listener: TypedListener
+ ): Promise;
+
+ listeners(
+ event: TCEvent
+ ): Promise>>;
+ listeners(eventName?: string): Promise>;
+ removeAllListeners(
+ event?: TCEvent
+ ): Promise;
+
+ allowance: TypedContractMethod<
+ [owner: AddressLike, spender: AddressLike],
+ [bigint],
+ "view"
+ >;
+
+ approve: TypedContractMethod<
+ [spender: AddressLike, amount: BigNumberish],
+ [boolean],
+ "nonpayable"
+ >;
+
+ balanceOf: TypedContractMethod<[account: AddressLike], [bigint], "view">;
+
+ decimals: TypedContractMethod<[], [bigint], "view">;
+
+ decreaseAllowance: TypedContractMethod<
+ [spender: AddressLike, subtractedValue: BigNumberish],
+ [boolean],
+ "nonpayable"
+ >;
+
+ increaseAllowance: TypedContractMethod<
+ [spender: AddressLike, addedValue: BigNumberish],
+ [boolean],
+ "nonpayable"
+ >;
+
+ name: TypedContractMethod<[], [string], "view">;
+
+ symbol: TypedContractMethod<[], [string], "view">;
+
+ totalSupply: TypedContractMethod<[], [bigint], "view">;
+
+ transfer: TypedContractMethod<
+ [to: AddressLike, amount: BigNumberish],
+ [boolean],
+ "nonpayable"
+ >;
+
+ transferFrom: TypedContractMethod<
+ [from: AddressLike, to: AddressLike, amount: BigNumberish],
+ [boolean],
+ "nonpayable"
+ >;
+
+ getFunction(
+ key: string | FunctionFragment
+ ): T;
+
+ getFunction(
+ nameOrSignature: "allowance"
+ ): TypedContractMethod<
+ [owner: AddressLike, spender: AddressLike],
+ [bigint],
+ "view"
+ >;
+ getFunction(
+ nameOrSignature: "approve"
+ ): TypedContractMethod<
+ [spender: AddressLike, amount: BigNumberish],
+ [boolean],
+ "nonpayable"
+ >;
+ getFunction(
+ nameOrSignature: "balanceOf"
+ ): TypedContractMethod<[account: AddressLike], [bigint], "view">;
+ getFunction(
+ nameOrSignature: "decimals"
+ ): TypedContractMethod<[], [bigint], "view">;
+ getFunction(
+ nameOrSignature: "decreaseAllowance"
+ ): TypedContractMethod<
+ [spender: AddressLike, subtractedValue: BigNumberish],
+ [boolean],
+ "nonpayable"
+ >;
+ getFunction(
+ nameOrSignature: "increaseAllowance"
+ ): TypedContractMethod<
+ [spender: AddressLike, addedValue: BigNumberish],
+ [boolean],
+ "nonpayable"
+ >;
+ getFunction(
+ nameOrSignature: "name"
+ ): TypedContractMethod<[], [string], "view">;
+ getFunction(
+ nameOrSignature: "symbol"
+ ): TypedContractMethod<[], [string], "view">;
+ getFunction(
+ nameOrSignature: "totalSupply"
+ ): TypedContractMethod<[], [bigint], "view">;
+ getFunction(
+ nameOrSignature: "transfer"
+ ): TypedContractMethod<
+ [to: AddressLike, amount: BigNumberish],
+ [boolean],
+ "nonpayable"
+ >;
+ getFunction(
+ nameOrSignature: "transferFrom"
+ ): TypedContractMethod<
+ [from: AddressLike, to: AddressLike, amount: BigNumberish],
+ [boolean],
+ "nonpayable"
+ >;
+
+ getEvent(
+ key: "Approval"
+ ): TypedContractEvent<
+ ApprovalEvent.InputTuple,
+ ApprovalEvent.OutputTuple,
+ ApprovalEvent.OutputObject
+ >;
+ getEvent(
+ key: "Transfer"
+ ): TypedContractEvent<
+ TransferEvent.InputTuple,
+ TransferEvent.OutputTuple,
+ TransferEvent.OutputObject
+ >;
+
+ filters: {
+ "Approval(address,address,uint256)": TypedContractEvent<
+ ApprovalEvent.InputTuple,
+ ApprovalEvent.OutputTuple,
+ ApprovalEvent.OutputObject
+ >;
+ Approval: TypedContractEvent<
+ ApprovalEvent.InputTuple,
+ ApprovalEvent.OutputTuple,
+ ApprovalEvent.OutputObject
+ >;
+
+ "Transfer(address,address,uint256)": TypedContractEvent<
+ TransferEvent.InputTuple,
+ TransferEvent.OutputTuple,
+ TransferEvent.OutputObject
+ >;
+ Transfer: TypedContractEvent<
+ TransferEvent.InputTuple,
+ TransferEvent.OutputTuple,
+ TransferEvent.OutputObject
+ >;
+ };
+}
diff --git a/packages/utils/src/types/contracts/@openzeppelin/contracts/build/contracts/ERC721.ts b/packages/utils/src/types/contracts/@openzeppelin/contracts/build/contracts/ERC721.ts
new file mode 100644
index 000000000..981e15df5
--- /dev/null
+++ b/packages/utils/src/types/contracts/@openzeppelin/contracts/build/contracts/ERC721.ts
@@ -0,0 +1,420 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type {
+ BaseContract,
+ BigNumberish,
+ BytesLike,
+ FunctionFragment,
+ Result,
+ Interface,
+ EventFragment,
+ AddressLike,
+ ContractRunner,
+ ContractMethod,
+ Listener,
+} from "ethers";
+import type {
+ TypedContractEvent,
+ TypedDeferredTopicFilter,
+ TypedEventLog,
+ TypedLogDescription,
+ TypedListener,
+ TypedContractMethod,
+} from "../../../../common";
+
+export interface ERC721Interface extends Interface {
+ getFunction(
+ nameOrSignature:
+ | "approve"
+ | "balanceOf"
+ | "getApproved"
+ | "isApprovedForAll"
+ | "name"
+ | "ownerOf"
+ | "safeTransferFrom(address,address,uint256)"
+ | "safeTransferFrom(address,address,uint256,bytes)"
+ | "setApprovalForAll"
+ | "supportsInterface"
+ | "symbol"
+ | "tokenURI"
+ | "transferFrom"
+ ): FunctionFragment;
+
+ getEvent(
+ nameOrSignatureOrTopic: "Approval" | "ApprovalForAll" | "Transfer"
+ ): EventFragment;
+
+ encodeFunctionData(
+ functionFragment: "approve",
+ values: [AddressLike, BigNumberish]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "balanceOf",
+ values: [AddressLike]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "getApproved",
+ values: [BigNumberish]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "isApprovedForAll",
+ values: [AddressLike, AddressLike]
+ ): string;
+ encodeFunctionData(functionFragment: "name", values?: undefined): string;
+ encodeFunctionData(
+ functionFragment: "ownerOf",
+ values: [BigNumberish]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "safeTransferFrom(address,address,uint256)",
+ values: [AddressLike, AddressLike, BigNumberish]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "safeTransferFrom(address,address,uint256,bytes)",
+ values: [AddressLike, AddressLike, BigNumberish, BytesLike]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "setApprovalForAll",
+ values: [AddressLike, boolean]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "supportsInterface",
+ values: [BytesLike]
+ ): string;
+ encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
+ encodeFunctionData(
+ functionFragment: "tokenURI",
+ values: [BigNumberish]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "transferFrom",
+ values: [AddressLike, AddressLike, BigNumberish]
+ ): string;
+
+ decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
+ decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
+ decodeFunctionResult(
+ functionFragment: "getApproved",
+ data: BytesLike
+ ): Result;
+ decodeFunctionResult(
+ functionFragment: "isApprovedForAll",
+ data: BytesLike
+ ): Result;
+ decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
+ decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result;
+ decodeFunctionResult(
+ functionFragment: "safeTransferFrom(address,address,uint256)",
+ data: BytesLike
+ ): Result;
+ decodeFunctionResult(
+ functionFragment: "safeTransferFrom(address,address,uint256,bytes)",
+ data: BytesLike
+ ): Result;
+ decodeFunctionResult(
+ functionFragment: "setApprovalForAll",
+ data: BytesLike
+ ): Result;
+ decodeFunctionResult(
+ functionFragment: "supportsInterface",
+ data: BytesLike
+ ): Result;
+ decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
+ decodeFunctionResult(functionFragment: "tokenURI", data: BytesLike): Result;
+ decodeFunctionResult(
+ functionFragment: "transferFrom",
+ data: BytesLike
+ ): Result;
+}
+
+export namespace ApprovalEvent {
+ export type InputTuple = [
+ owner: AddressLike,
+ approved: AddressLike,
+ tokenId: BigNumberish
+ ];
+ export type OutputTuple = [owner: string, approved: string, tokenId: bigint];
+ export interface OutputObject {
+ owner: string;
+ approved: string;
+ tokenId: bigint;
+ }
+ export type Event = TypedContractEvent;
+ export type Filter = TypedDeferredTopicFilter;
+ export type Log = TypedEventLog;
+ export type LogDescription = TypedLogDescription;
+}
+
+export namespace ApprovalForAllEvent {
+ export type InputTuple = [
+ owner: AddressLike,
+ operator: AddressLike,
+ approved: boolean
+ ];
+ export type OutputTuple = [
+ owner: string,
+ operator: string,
+ approved: boolean
+ ];
+ export interface OutputObject {
+ owner: string;
+ operator: string;
+ approved: boolean;
+ }
+ export type Event = TypedContractEvent;
+ export type Filter = TypedDeferredTopicFilter;
+ export type Log = TypedEventLog;
+ export type LogDescription = TypedLogDescription;
+}
+
+export namespace TransferEvent {
+ export type InputTuple = [
+ from: AddressLike,
+ to: AddressLike,
+ tokenId: BigNumberish
+ ];
+ export type OutputTuple = [from: string, to: string, tokenId: bigint];
+ export interface OutputObject {
+ from: string;
+ to: string;
+ tokenId: bigint;
+ }
+ export type Event = TypedContractEvent;
+ export type Filter = TypedDeferredTopicFilter;
+ export type Log = TypedEventLog;
+ export type LogDescription = TypedLogDescription;
+}
+
+export interface ERC721 extends BaseContract {
+ connect(runner?: ContractRunner | null): ERC721;
+ waitForDeployment(): Promise;
+
+ interface: ERC721Interface;
+
+ queryFilter(
+ event: TCEvent,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined
+ ): Promise>>;
+ queryFilter(
+ filter: TypedDeferredTopicFilter,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined
+ ): Promise>>;
+
+ on(
+ event: TCEvent,
+ listener: TypedListener
+ ): Promise;
+ on(
+ filter: TypedDeferredTopicFilter,
+ listener: TypedListener
+ ): Promise;
+
+ once(
+ event: TCEvent,
+ listener: TypedListener
+ ): Promise;
+ once(
+ filter: TypedDeferredTopicFilter,
+ listener: TypedListener
+ ): Promise;
+
+ listeners(
+ event: TCEvent
+ ): Promise>>;
+ listeners(eventName?: string): Promise>;
+ removeAllListeners(
+ event?: TCEvent
+ ): Promise;
+
+ approve: TypedContractMethod<
+ [to: AddressLike, tokenId: BigNumberish],
+ [void],
+ "nonpayable"
+ >;
+
+ balanceOf: TypedContractMethod<[owner: AddressLike], [bigint], "view">;
+
+ getApproved: TypedContractMethod<[tokenId: BigNumberish], [string], "view">;
+
+ isApprovedForAll: TypedContractMethod<
+ [owner: AddressLike, operator: AddressLike],
+ [boolean],
+ "view"
+ >;
+
+ name: TypedContractMethod<[], [string], "view">;
+
+ ownerOf: TypedContractMethod<[tokenId: BigNumberish], [string], "view">;
+
+ "safeTransferFrom(address,address,uint256)": TypedContractMethod<
+ [from: AddressLike, to: AddressLike, tokenId: BigNumberish],
+ [void],
+ "nonpayable"
+ >;
+
+ "safeTransferFrom(address,address,uint256,bytes)": TypedContractMethod<
+ [
+ from: AddressLike,
+ to: AddressLike,
+ tokenId: BigNumberish,
+ data: BytesLike
+ ],
+ [void],
+ "nonpayable"
+ >;
+
+ setApprovalForAll: TypedContractMethod<
+ [operator: AddressLike, approved: boolean],
+ [void],
+ "nonpayable"
+ >;
+
+ supportsInterface: TypedContractMethod<
+ [interfaceId: BytesLike],
+ [boolean],
+ "view"
+ >;
+
+ symbol: TypedContractMethod<[], [string], "view">;
+
+ tokenURI: TypedContractMethod<[tokenId: BigNumberish], [string], "view">;
+
+ transferFrom: TypedContractMethod<
+ [from: AddressLike, to: AddressLike, tokenId: BigNumberish],
+ [void],
+ "nonpayable"
+ >;
+
+ getFunction(
+ key: string | FunctionFragment
+ ): T;
+
+ getFunction(
+ nameOrSignature: "approve"
+ ): TypedContractMethod<
+ [to: AddressLike, tokenId: BigNumberish],
+ [void],
+ "nonpayable"
+ >;
+ getFunction(
+ nameOrSignature: "balanceOf"
+ ): TypedContractMethod<[owner: AddressLike], [bigint], "view">;
+ getFunction(
+ nameOrSignature: "getApproved"
+ ): TypedContractMethod<[tokenId: BigNumberish], [string], "view">;
+ getFunction(
+ nameOrSignature: "isApprovedForAll"
+ ): TypedContractMethod<
+ [owner: AddressLike, operator: AddressLike],
+ [boolean],
+ "view"
+ >;
+ getFunction(
+ nameOrSignature: "name"
+ ): TypedContractMethod<[], [string], "view">;
+ getFunction(
+ nameOrSignature: "ownerOf"
+ ): TypedContractMethod<[tokenId: BigNumberish], [string], "view">;
+ getFunction(
+ nameOrSignature: "safeTransferFrom(address,address,uint256)"
+ ): TypedContractMethod<
+ [from: AddressLike, to: AddressLike, tokenId: BigNumberish],
+ [void],
+ "nonpayable"
+ >;
+ getFunction(
+ nameOrSignature: "safeTransferFrom(address,address,uint256,bytes)"
+ ): TypedContractMethod<
+ [
+ from: AddressLike,
+ to: AddressLike,
+ tokenId: BigNumberish,
+ data: BytesLike
+ ],
+ [void],
+ "nonpayable"
+ >;
+ getFunction(
+ nameOrSignature: "setApprovalForAll"
+ ): TypedContractMethod<
+ [operator: AddressLike, approved: boolean],
+ [void],
+ "nonpayable"
+ >;
+ getFunction(
+ nameOrSignature: "supportsInterface"
+ ): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">;
+ getFunction(
+ nameOrSignature: "symbol"
+ ): TypedContractMethod<[], [string], "view">;
+ getFunction(
+ nameOrSignature: "tokenURI"
+ ): TypedContractMethod<[tokenId: BigNumberish], [string], "view">;
+ getFunction(
+ nameOrSignature: "transferFrom"
+ ): TypedContractMethod<
+ [from: AddressLike, to: AddressLike, tokenId: BigNumberish],
+ [void],
+ "nonpayable"
+ >;
+
+ getEvent(
+ key: "Approval"
+ ): TypedContractEvent<
+ ApprovalEvent.InputTuple,
+ ApprovalEvent.OutputTuple,
+ ApprovalEvent.OutputObject
+ >;
+ getEvent(
+ key: "ApprovalForAll"
+ ): TypedContractEvent<
+ ApprovalForAllEvent.InputTuple,
+ ApprovalForAllEvent.OutputTuple,
+ ApprovalForAllEvent.OutputObject
+ >;
+ getEvent(
+ key: "Transfer"
+ ): TypedContractEvent<
+ TransferEvent.InputTuple,
+ TransferEvent.OutputTuple,
+ TransferEvent.OutputObject
+ >;
+
+ filters: {
+ "Approval(address,address,uint256)": TypedContractEvent<
+ ApprovalEvent.InputTuple,
+ ApprovalEvent.OutputTuple,
+ ApprovalEvent.OutputObject
+ >;
+ Approval: TypedContractEvent<
+ ApprovalEvent.InputTuple,
+ ApprovalEvent.OutputTuple,
+ ApprovalEvent.OutputObject
+ >;
+
+ "ApprovalForAll(address,address,bool)": TypedContractEvent<
+ ApprovalForAllEvent.InputTuple,
+ ApprovalForAllEvent.OutputTuple,
+ ApprovalForAllEvent.OutputObject
+ >;
+ ApprovalForAll: TypedContractEvent<
+ ApprovalForAllEvent.InputTuple,
+ ApprovalForAllEvent.OutputTuple,
+ ApprovalForAllEvent.OutputObject
+ >;
+
+ "Transfer(address,address,uint256)": TypedContractEvent<
+ TransferEvent.InputTuple,
+ TransferEvent.OutputTuple,
+ TransferEvent.OutputObject
+ >;
+ Transfer: TypedContractEvent<
+ TransferEvent.InputTuple,
+ TransferEvent.OutputTuple,
+ TransferEvent.OutputObject
+ >;
+ };
+}
diff --git a/packages/utils/src/types/contracts/@openzeppelin/contracts/build/contracts/index.ts b/packages/utils/src/types/contracts/@openzeppelin/contracts/build/contracts/index.ts
new file mode 100644
index 000000000..db1378f76
--- /dev/null
+++ b/packages/utils/src/types/contracts/@openzeppelin/contracts/build/contracts/index.ts
@@ -0,0 +1,5 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+export type { ERC20 } from "./ERC20";
+export type { ERC721 } from "./ERC721";
diff --git a/packages/utils/src/types/contracts/@openzeppelin/contracts/build/index.ts b/packages/utils/src/types/contracts/@openzeppelin/contracts/build/index.ts
new file mode 100644
index 000000000..a11e4ca29
--- /dev/null
+++ b/packages/utils/src/types/contracts/@openzeppelin/contracts/build/index.ts
@@ -0,0 +1,5 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type * as contracts from "./contracts";
+export type { contracts };
diff --git a/packages/utils/src/types/contracts/@openzeppelin/contracts/index.ts b/packages/utils/src/types/contracts/@openzeppelin/contracts/index.ts
new file mode 100644
index 000000000..01afb08eb
--- /dev/null
+++ b/packages/utils/src/types/contracts/@openzeppelin/contracts/index.ts
@@ -0,0 +1,5 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type * as build from './build'
+export type { build }
diff --git a/packages/utils/src/types/contracts/@openzeppelin/index.ts b/packages/utils/src/types/contracts/@openzeppelin/index.ts
new file mode 100644
index 000000000..eb7a38b1c
--- /dev/null
+++ b/packages/utils/src/types/contracts/@openzeppelin/index.ts
@@ -0,0 +1,5 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type * as contracts from './contracts'
+export type { contracts }
diff --git a/packages/utils/src/types/contracts/@safe-global/index.ts b/packages/utils/src/types/contracts/@safe-global/index.ts
new file mode 100644
index 000000000..479915e2d
--- /dev/null
+++ b/packages/utils/src/types/contracts/@safe-global/index.ts
@@ -0,0 +1,7 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type * as safeDeployments from './safe-deployments'
+export type { safeDeployments }
+import type * as safeModulesDeployments from './safe-modules-deployments'
+export type { safeModulesDeployments }
diff --git a/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/index.ts b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/index.ts
new file mode 100644
index 000000000..16bbb941a
--- /dev/null
+++ b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/index.ts
@@ -0,0 +1,15 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type * as v100 from './v1.0.0'
+export type { v100 }
+import type * as v111 from './v1.1.1'
+export type { v111 }
+import type * as v120 from './v1.2.0'
+export type { v120 }
+import type * as v130 from './v1.3.0'
+export type { v130 }
+import type * as v141 from './v1.4.1'
+export type { v141 }
+import type * as v150 from './v1.5.0'
+export type { v150 }
diff --git a/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.0.0/Gnosis_safe.ts b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.0.0/Gnosis_safe.ts
new file mode 100644
index 000000000..2449a9eb8
--- /dev/null
+++ b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.0.0/Gnosis_safe.ts
@@ -0,0 +1,688 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type {
+ BaseContract,
+ BigNumberish,
+ BytesLike,
+ FunctionFragment,
+ Result,
+ Interface,
+ EventFragment,
+ AddressLike,
+ ContractRunner,
+ ContractMethod,
+ Listener,
+} from 'ethers'
+import type {
+ TypedContractEvent,
+ TypedDeferredTopicFilter,
+ TypedEventLog,
+ TypedLogDescription,
+ TypedListener,
+ TypedContractMethod,
+} from '../../../../../common'
+
+export interface Gnosis_safeInterface extends Interface {
+ getFunction(
+ nameOrSignature:
+ | 'addOwnerWithThreshold'
+ | 'DOMAIN_SEPARATOR_TYPEHASH'
+ | 'isOwner'
+ | 'execTransactionFromModule'
+ | 'signedMessages'
+ | 'enableModule'
+ | 'changeThreshold'
+ | 'approvedHashes'
+ | 'changeMasterCopy'
+ | 'SENTINEL_MODULES'
+ | 'SENTINEL_OWNERS'
+ | 'getOwners'
+ | 'NAME'
+ | 'nonce'
+ | 'getModules'
+ | 'SAFE_MSG_TYPEHASH'
+ | 'SAFE_TX_TYPEHASH'
+ | 'disableModule'
+ | 'swapOwner'
+ | 'getThreshold'
+ | 'domainSeparator'
+ | 'removeOwner'
+ | 'VERSION'
+ | 'setup'
+ | 'execTransaction'
+ | 'requiredTxGas'
+ | 'approveHash'
+ | 'signMessage'
+ | 'isValidSignature'
+ | 'getMessageHash'
+ | 'encodeTransactionData'
+ | 'getTransactionHash',
+ ): FunctionFragment
+
+ getEvent(
+ nameOrSignatureOrTopic:
+ | 'ExecutionFailed'
+ | 'AddedOwner'
+ | 'RemovedOwner'
+ | 'ChangedThreshold'
+ | 'EnabledModule'
+ | 'DisabledModule'
+ | 'ContractCreation',
+ ): EventFragment
+
+ encodeFunctionData(functionFragment: 'addOwnerWithThreshold', values: [AddressLike, BigNumberish]): string
+ encodeFunctionData(functionFragment: 'DOMAIN_SEPARATOR_TYPEHASH', values?: undefined): string
+ encodeFunctionData(functionFragment: 'isOwner', values: [AddressLike]): string
+ encodeFunctionData(
+ functionFragment: 'execTransactionFromModule',
+ values: [AddressLike, BigNumberish, BytesLike, BigNumberish],
+ ): string
+ encodeFunctionData(functionFragment: 'signedMessages', values: [BytesLike]): string
+ encodeFunctionData(functionFragment: 'enableModule', values: [AddressLike]): string
+ encodeFunctionData(functionFragment: 'changeThreshold', values: [BigNumberish]): string
+ encodeFunctionData(functionFragment: 'approvedHashes', values: [AddressLike, BytesLike]): string
+ encodeFunctionData(functionFragment: 'changeMasterCopy', values: [AddressLike]): string
+ encodeFunctionData(functionFragment: 'SENTINEL_MODULES', values?: undefined): string
+ encodeFunctionData(functionFragment: 'SENTINEL_OWNERS', values?: undefined): string
+ encodeFunctionData(functionFragment: 'getOwners', values?: undefined): string
+ encodeFunctionData(functionFragment: 'NAME', values?: undefined): string
+ encodeFunctionData(functionFragment: 'nonce', values?: undefined): string
+ encodeFunctionData(functionFragment: 'getModules', values?: undefined): string
+ encodeFunctionData(functionFragment: 'SAFE_MSG_TYPEHASH', values?: undefined): string
+ encodeFunctionData(functionFragment: 'SAFE_TX_TYPEHASH', values?: undefined): string
+ encodeFunctionData(functionFragment: 'disableModule', values: [AddressLike, AddressLike]): string
+ encodeFunctionData(functionFragment: 'swapOwner', values: [AddressLike, AddressLike, AddressLike]): string
+ encodeFunctionData(functionFragment: 'getThreshold', values?: undefined): string
+ encodeFunctionData(functionFragment: 'domainSeparator', values?: undefined): string
+ encodeFunctionData(functionFragment: 'removeOwner', values: [AddressLike, AddressLike, BigNumberish]): string
+ encodeFunctionData(functionFragment: 'VERSION', values?: undefined): string
+ encodeFunctionData(
+ functionFragment: 'setup',
+ values: [AddressLike[], BigNumberish, AddressLike, BytesLike, AddressLike, BigNumberish, AddressLike],
+ ): string
+ encodeFunctionData(
+ functionFragment: 'execTransaction',
+ values: [
+ AddressLike,
+ BigNumberish,
+ BytesLike,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ AddressLike,
+ AddressLike,
+ BytesLike,
+ ],
+ ): string
+ encodeFunctionData(
+ functionFragment: 'requiredTxGas',
+ values: [AddressLike, BigNumberish, BytesLike, BigNumberish],
+ ): string
+ encodeFunctionData(functionFragment: 'approveHash', values: [BytesLike]): string
+ encodeFunctionData(functionFragment: 'signMessage', values: [BytesLike]): string
+ encodeFunctionData(functionFragment: 'isValidSignature', values: [BytesLike, BytesLike]): string
+ encodeFunctionData(functionFragment: 'getMessageHash', values: [BytesLike]): string
+ encodeFunctionData(
+ functionFragment: 'encodeTransactionData',
+ values: [
+ AddressLike,
+ BigNumberish,
+ BytesLike,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ AddressLike,
+ AddressLike,
+ BigNumberish,
+ ],
+ ): string
+ encodeFunctionData(
+ functionFragment: 'getTransactionHash',
+ values: [
+ AddressLike,
+ BigNumberish,
+ BytesLike,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ AddressLike,
+ AddressLike,
+ BigNumberish,
+ ],
+ ): string
+
+ decodeFunctionResult(functionFragment: 'addOwnerWithThreshold', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'DOMAIN_SEPARATOR_TYPEHASH', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'execTransactionFromModule', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'signedMessages', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'enableModule', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'changeThreshold', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'approvedHashes', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'changeMasterCopy', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'SENTINEL_MODULES', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'SENTINEL_OWNERS', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getOwners', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'NAME', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getModules', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'SAFE_MSG_TYPEHASH', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'SAFE_TX_TYPEHASH', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'disableModule', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'swapOwner', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getThreshold', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'domainSeparator', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'removeOwner', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'VERSION', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'setup', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'execTransaction', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'requiredTxGas', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'approveHash', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'signMessage', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'isValidSignature', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getMessageHash', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'encodeTransactionData', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getTransactionHash', data: BytesLike): Result
+}
+
+export namespace ExecutionFailedEvent {
+ export type InputTuple = [txHash: BytesLike]
+ export type OutputTuple = [txHash: string]
+ export interface OutputObject {
+ txHash: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace AddedOwnerEvent {
+ export type InputTuple = [owner: AddressLike]
+ export type OutputTuple = [owner: string]
+ export interface OutputObject {
+ owner: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace RemovedOwnerEvent {
+ export type InputTuple = [owner: AddressLike]
+ export type OutputTuple = [owner: string]
+ export interface OutputObject {
+ owner: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace ChangedThresholdEvent {
+ export type InputTuple = [threshold: BigNumberish]
+ export type OutputTuple = [threshold: bigint]
+ export interface OutputObject {
+ threshold: bigint
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace EnabledModuleEvent {
+ export type InputTuple = [module: AddressLike]
+ export type OutputTuple = [module: string]
+ export interface OutputObject {
+ module: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace DisabledModuleEvent {
+ export type InputTuple = [module: AddressLike]
+ export type OutputTuple = [module: string]
+ export interface OutputObject {
+ module: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace ContractCreationEvent {
+ export type InputTuple = [newContract: AddressLike]
+ export type OutputTuple = [newContract: string]
+ export interface OutputObject {
+ newContract: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export interface Gnosis_safe extends BaseContract {
+ connect(runner?: ContractRunner | null): Gnosis_safe
+ waitForDeployment(): Promise
+
+ interface: Gnosis_safeInterface
+
+ queryFilter(
+ event: TCEvent,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined,
+ ): Promise>>
+ queryFilter(
+ filter: TypedDeferredTopicFilter,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined,
+ ): Promise>>
+
+ on(event: TCEvent, listener: TypedListener): Promise
+ on(
+ filter: TypedDeferredTopicFilter,
+ listener: TypedListener,
+ ): Promise
+
+ once(event: TCEvent, listener: TypedListener): Promise
+ once(
+ filter: TypedDeferredTopicFilter,
+ listener: TypedListener,
+ ): Promise
+
+ listeners(event: TCEvent): Promise>>
+ listeners(eventName?: string): Promise>
+ removeAllListeners(event?: TCEvent): Promise
+
+ addOwnerWithThreshold: TypedContractMethod<[owner: AddressLike, _threshold: BigNumberish], [void], 'nonpayable'>
+
+ DOMAIN_SEPARATOR_TYPEHASH: TypedContractMethod<[], [string], 'view'>
+
+ isOwner: TypedContractMethod<[owner: AddressLike], [boolean], 'view'>
+
+ execTransactionFromModule: TypedContractMethod<
+ [to: AddressLike, value: BigNumberish, data: BytesLike, operation: BigNumberish],
+ [boolean],
+ 'nonpayable'
+ >
+
+ signedMessages: TypedContractMethod<[arg0: BytesLike], [bigint], 'view'>
+
+ enableModule: TypedContractMethod<[module: AddressLike], [void], 'nonpayable'>
+
+ changeThreshold: TypedContractMethod<[_threshold: BigNumberish], [void], 'nonpayable'>
+
+ approvedHashes: TypedContractMethod<[arg0: AddressLike, arg1: BytesLike], [bigint], 'view'>
+
+ changeMasterCopy: TypedContractMethod<[_masterCopy: AddressLike], [void], 'nonpayable'>
+
+ SENTINEL_MODULES: TypedContractMethod<[], [string], 'view'>
+
+ SENTINEL_OWNERS: TypedContractMethod<[], [string], 'view'>
+
+ getOwners: TypedContractMethod<[], [string[]], 'view'>
+
+ NAME: TypedContractMethod<[], [string], 'view'>
+
+ nonce: TypedContractMethod<[], [bigint], 'view'>
+
+ getModules: TypedContractMethod<[], [string[]], 'view'>
+
+ SAFE_MSG_TYPEHASH: TypedContractMethod<[], [string], 'view'>
+
+ SAFE_TX_TYPEHASH: TypedContractMethod<[], [string], 'view'>
+
+ disableModule: TypedContractMethod<[prevModule: AddressLike, module: AddressLike], [void], 'nonpayable'>
+
+ swapOwner: TypedContractMethod<
+ [prevOwner: AddressLike, oldOwner: AddressLike, newOwner: AddressLike],
+ [void],
+ 'nonpayable'
+ >
+
+ getThreshold: TypedContractMethod<[], [bigint], 'view'>
+
+ domainSeparator: TypedContractMethod<[], [string], 'view'>
+
+ removeOwner: TypedContractMethod<
+ [prevOwner: AddressLike, owner: AddressLike, _threshold: BigNumberish],
+ [void],
+ 'nonpayable'
+ >
+
+ VERSION: TypedContractMethod<[], [string], 'view'>
+
+ setup: TypedContractMethod<
+ [
+ _owners: AddressLike[],
+ _threshold: BigNumberish,
+ to: AddressLike,
+ data: BytesLike,
+ paymentToken: AddressLike,
+ payment: BigNumberish,
+ paymentReceiver: AddressLike,
+ ],
+ [void],
+ 'nonpayable'
+ >
+
+ execTransaction: TypedContractMethod<
+ [
+ to: AddressLike,
+ value: BigNumberish,
+ data: BytesLike,
+ operation: BigNumberish,
+ safeTxGas: BigNumberish,
+ baseGas: BigNumberish,
+ gasPrice: BigNumberish,
+ gasToken: AddressLike,
+ refundReceiver: AddressLike,
+ signatures: BytesLike,
+ ],
+ [boolean],
+ 'nonpayable'
+ >
+
+ requiredTxGas: TypedContractMethod<
+ [to: AddressLike, value: BigNumberish, data: BytesLike, operation: BigNumberish],
+ [bigint],
+ 'nonpayable'
+ >
+
+ approveHash: TypedContractMethod<[hashToApprove: BytesLike], [void], 'nonpayable'>
+
+ signMessage: TypedContractMethod<[_data: BytesLike], [void], 'nonpayable'>
+
+ isValidSignature: TypedContractMethod<[_data: BytesLike, _signature: BytesLike], [string], 'nonpayable'>
+
+ getMessageHash: TypedContractMethod<[message: BytesLike], [string], 'view'>
+
+ encodeTransactionData: TypedContractMethod<
+ [
+ to: AddressLike,
+ value: BigNumberish,
+ data: BytesLike,
+ operation: BigNumberish,
+ safeTxGas: BigNumberish,
+ baseGas: BigNumberish,
+ gasPrice: BigNumberish,
+ gasToken: AddressLike,
+ refundReceiver: AddressLike,
+ _nonce: BigNumberish,
+ ],
+ [string],
+ 'view'
+ >
+
+ getTransactionHash: TypedContractMethod<
+ [
+ to: AddressLike,
+ value: BigNumberish,
+ data: BytesLike,
+ operation: BigNumberish,
+ safeTxGas: BigNumberish,
+ baseGas: BigNumberish,
+ gasPrice: BigNumberish,
+ gasToken: AddressLike,
+ refundReceiver: AddressLike,
+ _nonce: BigNumberish,
+ ],
+ [string],
+ 'view'
+ >
+
+ getFunction(key: string | FunctionFragment): T
+
+ getFunction(
+ nameOrSignature: 'addOwnerWithThreshold',
+ ): TypedContractMethod<[owner: AddressLike, _threshold: BigNumberish], [void], 'nonpayable'>
+ getFunction(nameOrSignature: 'DOMAIN_SEPARATOR_TYPEHASH'): TypedContractMethod<[], [string], 'view'>
+ getFunction(nameOrSignature: 'isOwner'): TypedContractMethod<[owner: AddressLike], [boolean], 'view'>
+ getFunction(
+ nameOrSignature: 'execTransactionFromModule',
+ ): TypedContractMethod<
+ [to: AddressLike, value: BigNumberish, data: BytesLike, operation: BigNumberish],
+ [boolean],
+ 'nonpayable'
+ >
+ getFunction(nameOrSignature: 'signedMessages'): TypedContractMethod<[arg0: BytesLike], [bigint], 'view'>
+ getFunction(nameOrSignature: 'enableModule'): TypedContractMethod<[module: AddressLike], [void], 'nonpayable'>
+ getFunction(nameOrSignature: 'changeThreshold'): TypedContractMethod<[_threshold: BigNumberish], [void], 'nonpayable'>
+ getFunction(
+ nameOrSignature: 'approvedHashes',
+ ): TypedContractMethod<[arg0: AddressLike, arg1: BytesLike], [bigint], 'view'>
+ getFunction(
+ nameOrSignature: 'changeMasterCopy',
+ ): TypedContractMethod<[_masterCopy: AddressLike], [void], 'nonpayable'>
+ getFunction(nameOrSignature: 'SENTINEL_MODULES'): TypedContractMethod<[], [string], 'view'>
+ getFunction(nameOrSignature: 'SENTINEL_OWNERS'): TypedContractMethod<[], [string], 'view'>
+ getFunction(nameOrSignature: 'getOwners'): TypedContractMethod<[], [string[]], 'view'>
+ getFunction(nameOrSignature: 'NAME'): TypedContractMethod<[], [string], 'view'>
+ getFunction(nameOrSignature: 'nonce'): TypedContractMethod<[], [bigint], 'view'>
+ getFunction(nameOrSignature: 'getModules'): TypedContractMethod<[], [string[]], 'view'>
+ getFunction(nameOrSignature: 'SAFE_MSG_TYPEHASH'): TypedContractMethod<[], [string], 'view'>
+ getFunction(nameOrSignature: 'SAFE_TX_TYPEHASH'): TypedContractMethod<[], [string], 'view'>
+ getFunction(
+ nameOrSignature: 'disableModule',
+ ): TypedContractMethod<[prevModule: AddressLike, module: AddressLike], [void], 'nonpayable'>
+ getFunction(
+ nameOrSignature: 'swapOwner',
+ ): TypedContractMethod<[prevOwner: AddressLike, oldOwner: AddressLike, newOwner: AddressLike], [void], 'nonpayable'>
+ getFunction(nameOrSignature: 'getThreshold'): TypedContractMethod<[], [bigint], 'view'>
+ getFunction(nameOrSignature: 'domainSeparator'): TypedContractMethod<[], [string], 'view'>
+ getFunction(
+ nameOrSignature: 'removeOwner',
+ ): TypedContractMethod<[prevOwner: AddressLike, owner: AddressLike, _threshold: BigNumberish], [void], 'nonpayable'>
+ getFunction(nameOrSignature: 'VERSION'): TypedContractMethod<[], [string], 'view'>
+ getFunction(
+ nameOrSignature: 'setup',
+ ): TypedContractMethod<
+ [
+ _owners: AddressLike[],
+ _threshold: BigNumberish,
+ to: AddressLike,
+ data: BytesLike,
+ paymentToken: AddressLike,
+ payment: BigNumberish,
+ paymentReceiver: AddressLike,
+ ],
+ [void],
+ 'nonpayable'
+ >
+ getFunction(
+ nameOrSignature: 'execTransaction',
+ ): TypedContractMethod<
+ [
+ to: AddressLike,
+ value: BigNumberish,
+ data: BytesLike,
+ operation: BigNumberish,
+ safeTxGas: BigNumberish,
+ baseGas: BigNumberish,
+ gasPrice: BigNumberish,
+ gasToken: AddressLike,
+ refundReceiver: AddressLike,
+ signatures: BytesLike,
+ ],
+ [boolean],
+ 'nonpayable'
+ >
+ getFunction(
+ nameOrSignature: 'requiredTxGas',
+ ): TypedContractMethod<
+ [to: AddressLike, value: BigNumberish, data: BytesLike, operation: BigNumberish],
+ [bigint],
+ 'nonpayable'
+ >
+ getFunction(nameOrSignature: 'approveHash'): TypedContractMethod<[hashToApprove: BytesLike], [void], 'nonpayable'>
+ getFunction(nameOrSignature: 'signMessage'): TypedContractMethod<[_data: BytesLike], [void], 'nonpayable'>
+ getFunction(
+ nameOrSignature: 'isValidSignature',
+ ): TypedContractMethod<[_data: BytesLike, _signature: BytesLike], [string], 'nonpayable'>
+ getFunction(nameOrSignature: 'getMessageHash'): TypedContractMethod<[message: BytesLike], [string], 'view'>
+ getFunction(
+ nameOrSignature: 'encodeTransactionData',
+ ): TypedContractMethod<
+ [
+ to: AddressLike,
+ value: BigNumberish,
+ data: BytesLike,
+ operation: BigNumberish,
+ safeTxGas: BigNumberish,
+ baseGas: BigNumberish,
+ gasPrice: BigNumberish,
+ gasToken: AddressLike,
+ refundReceiver: AddressLike,
+ _nonce: BigNumberish,
+ ],
+ [string],
+ 'view'
+ >
+ getFunction(
+ nameOrSignature: 'getTransactionHash',
+ ): TypedContractMethod<
+ [
+ to: AddressLike,
+ value: BigNumberish,
+ data: BytesLike,
+ operation: BigNumberish,
+ safeTxGas: BigNumberish,
+ baseGas: BigNumberish,
+ gasPrice: BigNumberish,
+ gasToken: AddressLike,
+ refundReceiver: AddressLike,
+ _nonce: BigNumberish,
+ ],
+ [string],
+ 'view'
+ >
+
+ getEvent(
+ key: 'ExecutionFailed',
+ ): TypedContractEvent<
+ ExecutionFailedEvent.InputTuple,
+ ExecutionFailedEvent.OutputTuple,
+ ExecutionFailedEvent.OutputObject
+ >
+ getEvent(
+ key: 'AddedOwner',
+ ): TypedContractEvent
+ getEvent(
+ key: 'RemovedOwner',
+ ): TypedContractEvent
+ getEvent(
+ key: 'ChangedThreshold',
+ ): TypedContractEvent<
+ ChangedThresholdEvent.InputTuple,
+ ChangedThresholdEvent.OutputTuple,
+ ChangedThresholdEvent.OutputObject
+ >
+ getEvent(
+ key: 'EnabledModule',
+ ): TypedContractEvent
+ getEvent(
+ key: 'DisabledModule',
+ ): TypedContractEvent<
+ DisabledModuleEvent.InputTuple,
+ DisabledModuleEvent.OutputTuple,
+ DisabledModuleEvent.OutputObject
+ >
+ getEvent(
+ key: 'ContractCreation',
+ ): TypedContractEvent<
+ ContractCreationEvent.InputTuple,
+ ContractCreationEvent.OutputTuple,
+ ContractCreationEvent.OutputObject
+ >
+
+ filters: {
+ 'ExecutionFailed(bytes32)': TypedContractEvent<
+ ExecutionFailedEvent.InputTuple,
+ ExecutionFailedEvent.OutputTuple,
+ ExecutionFailedEvent.OutputObject
+ >
+ ExecutionFailed: TypedContractEvent<
+ ExecutionFailedEvent.InputTuple,
+ ExecutionFailedEvent.OutputTuple,
+ ExecutionFailedEvent.OutputObject
+ >
+
+ 'AddedOwner(address)': TypedContractEvent<
+ AddedOwnerEvent.InputTuple,
+ AddedOwnerEvent.OutputTuple,
+ AddedOwnerEvent.OutputObject
+ >
+ AddedOwner: TypedContractEvent<
+ AddedOwnerEvent.InputTuple,
+ AddedOwnerEvent.OutputTuple,
+ AddedOwnerEvent.OutputObject
+ >
+
+ 'RemovedOwner(address)': TypedContractEvent<
+ RemovedOwnerEvent.InputTuple,
+ RemovedOwnerEvent.OutputTuple,
+ RemovedOwnerEvent.OutputObject
+ >
+ RemovedOwner: TypedContractEvent<
+ RemovedOwnerEvent.InputTuple,
+ RemovedOwnerEvent.OutputTuple,
+ RemovedOwnerEvent.OutputObject
+ >
+
+ 'ChangedThreshold(uint256)': TypedContractEvent<
+ ChangedThresholdEvent.InputTuple,
+ ChangedThresholdEvent.OutputTuple,
+ ChangedThresholdEvent.OutputObject
+ >
+ ChangedThreshold: TypedContractEvent<
+ ChangedThresholdEvent.InputTuple,
+ ChangedThresholdEvent.OutputTuple,
+ ChangedThresholdEvent.OutputObject
+ >
+
+ 'EnabledModule(address)': TypedContractEvent<
+ EnabledModuleEvent.InputTuple,
+ EnabledModuleEvent.OutputTuple,
+ EnabledModuleEvent.OutputObject
+ >
+ EnabledModule: TypedContractEvent<
+ EnabledModuleEvent.InputTuple,
+ EnabledModuleEvent.OutputTuple,
+ EnabledModuleEvent.OutputObject
+ >
+
+ 'DisabledModule(address)': TypedContractEvent<
+ DisabledModuleEvent.InputTuple,
+ DisabledModuleEvent.OutputTuple,
+ DisabledModuleEvent.OutputObject
+ >
+ DisabledModule: TypedContractEvent<
+ DisabledModuleEvent.InputTuple,
+ DisabledModuleEvent.OutputTuple,
+ DisabledModuleEvent.OutputObject
+ >
+
+ 'ContractCreation(address)': TypedContractEvent<
+ ContractCreationEvent.InputTuple,
+ ContractCreationEvent.OutputTuple,
+ ContractCreationEvent.OutputObject
+ >
+ ContractCreation: TypedContractEvent<
+ ContractCreationEvent.InputTuple,
+ ContractCreationEvent.OutputTuple,
+ ContractCreationEvent.OutputObject
+ >
+ }
+}
diff --git a/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.0.0/Proxy_factory.ts b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.0.0/Proxy_factory.ts
new file mode 100644
index 000000000..91d628204
--- /dev/null
+++ b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.0.0/Proxy_factory.ts
@@ -0,0 +1,132 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type {
+ BaseContract,
+ BigNumberish,
+ BytesLike,
+ FunctionFragment,
+ Result,
+ Interface,
+ EventFragment,
+ AddressLike,
+ ContractRunner,
+ ContractMethod,
+ Listener,
+} from 'ethers'
+import type {
+ TypedContractEvent,
+ TypedDeferredTopicFilter,
+ TypedEventLog,
+ TypedLogDescription,
+ TypedListener,
+ TypedContractMethod,
+} from '../../../../../common'
+
+export interface Proxy_factoryInterface extends Interface {
+ getFunction(
+ nameOrSignature: 'createProxyWithNonce' | 'proxyCreationCode' | 'createProxy' | 'proxyRuntimeCode',
+ ): FunctionFragment
+
+ getEvent(nameOrSignatureOrTopic: 'ProxyCreation'): EventFragment
+
+ encodeFunctionData(functionFragment: 'createProxyWithNonce', values: [AddressLike, BytesLike, BigNumberish]): string
+ encodeFunctionData(functionFragment: 'proxyCreationCode', values?: undefined): string
+ encodeFunctionData(functionFragment: 'createProxy', values: [AddressLike, BytesLike]): string
+ encodeFunctionData(functionFragment: 'proxyRuntimeCode', values?: undefined): string
+
+ decodeFunctionResult(functionFragment: 'createProxyWithNonce', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'proxyCreationCode', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'createProxy', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'proxyRuntimeCode', data: BytesLike): Result
+}
+
+export namespace ProxyCreationEvent {
+ export type InputTuple = [proxy: AddressLike]
+ export type OutputTuple = [proxy: string]
+ export interface OutputObject {
+ proxy: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export interface Proxy_factory extends BaseContract {
+ connect(runner?: ContractRunner | null): Proxy_factory
+ waitForDeployment(): Promise
+
+ interface: Proxy_factoryInterface
+
+ queryFilter(
+ event: TCEvent,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined,
+ ): Promise>>
+ queryFilter(
+ filter: TypedDeferredTopicFilter,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined,
+ ): Promise>>
+
+ on(event: TCEvent, listener: TypedListener): Promise
+ on(
+ filter: TypedDeferredTopicFilter,
+ listener: TypedListener,
+ ): Promise
+
+ once(event: TCEvent, listener: TypedListener): Promise
+ once(
+ filter: TypedDeferredTopicFilter,
+ listener: TypedListener,
+ ): Promise
+
+ listeners(event: TCEvent): Promise>>
+ listeners(eventName?: string): Promise>
+ removeAllListeners(event?: TCEvent): Promise
+
+ createProxyWithNonce: TypedContractMethod<
+ [_mastercopy: AddressLike, initializer: BytesLike, saltNonce: BigNumberish],
+ [string],
+ 'nonpayable'
+ >
+
+ proxyCreationCode: TypedContractMethod<[], [string], 'view'>
+
+ createProxy: TypedContractMethod<[masterCopy: AddressLike, data: BytesLike], [string], 'nonpayable'>
+
+ proxyRuntimeCode: TypedContractMethod<[], [string], 'view'>
+
+ getFunction(key: string | FunctionFragment): T
+
+ getFunction(
+ nameOrSignature: 'createProxyWithNonce',
+ ): TypedContractMethod<
+ [_mastercopy: AddressLike, initializer: BytesLike, saltNonce: BigNumberish],
+ [string],
+ 'nonpayable'
+ >
+ getFunction(nameOrSignature: 'proxyCreationCode'): TypedContractMethod<[], [string], 'view'>
+ getFunction(
+ nameOrSignature: 'createProxy',
+ ): TypedContractMethod<[masterCopy: AddressLike, data: BytesLike], [string], 'nonpayable'>
+ getFunction(nameOrSignature: 'proxyRuntimeCode'): TypedContractMethod<[], [string], 'view'>
+
+ getEvent(
+ key: 'ProxyCreation',
+ ): TypedContractEvent
+
+ filters: {
+ 'ProxyCreation(address)': TypedContractEvent<
+ ProxyCreationEvent.InputTuple,
+ ProxyCreationEvent.OutputTuple,
+ ProxyCreationEvent.OutputObject
+ >
+ ProxyCreation: TypedContractEvent<
+ ProxyCreationEvent.InputTuple,
+ ProxyCreationEvent.OutputTuple,
+ ProxyCreationEvent.OutputObject
+ >
+ }
+}
diff --git a/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.0.0/index.ts b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.0.0/index.ts
new file mode 100644
index 000000000..c76ff6f37
--- /dev/null
+++ b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.0.0/index.ts
@@ -0,0 +1,5 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+export type { Gnosis_safe } from './Gnosis_safe'
+export type { Proxy_factory } from './Proxy_factory'
diff --git a/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.1.1/Default_callback_handler.ts b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.1.1/Default_callback_handler.ts
new file mode 100644
index 000000000..61acd399c
--- /dev/null
+++ b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.1.1/Default_callback_handler.ts
@@ -0,0 +1,157 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type {
+ BaseContract,
+ BigNumberish,
+ BytesLike,
+ FunctionFragment,
+ Result,
+ Interface,
+ AddressLike,
+ ContractRunner,
+ ContractMethod,
+ Listener,
+} from 'ethers'
+import type {
+ TypedContractEvent,
+ TypedDeferredTopicFilter,
+ TypedEventLog,
+ TypedListener,
+ TypedContractMethod,
+} from '../../../../../common'
+
+export interface Default_callback_handlerInterface extends Interface {
+ getFunction(
+ nameOrSignature:
+ | 'NAME'
+ | 'VERSION'
+ | 'onERC1155Received'
+ | 'onERC1155BatchReceived'
+ | 'onERC721Received'
+ | 'tokensReceived',
+ ): FunctionFragment
+
+ encodeFunctionData(functionFragment: 'NAME', values?: undefined): string
+ encodeFunctionData(functionFragment: 'VERSION', values?: undefined): string
+ encodeFunctionData(
+ functionFragment: 'onERC1155Received',
+ values: [AddressLike, AddressLike, BigNumberish, BigNumberish, BytesLike],
+ ): string
+ encodeFunctionData(
+ functionFragment: 'onERC1155BatchReceived',
+ values: [AddressLike, AddressLike, BigNumberish[], BigNumberish[], BytesLike],
+ ): string
+ encodeFunctionData(
+ functionFragment: 'onERC721Received',
+ values: [AddressLike, AddressLike, BigNumberish, BytesLike],
+ ): string
+ encodeFunctionData(
+ functionFragment: 'tokensReceived',
+ values: [AddressLike, AddressLike, AddressLike, BigNumberish, BytesLike, BytesLike],
+ ): string
+
+ decodeFunctionResult(functionFragment: 'NAME', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'VERSION', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'onERC1155Received', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'onERC1155BatchReceived', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'onERC721Received', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'tokensReceived', data: BytesLike): Result
+}
+
+export interface Default_callback_handler extends BaseContract {
+ connect(runner?: ContractRunner | null): Default_callback_handler
+ waitForDeployment(): Promise
+
+ interface: Default_callback_handlerInterface
+
+ queryFilter(
+ event: TCEvent,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined,
+ ): Promise>>
+ queryFilter(
+ filter: TypedDeferredTopicFilter,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined,
+ ): Promise>>
+
+ on(event: TCEvent, listener: TypedListener): Promise
+ on(
+ filter: TypedDeferredTopicFilter,
+ listener: TypedListener,
+ ): Promise
+
+ once(event: TCEvent, listener: TypedListener): Promise
+ once(
+ filter: TypedDeferredTopicFilter,
+ listener: TypedListener,
+ ): Promise
+
+ listeners(event: TCEvent): Promise>>
+ listeners(eventName?: string): Promise>
+ removeAllListeners(event?: TCEvent): Promise
+
+ NAME: TypedContractMethod<[], [string], 'view'>
+
+ VERSION: TypedContractMethod<[], [string], 'view'>
+
+ onERC1155Received: TypedContractMethod<
+ [arg0: AddressLike, arg1: AddressLike, arg2: BigNumberish, arg3: BigNumberish, arg4: BytesLike],
+ [string],
+ 'nonpayable'
+ >
+
+ onERC1155BatchReceived: TypedContractMethod<
+ [arg0: AddressLike, arg1: AddressLike, arg2: BigNumberish[], arg3: BigNumberish[], arg4: BytesLike],
+ [string],
+ 'nonpayable'
+ >
+
+ onERC721Received: TypedContractMethod<
+ [arg0: AddressLike, arg1: AddressLike, arg2: BigNumberish, arg3: BytesLike],
+ [string],
+ 'nonpayable'
+ >
+
+ tokensReceived: TypedContractMethod<
+ [arg0: AddressLike, arg1: AddressLike, arg2: AddressLike, arg3: BigNumberish, arg4: BytesLike, arg5: BytesLike],
+ [void],
+ 'nonpayable'
+ >
+
+ getFunction(key: string | FunctionFragment): T
+
+ getFunction(nameOrSignature: 'NAME'): TypedContractMethod<[], [string], 'view'>
+ getFunction(nameOrSignature: 'VERSION'): TypedContractMethod<[], [string], 'view'>
+ getFunction(
+ nameOrSignature: 'onERC1155Received',
+ ): TypedContractMethod<
+ [arg0: AddressLike, arg1: AddressLike, arg2: BigNumberish, arg3: BigNumberish, arg4: BytesLike],
+ [string],
+ 'nonpayable'
+ >
+ getFunction(
+ nameOrSignature: 'onERC1155BatchReceived',
+ ): TypedContractMethod<
+ [arg0: AddressLike, arg1: AddressLike, arg2: BigNumberish[], arg3: BigNumberish[], arg4: BytesLike],
+ [string],
+ 'nonpayable'
+ >
+ getFunction(
+ nameOrSignature: 'onERC721Received',
+ ): TypedContractMethod<
+ [arg0: AddressLike, arg1: AddressLike, arg2: BigNumberish, arg3: BytesLike],
+ [string],
+ 'nonpayable'
+ >
+ getFunction(
+ nameOrSignature: 'tokensReceived',
+ ): TypedContractMethod<
+ [arg0: AddressLike, arg1: AddressLike, arg2: AddressLike, arg3: BigNumberish, arg4: BytesLike, arg5: BytesLike],
+ [void],
+ 'nonpayable'
+ >
+
+ filters: {}
+}
diff --git a/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.1.1/Gnosis_safe.ts b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.1.1/Gnosis_safe.ts
new file mode 100644
index 000000000..42c21fb65
--- /dev/null
+++ b/packages/utils/src/types/contracts/@safe-global/safe-deployments/dist/assets/v1.1.1/Gnosis_safe.ts
@@ -0,0 +1,843 @@
+/* Autogenerated file. Do not edit manually. */
+/* tslint:disable */
+/* eslint-disable */
+import type {
+ BaseContract,
+ BigNumberish,
+ BytesLike,
+ FunctionFragment,
+ Result,
+ Interface,
+ EventFragment,
+ AddressLike,
+ ContractRunner,
+ ContractMethod,
+ Listener,
+} from 'ethers'
+import type {
+ TypedContractEvent,
+ TypedDeferredTopicFilter,
+ TypedEventLog,
+ TypedLogDescription,
+ TypedListener,
+ TypedContractMethod,
+} from '../../../../../common'
+
+export interface Gnosis_safeInterface extends Interface {
+ getFunction(
+ nameOrSignature:
+ | 'NAME'
+ | 'VERSION'
+ | 'addOwnerWithThreshold'
+ | 'approvedHashes'
+ | 'changeMasterCopy'
+ | 'changeThreshold'
+ | 'disableModule'
+ | 'domainSeparator'
+ | 'enableModule'
+ | 'execTransactionFromModule'
+ | 'execTransactionFromModuleReturnData'
+ | 'getModules'
+ | 'getModulesPaginated'
+ | 'getOwners'
+ | 'getThreshold'
+ | 'isOwner'
+ | 'nonce'
+ | 'removeOwner'
+ | 'setFallbackHandler'
+ | 'signedMessages'
+ | 'swapOwner'
+ | 'setup'
+ | 'execTransaction'
+ | 'requiredTxGas'
+ | 'approveHash'
+ | 'signMessage'
+ | 'isValidSignature'
+ | 'getMessageHash'
+ | 'encodeTransactionData'
+ | 'getTransactionHash',
+ ): FunctionFragment
+
+ getEvent(
+ nameOrSignatureOrTopic:
+ | 'AddedOwner'
+ | 'ApproveHash'
+ | 'ChangedMasterCopy'
+ | 'ChangedThreshold'
+ | 'DisabledModule'
+ | 'EnabledModule'
+ | 'ExecutionFailure'
+ | 'ExecutionFromModuleFailure'
+ | 'ExecutionFromModuleSuccess'
+ | 'ExecutionSuccess'
+ | 'RemovedOwner'
+ | 'SignMsg',
+ ): EventFragment
+
+ encodeFunctionData(functionFragment: 'NAME', values?: undefined): string
+ encodeFunctionData(functionFragment: 'VERSION', values?: undefined): string
+ encodeFunctionData(functionFragment: 'addOwnerWithThreshold', values: [AddressLike, BigNumberish]): string
+ encodeFunctionData(functionFragment: 'approvedHashes', values: [AddressLike, BytesLike]): string
+ encodeFunctionData(functionFragment: 'changeMasterCopy', values: [AddressLike]): string
+ encodeFunctionData(functionFragment: 'changeThreshold', values: [BigNumberish]): string
+ encodeFunctionData(functionFragment: 'disableModule', values: [AddressLike, AddressLike]): string
+ encodeFunctionData(functionFragment: 'domainSeparator', values?: undefined): string
+ encodeFunctionData(functionFragment: 'enableModule', values: [AddressLike]): string
+ encodeFunctionData(
+ functionFragment: 'execTransactionFromModule',
+ values: [AddressLike, BigNumberish, BytesLike, BigNumberish],
+ ): string
+ encodeFunctionData(
+ functionFragment: 'execTransactionFromModuleReturnData',
+ values: [AddressLike, BigNumberish, BytesLike, BigNumberish],
+ ): string
+ encodeFunctionData(functionFragment: 'getModules', values?: undefined): string
+ encodeFunctionData(functionFragment: 'getModulesPaginated', values: [AddressLike, BigNumberish]): string
+ encodeFunctionData(functionFragment: 'getOwners', values?: undefined): string
+ encodeFunctionData(functionFragment: 'getThreshold', values?: undefined): string
+ encodeFunctionData(functionFragment: 'isOwner', values: [AddressLike]): string
+ encodeFunctionData(functionFragment: 'nonce', values?: undefined): string
+ encodeFunctionData(functionFragment: 'removeOwner', values: [AddressLike, AddressLike, BigNumberish]): string
+ encodeFunctionData(functionFragment: 'setFallbackHandler', values: [AddressLike]): string
+ encodeFunctionData(functionFragment: 'signedMessages', values: [BytesLike]): string
+ encodeFunctionData(functionFragment: 'swapOwner', values: [AddressLike, AddressLike, AddressLike]): string
+ encodeFunctionData(
+ functionFragment: 'setup',
+ values: [AddressLike[], BigNumberish, AddressLike, BytesLike, AddressLike, AddressLike, BigNumberish, AddressLike],
+ ): string
+ encodeFunctionData(
+ functionFragment: 'execTransaction',
+ values: [
+ AddressLike,
+ BigNumberish,
+ BytesLike,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ AddressLike,
+ AddressLike,
+ BytesLike,
+ ],
+ ): string
+ encodeFunctionData(
+ functionFragment: 'requiredTxGas',
+ values: [AddressLike, BigNumberish, BytesLike, BigNumberish],
+ ): string
+ encodeFunctionData(functionFragment: 'approveHash', values: [BytesLike]): string
+ encodeFunctionData(functionFragment: 'signMessage', values: [BytesLike]): string
+ encodeFunctionData(functionFragment: 'isValidSignature', values: [BytesLike, BytesLike]): string
+ encodeFunctionData(functionFragment: 'getMessageHash', values: [BytesLike]): string
+ encodeFunctionData(
+ functionFragment: 'encodeTransactionData',
+ values: [
+ AddressLike,
+ BigNumberish,
+ BytesLike,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ AddressLike,
+ AddressLike,
+ BigNumberish,
+ ],
+ ): string
+ encodeFunctionData(
+ functionFragment: 'getTransactionHash',
+ values: [
+ AddressLike,
+ BigNumberish,
+ BytesLike,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ BigNumberish,
+ AddressLike,
+ AddressLike,
+ BigNumberish,
+ ],
+ ): string
+
+ decodeFunctionResult(functionFragment: 'NAME', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'VERSION', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'addOwnerWithThreshold', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'approvedHashes', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'changeMasterCopy', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'changeThreshold', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'disableModule', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'domainSeparator', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'enableModule', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'execTransactionFromModule', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'execTransactionFromModuleReturnData', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getModules', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getModulesPaginated', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getOwners', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getThreshold', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'isOwner', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'nonce', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'removeOwner', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'setFallbackHandler', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'signedMessages', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'swapOwner', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'setup', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'execTransaction', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'requiredTxGas', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'approveHash', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'signMessage', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'isValidSignature', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getMessageHash', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'encodeTransactionData', data: BytesLike): Result
+ decodeFunctionResult(functionFragment: 'getTransactionHash', data: BytesLike): Result
+}
+
+export namespace AddedOwnerEvent {
+ export type InputTuple = [owner: AddressLike]
+ export type OutputTuple = [owner: string]
+ export interface OutputObject {
+ owner: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace ApproveHashEvent {
+ export type InputTuple = [approvedHash: BytesLike, owner: AddressLike]
+ export type OutputTuple = [approvedHash: string, owner: string]
+ export interface OutputObject {
+ approvedHash: string
+ owner: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace ChangedMasterCopyEvent {
+ export type InputTuple = [masterCopy: AddressLike]
+ export type OutputTuple = [masterCopy: string]
+ export interface OutputObject {
+ masterCopy: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace ChangedThresholdEvent {
+ export type InputTuple = [threshold: BigNumberish]
+ export type OutputTuple = [threshold: bigint]
+ export interface OutputObject {
+ threshold: bigint
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace DisabledModuleEvent {
+ export type InputTuple = [module: AddressLike]
+ export type OutputTuple = [module: string]
+ export interface OutputObject {
+ module: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace EnabledModuleEvent {
+ export type InputTuple = [module: AddressLike]
+ export type OutputTuple = [module: string]
+ export interface OutputObject {
+ module: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace ExecutionFailureEvent {
+ export type InputTuple = [txHash: BytesLike, payment: BigNumberish]
+ export type OutputTuple = [txHash: string, payment: bigint]
+ export interface OutputObject {
+ txHash: string
+ payment: bigint
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace ExecutionFromModuleFailureEvent {
+ export type InputTuple = [module: AddressLike]
+ export type OutputTuple = [module: string]
+ export interface OutputObject {
+ module: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace ExecutionFromModuleSuccessEvent {
+ export type InputTuple = [module: AddressLike]
+ export type OutputTuple = [module: string]
+ export interface OutputObject {
+ module: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace ExecutionSuccessEvent {
+ export type InputTuple = [txHash: BytesLike, payment: BigNumberish]
+ export type OutputTuple = [txHash: string, payment: bigint]
+ export interface OutputObject {
+ txHash: string
+ payment: bigint
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace RemovedOwnerEvent {
+ export type InputTuple = [owner: AddressLike]
+ export type OutputTuple = [owner: string]
+ export interface OutputObject {
+ owner: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export namespace SignMsgEvent {
+ export type InputTuple = [msgHash: BytesLike]
+ export type OutputTuple = [msgHash: string]
+ export interface OutputObject {
+ msgHash: string
+ }
+ export type Event = TypedContractEvent
+ export type Filter = TypedDeferredTopicFilter
+ export type Log = TypedEventLog
+ export type LogDescription = TypedLogDescription
+}
+
+export interface Gnosis_safe extends BaseContract {
+ connect(runner?: ContractRunner | null): Gnosis_safe
+ waitForDeployment(): Promise
+
+ interface: Gnosis_safeInterface
+
+ queryFilter(
+ event: TCEvent,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined,
+ ): Promise>>
+ queryFilter(
+ filter: TypedDeferredTopicFilter,
+ fromBlockOrBlockhash?: string | number | undefined,
+ toBlock?: string | number | undefined,
+ ): Promise>>
+
+ on(event: TCEvent, listener: TypedListener): Promise