Merge branch '1.8.x' into auth-subscriptions

This commit is contained in:
Atharva Deosthale
2025-11-21 16:31:56 +05:30
22 changed files with 1459 additions and 240 deletions
+134 -18
View File
@@ -25153,7 +25153,7 @@
"properties": {
"type": {
"type": "string",
"description": "Platform type.",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.",
"x-example": "web",
"enum": [
"web",
@@ -46223,7 +46223,11 @@
"type": {
"type": "string",
"description": "Database type.",
"x-example": "legacy"
"x-example": "legacy",
"enum": [
"legacy",
"tablesdb"
]
}
},
"required": [
@@ -47910,7 +47914,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -47998,7 +48010,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48088,7 +48108,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48178,7 +48206,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48251,7 +48287,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48331,7 +48375,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48421,7 +48473,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48501,7 +48561,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48581,7 +48649,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48661,7 +48737,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48769,7 +48853,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48848,7 +48940,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48939,7 +49039,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -53440,16 +53548,24 @@
},
"type": {
"type": "string",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, ios, android, and unity.",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.",
"x-example": "web",
"enum": [
"web",
"flutter-web",
"flutter-ios",
"flutter-android",
"ios",
"flutter-linux",
"flutter-macos",
"flutter-windows",
"apple-ios",
"apple-macos",
"apple-watchos",
"apple-tvos",
"android",
"unity"
"unity",
"react-native-ios",
"react-native-android"
]
},
"key": {
+122 -14
View File
@@ -35093,7 +35093,11 @@
"type": {
"type": "string",
"description": "Database type.",
"x-example": "legacy"
"x-example": "legacy",
"enum": [
"legacy",
"tablesdb"
]
}
},
"required": [
@@ -36780,7 +36784,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -36868,7 +36880,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -36958,7 +36978,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37048,7 +37076,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37121,7 +37157,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37201,7 +37245,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37291,7 +37343,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37371,7 +37431,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37451,7 +37519,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37531,7 +37607,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37639,7 +37723,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37718,7 +37810,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37809,7 +37909,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
+134 -18
View File
@@ -26126,7 +26126,7 @@
"properties": {
"type": {
"type": "string",
"description": "Platform type.",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.",
"x-example": "web",
"enum": [
"web",
@@ -47282,7 +47282,11 @@
"type": {
"type": "string",
"description": "Database type.",
"x-example": "legacy"
"x-example": "legacy",
"enum": [
"legacy",
"tablesdb"
]
}
},
"required": [
@@ -48969,7 +48973,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49057,7 +49069,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49147,7 +49167,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49237,7 +49265,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49310,7 +49346,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49390,7 +49434,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49480,7 +49532,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49560,7 +49620,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49640,7 +49708,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49720,7 +49796,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49828,7 +49912,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49907,7 +49999,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49998,7 +50098,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -54527,16 +54635,24 @@
},
"type": {
"type": "string",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, ios, android, and unity.",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.",
"x-example": "web",
"enum": [
"web",
"flutter-web",
"flutter-ios",
"flutter-android",
"ios",
"flutter-linux",
"flutter-macos",
"flutter-windows",
"apple-ios",
"apple-macos",
"apple-watchos",
"apple-tvos",
"android",
"unity"
"unity",
"react-native-ios",
"react-native-android"
]
},
"key": {
+122 -14
View File
@@ -35520,7 +35520,11 @@
"type": {
"type": "string",
"description": "Database type.",
"x-example": "legacy"
"x-example": "legacy",
"enum": [
"legacy",
"tablesdb"
]
}
},
"required": [
@@ -37207,7 +37211,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37295,7 +37307,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37385,7 +37405,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37475,7 +37503,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37548,7 +37584,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37628,7 +37672,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37718,7 +37770,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37798,7 +37858,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37878,7 +37946,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37958,7 +38034,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -38066,7 +38150,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -38145,7 +38237,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -38236,7 +38336,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
+134 -18
View File
@@ -25305,7 +25305,7 @@
"properties": {
"type": {
"type": "string",
"description": "Platform type.",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.",
"default": null,
"x-example": "web",
"enum": [
@@ -46159,7 +46159,11 @@
"type": {
"type": "string",
"description": "Database type.",
"x-example": "legacy"
"x-example": "legacy",
"enum": [
"legacy",
"tablesdb"
]
}
},
"required": [
@@ -47848,7 +47852,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -47936,7 +47948,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48026,7 +48046,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48116,7 +48144,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48189,7 +48225,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48269,7 +48313,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48359,7 +48411,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48439,7 +48499,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48519,7 +48587,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48599,7 +48675,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48707,7 +48791,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48786,7 +48878,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -48877,7 +48977,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -53396,16 +53504,24 @@
},
"type": {
"type": "string",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, ios, android, and unity.",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.",
"x-example": "web",
"enum": [
"web",
"flutter-web",
"flutter-ios",
"flutter-android",
"ios",
"flutter-linux",
"flutter-macos",
"flutter-windows",
"apple-ios",
"apple-macos",
"apple-watchos",
"apple-tvos",
"android",
"unity"
"unity",
"react-native-ios",
"react-native-android"
]
},
"key": {
+122 -14
View File
@@ -35120,7 +35120,11 @@
"type": {
"type": "string",
"description": "Database type.",
"x-example": "legacy"
"x-example": "legacy",
"enum": [
"legacy",
"tablesdb"
]
}
},
"required": [
@@ -36809,7 +36813,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -36897,7 +36909,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -36987,7 +37007,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37077,7 +37105,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37150,7 +37186,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37230,7 +37274,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37320,7 +37372,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37400,7 +37460,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37480,7 +37548,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37560,7 +37636,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37668,7 +37752,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37747,7 +37839,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37838,7 +37938,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
+134 -18
View File
@@ -26293,7 +26293,7 @@
"properties": {
"type": {
"type": "string",
"description": "Platform type.",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.",
"default": null,
"x-example": "web",
"enum": [
@@ -47233,7 +47233,11 @@
"type": {
"type": "string",
"description": "Database type.",
"x-example": "legacy"
"x-example": "legacy",
"enum": [
"legacy",
"tablesdb"
]
}
},
"required": [
@@ -48922,7 +48926,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49010,7 +49022,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49100,7 +49120,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49190,7 +49218,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49263,7 +49299,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49343,7 +49387,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49433,7 +49485,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49513,7 +49573,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49593,7 +49661,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49673,7 +49749,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49781,7 +49865,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49860,7 +49952,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -49951,7 +50051,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -54498,16 +54606,24 @@
},
"type": {
"type": "string",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, ios, android, and unity.",
"description": "Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.",
"x-example": "web",
"enum": [
"web",
"flutter-web",
"flutter-ios",
"flutter-android",
"ios",
"flutter-linux",
"flutter-macos",
"flutter-windows",
"apple-ios",
"apple-macos",
"apple-watchos",
"apple-tvos",
"android",
"unity"
"unity",
"react-native-ios",
"react-native-android"
]
},
"key": {
+122 -14
View File
@@ -35561,7 +35561,11 @@
"type": {
"type": "string",
"description": "Database type.",
"x-example": "legacy"
"x-example": "legacy",
"enum": [
"legacy",
"tablesdb"
]
}
},
"required": [
@@ -37250,7 +37254,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37338,7 +37350,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37428,7 +37448,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37518,7 +37546,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37591,7 +37627,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37671,7 +37715,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37761,7 +37813,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37841,7 +37901,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -37921,7 +37989,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -38001,7 +38077,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -38109,7 +38193,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -38188,7 +38280,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
@@ -38279,7 +38379,15 @@
"status": {
"type": "string",
"description": "Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`",
"x-example": "available"
"x-example": "available",
"enum": [
"available",
"processing",
"deleting",
"stuck",
"failed"
],
"x-enum-name": "ColumnStatus"
},
"error": {
"type": "string",
+38 -27
View File
@@ -154,7 +154,7 @@ App::setResource('queueForMigrations', function (Publisher $publisher) {
App::setResource('queueForStatsResources', function (Publisher $publisher) {
return new StatsResources($publisher);
}, ['publisher']);
App::setResource('platforms', function (Request $request, Document $console, Document $project) {
App::setResource('platforms', function (Request $request, Document $console, Document $project, Database $dbForPlatform) {
$console->setAttribute('platforms', [ // Always allow current host
'$collection' => ID::custom('platforms'),
'name' => 'Current Host',
@@ -193,11 +193,40 @@ App::setResource('platforms', function (Request $request, Document $console, Doc
], Document::SET_TYPE_APPEND);
}
$origin = \parse_url($request->getOrigin(), PHP_URL_HOST);
if (empty($origin)) {
$origin = \parse_url($request->getReferer(), PHP_URL_HOST);
}
// Safe if rule with same project ID exists
if (!empty($origin)) {
if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
$rule = Authorization::skip(fn () => $dbForPlatform->getDocument('rules', md5($origin ?? '')));
} else {
$rule = Authorization::skip(
fn () => $dbForPlatform->find('rules', [
Query::equal('domain', [$origin]),
Query::limit(1)
])
)[0] ?? new Document();
}
if (!$rule->isEmpty() && $rule->getAttribute('projectInternalId') === $project->getSequence()) {
$project->setAttribute('platforms', [
'$collection' => ID::custom('platforms'),
'type' => Platform::TYPE_WEB,
'name' => $origin,
'hostname' => $origin,
], Document::SET_TYPE_APPEND);
}
}
return [
...$console->getAttribute('platforms', []),
...$project->getAttribute('platforms', []),
];
}, ['request', 'console', 'project']);
}, ['request', 'console', 'project', 'dbForPlatform']);
App::setResource('user', function ($mode, $project, $console, $request, $response, $dbForProject, $dbForPlatform) {
/** @var Appwrite\Utopia\Request $request */
@@ -378,7 +407,7 @@ App::setResource('dbForProject', function (Group $pools, Database $dbForPlatform
if (\in_array($dsn->getHost(), $sharedTables)) {
$database
->setSharedTables(true)
->setTenant((int)$project->getSequence())
->setTenant((int) $project->getSequence())
->setNamespace($dsn->getParam('namespace'));
} else {
$database
@@ -431,7 +460,7 @@ App::setResource('getProjectDB', function (Group $pools, Database $dbForPlatform
if (\in_array($dsn->getHost(), $sharedTables)) {
$database
->setSharedTables(true)
->setTenant((int)$project->getSequence())
->setTenant((int) $project->getSequence())
->setNamespace($dsn->getParam('namespace'));
} else {
$database
@@ -461,7 +490,7 @@ App::setResource('getLogsDB', function (Group $pools, Cache $cache) {
return function (?Document $project = null) use ($pools, $cache, &$database) {
if ($database !== null && $project !== null && !$project->isEmpty() && $project->getId() !== 'console') {
$database->setTenant((int)$project->getSequence());
$database->setTenant((int) $project->getSequence());
return $database;
}
@@ -476,7 +505,7 @@ App::setResource('getLogsDB', function (Group $pools, Cache $cache) {
// set tenant
if ($project !== null && !$project->isEmpty() && $project->getId() !== 'console') {
$database->setTenant((int)$project->getSequence());
$database->setTenant((int) $project->getSequence());
}
return $database;
@@ -504,7 +533,7 @@ App::setResource('redis', function () {
$pass = System::getEnv('_APP_REDIS_PASS', '');
$redis = new \Redis();
@$redis->pconnect($host, (int)$port);
@$redis->pconnect($host, (int) $port);
if ($pass) {
$redis->auth($pass);
}
@@ -717,7 +746,7 @@ App::setResource('schema', function ($utopia, $dbForProject) {
// NOTE: `params` and `urls` are not used internally in the `Schema::build` function below!
$params = [
'list' => function (string $databaseId, string $collectionId, array $args) {
return [ 'queries' => $args['queries']];
return ['queries' => $args['queries']];
},
'create' => function (string $databaseId, string $collectionId, array $args) {
$id = $args['id'] ?? 'unique()';
@@ -966,7 +995,7 @@ App::setResource('resourceToken', function ($project, $dbForProject, $request) {
}
$accessedAt = $token->getAttribute('accessedAt', 0);
if (empty($accessedAt) || DatabaseDateTime::formatTz(DatabaseDateTime::addSeconds(new \DateTime(), - APP_RESOURCE_TOKEN_ACCESS)) > $accessedAt) {
if (empty($accessedAt) || DatabaseDateTime::formatTz(DatabaseDateTime::addSeconds(new \DateTime(), -APP_RESOURCE_TOKEN_ACCESS)) > $accessedAt) {
$token->setAttribute('accessedAt', DatabaseDateTime::now());
Authorization::skip(fn () => $dbForProject->updateDocument('resourceTokens', $token->getId(), $token));
}
@@ -1008,24 +1037,6 @@ App::setResource('httpReferrerSafe', function (Request $request, string $httpRef
return $referrer;
}
// Safe if rule with same project ID exists
if (!empty($origin)) {
if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
$rule = Authorization::skip(fn () => $dbForPlatform->getDocument('rules', md5($origin ?? '')));
} else {
$rule = Authorization::skip(
fn () => $dbForPlatform->find('rules', [
Query::equal('domain', [$origin]),
Query::limit(1)
])
)[0] ?? new Document();
}
if (!$rule->isEmpty() && $rule->getAttribute('projectInternalId') === $project->getSequence()) {
return $referrer;
}
}
// Unsafe; Localhost is always safe for ease of local development
$origin = 'localhost';
$protocol = \parse_url($request->getOrigin($httpReferrer), PHP_URL_SCHEME);
Generated
+66 -67
View File
@@ -1569,16 +1569,16 @@
},
{
"name": "paragonie/constant_time_encoding",
"version": "v2.8.0",
"version": "v2.8.2",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
"reference": "ce27936c8dfb73e3ab9c94469130428af9752c96"
"reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/ce27936c8dfb73e3ab9c94469130428af9752c96",
"reference": "ce27936c8dfb73e3ab9c94469130428af9752c96",
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/e30811f7bc69e4b5b6d5783e712c06c8eabf0226",
"reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226",
"shasum": ""
},
"require": {
@@ -1632,7 +1632,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding"
},
"time": "2025-09-22T20:41:46+00:00"
"time": "2025-09-24T15:12:37+00:00"
},
{
"name": "paragonie/random_compat",
@@ -2596,16 +2596,16 @@
},
{
"name": "symfony/http-client",
"version": "v7.3.3",
"version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "333b9bd7639cbdaecd25a3a48a9d2dcfaa86e019"
"reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/333b9bd7639cbdaecd25a3a48a9d2dcfaa86e019",
"reference": "333b9bd7639cbdaecd25a3a48a9d2dcfaa86e019",
"url": "https://api.github.com/repos/symfony/http-client/zipball/4b62871a01c49457cf2a8e560af7ee8a94b87a62",
"reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62",
"shasum": ""
},
"require": {
@@ -2672,7 +2672,7 @@
"http"
],
"support": {
"source": "https://github.com/symfony/http-client/tree/v7.3.3"
"source": "https://github.com/symfony/http-client/tree/v7.3.4"
},
"funding": [
{
@@ -2692,7 +2692,7 @@
"type": "tidelift"
}
],
"time": "2025-08-27T07:45:05+00:00"
"time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -3635,16 +3635,16 @@
},
{
"name": "utopia-php/database",
"version": "1.5.0",
"version": "1.5.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
"reference": "24c4519b4ac32aee13af31dddd984db2a3b34980"
"reference": "56efe4daaf23abb753553acffccdcc04cd6178c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/database/zipball/24c4519b4ac32aee13af31dddd984db2a3b34980",
"reference": "24c4519b4ac32aee13af31dddd984db2a3b34980",
"url": "https://api.github.com/repos/utopia-php/database/zipball/56efe4daaf23abb753553acffccdcc04cd6178c9",
"reference": "56efe4daaf23abb753553acffccdcc04cd6178c9",
"shasum": ""
},
"require": {
@@ -3685,9 +3685,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
"source": "https://github.com/utopia-php/database/tree/1.5.0"
"source": "https://github.com/utopia-php/database/tree/1.5.1"
},
"time": "2025-09-18T14:42:01+00:00"
"time": "2025-10-01T04:44:14+00:00"
},
{
"name": "utopia-php/detector",
@@ -3939,16 +3939,16 @@
},
{
"name": "utopia-php/framework",
"version": "0.33.27",
"version": "0.33.28",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/http.git",
"reference": "d9d10a895e85c8c7675220347cc6109db9d3bd37"
"reference": "5aaa94d406577b0059ad28c78022606890dc6de0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/http/zipball/d9d10a895e85c8c7675220347cc6109db9d3bd37",
"reference": "d9d10a895e85c8c7675220347cc6109db9d3bd37",
"url": "https://api.github.com/repos/utopia-php/http/zipball/5aaa94d406577b0059ad28c78022606890dc6de0",
"reference": "5aaa94d406577b0059ad28c78022606890dc6de0",
"shasum": ""
},
"require": {
@@ -3980,9 +3980,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/http/issues",
"source": "https://github.com/utopia-php/http/tree/0.33.27"
"source": "https://github.com/utopia-php/http/tree/0.33.28"
},
"time": "2025-09-07T18:40:53+00:00"
"time": "2025-09-25T10:44:24+00:00"
},
{
"name": "utopia-php/image",
@@ -4187,16 +4187,16 @@
},
{
"name": "utopia-php/migration",
"version": "1.1.1",
"version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/migration.git",
"reference": "c42935a6a4ee3701c68d24244e82ecb39e945ec4"
"reference": "42ff497c5231f5a727d1e229419ff1d2195d8093"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/migration/zipball/c42935a6a4ee3701c68d24244e82ecb39e945ec4",
"reference": "c42935a6a4ee3701c68d24244e82ecb39e945ec4",
"url": "https://api.github.com/repos/utopia-php/migration/zipball/42ff497c5231f5a727d1e229419ff1d2195d8093",
"reference": "42ff497c5231f5a727d1e229419ff1d2195d8093",
"shasum": ""
},
"require": {
@@ -4237,9 +4237,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/migration/issues",
"source": "https://github.com/utopia-php/migration/tree/1.1.1"
"source": "https://github.com/utopia-php/migration/tree/1.2.0"
},
"time": "2025-09-10T06:17:20+00:00"
"time": "2025-09-24T10:32:24+00:00"
},
{
"name": "utopia-php/orchestration",
@@ -5004,16 +5004,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
"version": "1.4.0",
"version": "1.4.2",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
"reference": "3583fa6fddb1d1a902b37ff2048527a5827fc008"
"reference": "07a7d6276bd684b49469ad7b9e8c3c962121c6fd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/3583fa6fddb1d1a902b37ff2048527a5827fc008",
"reference": "3583fa6fddb1d1a902b37ff2048527a5827fc008",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/07a7d6276bd684b49469ad7b9e8c3c962121c6fd",
"reference": "07a7d6276bd684b49469ad7b9e8c3c962121c6fd",
"shasum": ""
},
"require": {
@@ -5049,9 +5049,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
"source": "https://github.com/appwrite/sdk-generator/tree/1.4.0"
"source": "https://github.com/appwrite/sdk-generator/tree/1.4.2"
},
"time": "2025-09-23T02:27:10+00:00"
"time": "2025-10-01T03:23:04+00:00"
},
{
"name": "doctrine/annotations",
@@ -6230,16 +6230,16 @@
},
{
"name": "phpunit/phpunit",
"version": "9.6.27",
"version": "9.6.29",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "0a9aa4440b6a9528cf360071502628d717af3e0a"
"reference": "9ecfec57835a5581bc888ea7e13b51eb55ab9dd3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0a9aa4440b6a9528cf360071502628d717af3e0a",
"reference": "0a9aa4440b6a9528cf360071502628d717af3e0a",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9ecfec57835a5581bc888ea7e13b51eb55ab9dd3",
"reference": "9ecfec57835a5581bc888ea7e13b51eb55ab9dd3",
"shasum": ""
},
"require": {
@@ -6264,7 +6264,7 @@
"sebastian/comparator": "^4.0.9",
"sebastian/diff": "^4.0.6",
"sebastian/environment": "^5.1.5",
"sebastian/exporter": "^4.0.6",
"sebastian/exporter": "^4.0.8",
"sebastian/global-state": "^5.0.8",
"sebastian/object-enumerator": "^4.0.4",
"sebastian/resource-operations": "^3.0.4",
@@ -6313,7 +6313,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.27"
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.29"
},
"funding": [
{
@@ -6337,7 +6337,7 @@
"type": "tidelift"
}
],
"time": "2025-09-14T06:18:03+00:00"
"time": "2025-09-24T06:29:11+00:00"
},
{
"name": "psr/cache",
@@ -6829,16 +6829,16 @@
},
{
"name": "sebastian/exporter",
"version": "4.0.7",
"version": "4.0.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
"reference": "eb49b981ef0817890129cb70f774506bebe57740"
"reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/eb49b981ef0817890129cb70f774506bebe57740",
"reference": "eb49b981ef0817890129cb70f774506bebe57740",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/14c6ba52f95a36c3d27c835d65efc7123c446e8c",
"reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c",
"shasum": ""
},
"require": {
@@ -6894,7 +6894,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.7"
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.8"
},
"funding": [
{
@@ -6914,7 +6914,7 @@
"type": "tidelift"
}
],
"time": "2025-09-22T05:18:21+00:00"
"time": "2025-09-24T06:03:27+00:00"
},
{
"name": "sebastian/global-state",
@@ -7497,16 +7497,16 @@
},
{
"name": "symfony/console",
"version": "v7.3.3",
"version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7"
"reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7",
"reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7",
"url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
"reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
"shasum": ""
},
"require": {
@@ -7571,7 +7571,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v7.3.3"
"source": "https://github.com/symfony/console/tree/v7.3.4"
},
"funding": [
{
@@ -7591,7 +7591,7 @@
"type": "tidelift"
}
],
"time": "2025-08-25T06:35:40+00:00"
"time": "2025-09-22T15:31:00+00:00"
},
{
"name": "symfony/filesystem",
@@ -8134,16 +8134,16 @@
},
{
"name": "symfony/process",
"version": "v7.3.3",
"version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "32241012d521e2e8a9d713adb0812bb773b907f1"
"reference": "f24f8f316367b30810810d4eb30c543d7003ff3b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1",
"reference": "32241012d521e2e8a9d713adb0812bb773b907f1",
"url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b",
"reference": "f24f8f316367b30810810d4eb30c543d7003ff3b",
"shasum": ""
},
"require": {
@@ -8175,7 +8175,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/process/tree/v7.3.3"
"source": "https://github.com/symfony/process/tree/v7.3.4"
},
"funding": [
{
@@ -8195,20 +8195,20 @@
"type": "tidelift"
}
],
"time": "2025-08-18T09:42:54+00:00"
"time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/string",
"version": "v7.3.3",
"version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c"
"reference": "f96476035142921000338bad71e5247fbc138872"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c",
"reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c",
"url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872",
"reference": "f96476035142921000338bad71e5247fbc138872",
"shasum": ""
},
"require": {
@@ -8223,7 +8223,6 @@
},
"require-dev": {
"symfony/emoji": "^7.1",
"symfony/error-handler": "^6.4|^7.0",
"symfony/http-client": "^6.4|^7.0",
"symfony/intl": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3.0",
@@ -8266,7 +8265,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v7.3.3"
"source": "https://github.com/symfony/string/tree/v7.3.4"
},
"funding": [
{
@@ -8286,7 +8285,7 @@
"type": "tidelift"
}
],
"time": "2025-08-25T06:35:40+00:00"
"time": "2025-09-11T14:36:48+00:00"
},
{
"name": "textalk/websocket",
+3
View File
@@ -273,6 +273,9 @@ class Oidc extends OAuth2
{
if (empty($this->wellKnownConfiguration)) {
$response = $this->request('GET', $this->getWellKnownEndpoint());
if (empty($response)) {
throw new Exception('Invalid well-known configuration');
}
$this->wellKnownConfiguration = \json_decode($response, true);
}
+1
View File
@@ -592,6 +592,7 @@ class Event
$this->project = $event->getProject();
$this->user = $event->getUser();
$this->payload = $event->getPayload();
$this->sensitive = $event->sensitive;
$this->event = $event->getEvent();
$this->params = $event->getParams();
$this->context = $event->context;
@@ -108,10 +108,7 @@ class XList extends Action
$audit = new Audit($dbForProject);
$type = $this->getCollectionsEventsContext();
$context = $this->getContext();
$resource = match ($context) {
ROWS => "database/$databaseId/grid/$type/$collectionId/$context/{$document->getId()}",
default => "database/$databaseId/$type/$collectionId/$context/{$document->getId()}",
};
$resource = "database/$databaseId/$type/$collectionId/$context/{$document->getId()}";
$logs = $audit->getLogsByResource($resource, $queries);
@@ -104,11 +104,7 @@ class XList extends Action
$audit = new Audit($dbForProject);
$context = $this->getContext();
$resource = match ($context) {
TABLES => "database/$databaseId/grid/$context/$collectionId",
default => "database/$databaseId/$context/$collectionId",
};
$resource = "database/$databaseId/$context/$collectionId";
$logs = $audit->getLogsByResource($resource, $queries);
$output = [];
@@ -686,6 +686,7 @@ class Builds extends Action
if ($version === 'v2') {
$command = 'tar -zxf /tmp/code.tar.gz -C /usr/code && cd /usr/local/src/ && ./build.sh';
} else {
$outputDirectory = $deployment->getAttribute('buildOutput') ?? $resource->getAttribute('outputDirectory');
if ($resource->getCollection() === 'sites') {
$listFilesCommand = '';
@@ -693,8 +694,8 @@ class Builds extends Action
$listFilesCommand .= 'echo "{APPWRITE_DETECTION_SEPARATOR_START}" && cd /usr/local/build';
// Enter output directory, if set
if (!empty($resource->getAttribute('outputDirectory', ''))) {
$listFilesCommand .= ' && cd ' . \escapeshellarg($resource->getAttribute('outputDirectory', ''));
if (!empty($outputDirectory)) {
$listFilesCommand .= ' && cd ' . \escapeshellarg($outputDirectory);
}
// Print files, and end separation
@@ -725,7 +726,7 @@ class Builds extends Action
destination: APP_STORAGE_BUILDS . "/app-{$project->getId()}",
variables: $vars,
command: $command,
outputDirectory: $resource->getAttribute('outputDirectory', '')
outputDirectory: $outputDirectory ?? ''
);
Console::log('createRuntime finished');
+78
View File
@@ -624,6 +624,84 @@ abstract class Format
return 'AttributeStatus';
}
break;
case 'columnString':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnInteger':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnFloat':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnBoolean':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnEmail':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnEnum':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnIp':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnUrl':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnDatetime':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnRelationship':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnPoint':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnLine':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'columnPolygon':
switch ($param) {
case 'status':
return 'ColumnStatus';
}
break;
case 'healthStatus':
switch ($param) {
case 'status':
@@ -23,10 +23,11 @@ class Column extends Model
'example' => 'string',
])
->addRule('status', [
'type' => self::TYPE_STRING,
'type' => self::TYPE_ENUM,
'description' => 'Column status. Possible values: `available`, `processing`, `deleting`, `stuck`, or `failed`',
'default' => '',
'example' => 'available',
'enum' => ['available', 'processing', 'deleting', 'stuck', 'failed'],
])
->addRule('error', [
'type' => self::TYPE_STRING,
@@ -41,10 +41,11 @@ class Database extends Model
'example' => false,
])
->addRule('type', [
'type' => self::TYPE_STRING,
'type' => self::TYPE_ENUM,
'description' => 'Database type.',
'default' => 'legacy',
'example' => 'legacy',
'enum' => ['legacy', 'tablesdb'],
])
;
}
@@ -41,10 +41,10 @@ class Platform extends Model
])
->addRule('type', [
'type' => self::TYPE_ENUM,
'description' => 'Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, ios, android, and unity.',
'description' => 'Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.',
'default' => '',
'example' => 'web',
'enum' => ['web', 'flutter-web', 'flutter-ios', 'flutter-android', 'ios', 'android', 'unity'],
'enum' => ['web', 'flutter-web', 'flutter-ios', 'flutter-android', 'flutter-linux', 'flutter-macos', 'flutter-windows', 'apple-ios', 'apple-macos', 'apple-watchos', 'apple-tvos', 'android', 'unity', 'react-native-ios', 'react-native-android'],
])
->addRule('key', [
'type' => self::TYPE_STRING,
@@ -1539,6 +1539,77 @@ class AccountCustomClientTest extends Scope
return [];
}
public function testCreateOidcOAuth2Token(): array
{
$provider = 'oidc';
$appId = '1';
// Valid well-known configuration
$secret = '{
"wellKnownEndpoint": "https://accounts.google.com/.well-known/openid-configuration",
"authorizationEndpoint": "https://accounts.google.com/o/oauth2/v2/auth",
"tokenEndpoint": "https://oauth2.googleapis.com/token",
"userinfoEndpoint": "https://openidconnect.googleapis.com/v1/userinfo"
}';
$response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $this->getProject()['$id'] . '/oauth2', array_merge([
'origin' => 'http://localhost',
'content-type' => 'application/json',
'x-appwrite-project' => 'console',
'cookie' => 'a_session_console=' . $this->getRoot()['session'],
]), [
'provider' => $provider,
'appId' => $appId,
'secret' => $secret,
'enabled' => true,
]);
$this->assertEquals(200, $response['headers']['status-code']);
$response = $this->client->call(Client::METHOD_GET, '/account/tokens/oauth2/' . $provider, array_merge([
'origin' => 'http://localhost',
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
]), [
'provider' => $provider,
'success' => 'http://localhost/v1/mock/tests/general/oauth2/success',
'failure' => 'http://localhost/v1/mock/tests/general/oauth2/failure',
], true, false);
$this->assertEquals(301, $response['headers']['status-code']);
// Invalid well-known configuration
$secret = '{}';
$response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $this->getProject()['$id'] . '/oauth2', array_merge([
'origin' => 'http://localhost',
'content-type' => 'application/json',
'x-appwrite-project' => 'console',
'cookie' => 'a_session_console=' . $this->getRoot()['session'],
]), [
'provider' => $provider,
'appId' => $appId,
'secret' => $secret,
'enabled' => true,
]);
$this->assertEquals(200, $response['headers']['status-code']);
$response = $this->client->call(Client::METHOD_GET, '/account/tokens/oauth2/' . $provider, array_merge([
'origin' => 'http://localhost',
'content-type' => 'application/json',
'x-appwrite-project' => $this->getProject()['$id'],
]), [
'provider' => $provider,
'success' => 'http://localhost/v1/mock/tests/general/oauth2/success',
'failure' => 'http://localhost/v1/mock/tests/general/oauth2/failure',
]);
$this->assertEquals(500, $response['headers']['status-code']);
return [];
}
public function testBlockedAccount(): array
{
$email = uniqid() . 'user@localhost.test';
@@ -2507,4 +2507,155 @@ class RealtimeCustomClientTest extends Scope
$client->close();
}
public function testRelationshipPayloadHidesRelatedDoc()
{
$user = $this->getUser();
$session = $user['session'] ?? '';
$projectId = $this->getProject()['$id'];
$client = $this->getWebsocket(['documents'], [
'origin' => 'http://localhost',
'cookie' => 'a_session_' . $projectId . '=' . $session
]);
$response = json_decode($client->receive(), true);
$this->assertArrayHasKey('type', $response);
$this->assertEquals('connected', $response['type']);
// Create database
$database = $this->client->call(Client::METHOD_POST, '/databases', array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $projectId,
'x-appwrite-key' => $this->getProject()['apiKey']
]), [
'databaseId' => ID::unique(),
'name' => 'db-rel'
]);
$databaseId = $database['body']['$id'];
$level1 = $this->client->call(Client::METHOD_POST, "/databases/{$databaseId}/collections", array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $projectId,
'x-appwrite-key' => $this->getProject()['apiKey']
]), [
'collectionId' => ID::unique(),
'name' => 'level1',
'permissions' => [
Permission::read(Role::any()),
Permission::create(Role::any()),
Permission::update(Role::any()),
Permission::delete(Role::any()),
],
'documentSecurity' => true,
]);
$level1Id = $level1['body']['$id'];
$level2 = $this->client->call(Client::METHOD_POST, "/databases/{$databaseId}/collections", array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $projectId,
'x-appwrite-key' => $this->getProject()['apiKey']
]), [
'collectionId' => ID::unique(),
'name' => 'level2',
'permissions' => [
Permission::read(Role::any()),
Permission::create(Role::any()),
Permission::update(Role::any()),
Permission::delete(Role::any()),
],
'documentSecurity' => true,
]);
$level2Id = $level2['body']['$id'];
$this->client->call(Client::METHOD_POST, "/databases/{$databaseId}/collections/{$level1Id}/attributes/string", array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $projectId,
'x-appwrite-key' => $this->getProject()['apiKey']
]), [
'key' => 'name',
'size' => 256,
'required' => false,
]);
$this->client->call(Client::METHOD_POST, "/databases/{$databaseId}/collections/{$level2Id}/attributes/string", array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $projectId,
'x-appwrite-key' => $this->getProject()['apiKey']
]), [
'key' => 'name',
'size' => 256,
'required' => false,
]);
sleep(2);
// two-way one-to-one relationship from level1 to level2
$this->client->call(Client::METHOD_POST, "/databases/{$databaseId}/collections/{$level1Id}/attributes/relationship", array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $projectId,
'x-appwrite-key' => $this->getProject()['apiKey']
]), [
'relatedCollectionId' => $level2Id,
'type' => 'oneToOne',
'twoWay' => true,
'key' => 'level2Ref',
'onDelete' => 'cascade',
]);
sleep(2);
$doc2 = $this->client->call(Client::METHOD_POST, "/databases/{$databaseId}/collections/{$level2Id}/documents", array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $projectId,
], $this->getHeaders()), [
'documentId' => ID::unique(),
'data' => [ 'name' => 'L2' ],
'permissions' => [
Permission::read(Role::any()),
Permission::update(Role::any()),
Permission::delete(Role::any()),
],
]);
$doc2Id = $doc2['body']['$id'];
$doc1 = $this->client->call(Client::METHOD_POST, "/databases/{$databaseId}/collections/{$level1Id}/documents", array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $projectId,
], $this->getHeaders()), [
'documentId' => ID::unique(),
'data' => [ 'name' => 'L1' ],
'permissions' => [
Permission::read(Role::any()),
Permission::update(Role::any()),
Permission::delete(Role::any()),
],
]);
$doc1Id = $doc1['body']['$id'];
json_decode($client->receive(), true);
$this->client->call(Client::METHOD_PATCH, "/databases/{$databaseId}/collections/{$level1Id}/documents/{$doc1Id}", array_merge([
'content-type' => 'application/json',
'x-appwrite-project' => $projectId,
'x-appwrite-key' => $this->getProject()['apiKey']
]), [
'data' => [
'level2Ref' => $doc2Id,
],
]);
// payload should not contain the relationship attribute 'level2Ref'
$event = json_decode($client->receive(), true);
$this->assertArrayHasKey('type', $event);
$this->assertEquals('event', $event['type']);
$this->assertArrayHasKey('data', $event);
$this->assertNotEmpty($event['data']);
$this->assertArrayHasKey('payload', $event['data']);
$this->assertArrayHasKey('$id', $event['data']['payload']);
$this->assertEquals($doc1Id, $event['data']['payload']['$id']);
$this->assertArrayNotHasKey('level2Ref', $event['data']['payload']);
$client->close();
}
}
@@ -2,8 +2,21 @@ module.exports = async(context) => {
// Create a string that is 1000001 characters long (exceeds the 1000000 limit)
const longString = 'z' + 'a'.repeat(1000000);
context.log(longString);
context.error(longString);
// Split the string into chunks of 8000 characters (max limit for each log and error)
const chunkSize = 8000;
const chunks = [];
for (let i = 0; i < longString.length; i += chunkSize) {
chunks.push(longString.slice(i, i + chunkSize));
}
chunks.forEach((chunk, index) => {
context.log(chunk);
});
chunks.forEach((chunk, index) => {
context.error(chunk);
});
return context.res.json({
motto: 'Build like a team of hundreds_',