react-native-appwrite 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/.github/workflows/publish.yml +9 -8
  2. package/CHANGELOG.md +6 -0
  3. package/LICENSE +1 -1
  4. package/README.md +2 -2
  5. package/dist/cjs/sdk.js +223 -44
  6. package/dist/cjs/sdk.js.map +1 -1
  7. package/dist/esm/sdk.js +219 -45
  8. package/dist/esm/sdk.js.map +1 -1
  9. package/docs/examples/account/create-anonymous-session.md +2 -0
  10. package/docs/examples/account/create-email-password-session.md +2 -0
  11. package/docs/examples/account/create-email-token.md +2 -0
  12. package/docs/examples/account/create-email-verification.md +2 -0
  13. package/docs/examples/account/create-jwt.md +5 -1
  14. package/docs/examples/account/create-magic-url-token.md +2 -0
  15. package/docs/examples/account/create-mfa-authenticator.md +2 -0
  16. package/docs/examples/account/create-mfa-challenge.md +2 -0
  17. package/docs/examples/account/create-mfa-recovery-codes.md +2 -0
  18. package/docs/examples/account/create-o-auth-2-session.md +2 -0
  19. package/docs/examples/account/create-o-auth-2-token.md +2 -0
  20. package/docs/examples/account/create-phone-token.md +2 -0
  21. package/docs/examples/account/create-phone-verification.md +2 -0
  22. package/docs/examples/account/create-push-target.md +2 -0
  23. package/docs/examples/account/create-recovery.md +2 -0
  24. package/docs/examples/account/create-session.md +2 -0
  25. package/docs/examples/account/create-verification.md +2 -0
  26. package/docs/examples/account/create.md +2 -0
  27. package/docs/examples/account/delete-identity.md +2 -0
  28. package/docs/examples/account/delete-mfa-authenticator.md +2 -0
  29. package/docs/examples/account/delete-push-target.md +2 -0
  30. package/docs/examples/account/delete-session.md +2 -0
  31. package/docs/examples/account/delete-sessions.md +2 -0
  32. package/docs/examples/account/get-mfa-recovery-codes.md +2 -0
  33. package/docs/examples/account/get-prefs.md +2 -0
  34. package/docs/examples/account/get-session.md +2 -0
  35. package/docs/examples/account/get.md +2 -0
  36. package/docs/examples/account/list-identities.md +2 -0
  37. package/docs/examples/account/list-logs.md +2 -0
  38. package/docs/examples/account/list-mfa-factors.md +2 -0
  39. package/docs/examples/account/list-sessions.md +2 -0
  40. package/docs/examples/account/update-email-verification.md +2 -0
  41. package/docs/examples/account/update-email.md +2 -0
  42. package/docs/examples/account/update-magic-url-session.md +2 -0
  43. package/docs/examples/account/update-mfa-authenticator.md +2 -0
  44. package/docs/examples/account/update-mfa-challenge.md +2 -0
  45. package/docs/examples/account/update-mfa-recovery-codes.md +2 -0
  46. package/docs/examples/account/update-mfa.md +2 -0
  47. package/docs/examples/account/update-name.md +2 -0
  48. package/docs/examples/account/update-password.md +2 -0
  49. package/docs/examples/account/update-phone-session.md +2 -0
  50. package/docs/examples/account/update-phone-verification.md +2 -0
  51. package/docs/examples/account/update-phone.md +2 -0
  52. package/docs/examples/account/update-prefs.md +2 -0
  53. package/docs/examples/account/update-push-target.md +2 -0
  54. package/docs/examples/account/update-recovery.md +2 -0
  55. package/docs/examples/account/update-session.md +2 -0
  56. package/docs/examples/account/update-status.md +2 -0
  57. package/docs/examples/account/update-verification.md +2 -0
  58. package/docs/examples/avatars/get-browser.md +2 -0
  59. package/docs/examples/avatars/get-credit-card.md +2 -0
  60. package/docs/examples/avatars/get-favicon.md +2 -0
  61. package/docs/examples/avatars/get-flag.md +2 -0
  62. package/docs/examples/avatars/get-image.md +2 -0
  63. package/docs/examples/avatars/get-initials.md +2 -0
  64. package/docs/examples/avatars/get-qr.md +2 -0
  65. package/docs/examples/avatars/get-screenshot.md +7 -5
  66. package/docs/examples/databases/create-document.md +2 -0
  67. package/docs/examples/databases/create-operations.md +2 -0
  68. package/docs/examples/databases/create-transaction.md +2 -0
  69. package/docs/examples/databases/decrement-document-attribute.md +2 -0
  70. package/docs/examples/databases/delete-document.md +2 -0
  71. package/docs/examples/databases/delete-transaction.md +2 -0
  72. package/docs/examples/databases/get-document.md +2 -0
  73. package/docs/examples/databases/get-transaction.md +2 -0
  74. package/docs/examples/databases/increment-document-attribute.md +2 -0
  75. package/docs/examples/databases/list-documents.md +2 -0
  76. package/docs/examples/databases/list-transactions.md +2 -0
  77. package/docs/examples/databases/update-document.md +9 -1
  78. package/docs/examples/databases/update-transaction.md +2 -0
  79. package/docs/examples/databases/upsert-document.md +9 -1
  80. package/docs/examples/functions/create-execution.md +2 -0
  81. package/docs/examples/functions/get-execution.md +2 -0
  82. package/docs/examples/functions/list-executions.md +2 -0
  83. package/docs/examples/graphql/mutation.md +2 -0
  84. package/docs/examples/graphql/query.md +2 -0
  85. package/docs/examples/locale/get.md +2 -0
  86. package/docs/examples/locale/list-codes.md +2 -0
  87. package/docs/examples/locale/list-continents.md +2 -0
  88. package/docs/examples/locale/list-countries-eu.md +2 -0
  89. package/docs/examples/locale/list-countries-phones.md +2 -0
  90. package/docs/examples/locale/list-countries.md +2 -0
  91. package/docs/examples/locale/list-currencies.md +2 -0
  92. package/docs/examples/locale/list-languages.md +2 -0
  93. package/docs/examples/messaging/create-subscriber.md +2 -0
  94. package/docs/examples/messaging/delete-subscriber.md +2 -0
  95. package/docs/examples/storage/create-file.md +2 -0
  96. package/docs/examples/storage/delete-file.md +2 -0
  97. package/docs/examples/storage/get-file-download.md +2 -0
  98. package/docs/examples/storage/get-file-preview.md +2 -0
  99. package/docs/examples/storage/get-file-view.md +2 -0
  100. package/docs/examples/storage/get-file.md +2 -0
  101. package/docs/examples/storage/list-files.md +2 -0
  102. package/docs/examples/storage/update-file.md +2 -0
  103. package/docs/examples/tablesdb/create-operations.md +2 -0
  104. package/docs/examples/tablesdb/create-row.md +2 -0
  105. package/docs/examples/tablesdb/create-transaction.md +2 -0
  106. package/docs/examples/tablesdb/decrement-row-column.md +2 -0
  107. package/docs/examples/tablesdb/delete-row.md +2 -0
  108. package/docs/examples/tablesdb/delete-transaction.md +2 -0
  109. package/docs/examples/tablesdb/get-row.md +2 -0
  110. package/docs/examples/tablesdb/get-transaction.md +2 -0
  111. package/docs/examples/tablesdb/increment-row-column.md +2 -0
  112. package/docs/examples/tablesdb/list-rows.md +2 -0
  113. package/docs/examples/tablesdb/list-transactions.md +2 -0
  114. package/docs/examples/tablesdb/update-row.md +9 -1
  115. package/docs/examples/tablesdb/update-transaction.md +2 -0
  116. package/docs/examples/tablesdb/upsert-row.md +9 -1
  117. package/docs/examples/teams/create-membership.md +4 -2
  118. package/docs/examples/teams/create.md +2 -0
  119. package/docs/examples/teams/delete-membership.md +2 -0
  120. package/docs/examples/teams/delete.md +2 -0
  121. package/docs/examples/teams/get-membership.md +2 -0
  122. package/docs/examples/teams/get-prefs.md +2 -0
  123. package/docs/examples/teams/get.md +2 -0
  124. package/docs/examples/teams/list-memberships.md +2 -0
  125. package/docs/examples/teams/list.md +2 -0
  126. package/docs/examples/teams/update-membership-status.md +2 -0
  127. package/docs/examples/teams/update-membership.md +4 -2
  128. package/docs/examples/teams/update-name.md +2 -0
  129. package/docs/examples/teams/update-prefs.md +2 -0
  130. package/package.json +6 -3
  131. package/rollup.config.js +3 -1
  132. package/src/channel.ts +134 -0
  133. package/src/client.ts +41 -6
  134. package/src/enums/browser-permission.ts +22 -0
  135. package/src/enums/o-auth-provider.ts +0 -1
  136. package/src/enums/roles.ts +5 -0
  137. package/src/index.ts +4 -2
  138. package/src/models.ts +8 -0
  139. package/src/query.ts +54 -9
  140. package/src/services/account.ts +30 -1
  141. package/src/services/avatars.ts +17 -16
  142. package/src/services/databases.ts +5 -9
  143. package/src/services/storage.ts +8 -8
  144. package/src/services/teams.ts +19 -18
  145. package/types/channel.d.ts +71 -0
  146. package/types/enums/browser-permission.d.ts +22 -0
  147. package/types/enums/o-auth-provider.d.ts +1 -2
  148. package/types/enums/roles.d.ts +5 -0
  149. package/types/index.d.ts +4 -2
  150. package/types/models.d.ts +8 -0
  151. package/types/query.d.ts +36 -6
  152. package/types/services/account.d.ts +13 -1
  153. package/types/services/avatars.d.ts +12 -11
  154. package/types/services/databases.d.ts +2 -2
  155. package/types/services/storage.d.ts +8 -8
  156. package/types/services/teams.d.ts +9 -8
  157. package/src/enums/output.ts +0 -9
  158. package/types/enums/output.d.ts +0 -9
@@ -1,3 +1,4 @@
1
+ ```javascript
1
2
  import { Client, Teams } from "react-native-appwrite";
2
3
 
3
4
  const client = new Client()
@@ -14,3 +15,4 @@ const result = await teams.listMemberships({
14
15
  });
15
16
 
16
17
  console.log(result);
18
+ ```
@@ -1,3 +1,4 @@
1
+ ```javascript
1
2
  import { Client, Teams } from "react-native-appwrite";
2
3
 
3
4
  const client = new Client()
@@ -13,3 +14,4 @@ const result = await teams.list({
13
14
  });
14
15
 
15
16
  console.log(result);
17
+ ```
@@ -1,3 +1,4 @@
1
+ ```javascript
1
2
  import { Client, Teams } from "react-native-appwrite";
2
3
 
3
4
  const client = new Client()
@@ -14,3 +15,4 @@ const result = await teams.updateMembershipStatus({
14
15
  });
15
16
 
16
17
  console.log(result);
18
+ ```
@@ -1,4 +1,5 @@
1
- import { Client, Teams } from "react-native-appwrite";
1
+ ```javascript
2
+ import { Client, Teams, Roles } from "react-native-appwrite";
2
3
 
3
4
  const client = new Client()
4
5
  .setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
@@ -9,7 +10,8 @@ const teams = new Teams(client);
9
10
  const result = await teams.updateMembership({
10
11
  teamId: '<TEAM_ID>',
11
12
  membershipId: '<MEMBERSHIP_ID>',
12
- roles: []
13
+ roles: [Roles.Admin]
13
14
  });
14
15
 
15
16
  console.log(result);
17
+ ```
@@ -1,3 +1,4 @@
1
+ ```javascript
1
2
  import { Client, Teams } from "react-native-appwrite";
2
3
 
3
4
  const client = new Client()
@@ -12,3 +13,4 @@ const result = await teams.updateName({
12
13
  });
13
14
 
14
15
  console.log(result);
16
+ ```
@@ -1,3 +1,4 @@
1
+ ```javascript
1
2
  import { Client, Teams } from "react-native-appwrite";
2
3
 
3
4
  const client = new Client()
@@ -12,3 +13,4 @@ const result = await teams.updatePrefs({
12
13
  });
13
14
 
14
15
  console.log(result);
16
+ ```
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "react-native-appwrite",
3
3
  "homepage": "https://appwrite.io/support",
4
- "description": "Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API",
5
- "version": "0.19.0",
4
+ "description": "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API",
5
+ "version": "0.20.0",
6
6
  "license": "BSD-3-Clause",
7
7
  "main": "dist/cjs/sdk.js",
8
8
  "exports": {
@@ -26,6 +26,7 @@
26
26
  },
27
27
  "devDependencies": {
28
28
  "@rollup/plugin-typescript": "8.3.2",
29
+ "@types/json-bigint": "1.0.4",
29
30
  "playwright": "1.56.1",
30
31
  "rollup": "2.75.4",
31
32
  "serve-handler": "6.1.0",
@@ -34,7 +35,9 @@
34
35
  },
35
36
  "dependencies": {
36
37
  "expo-file-system": "18.*.*",
37
- "react-native": ">=0.76.7 <1.0.0"
38
+ "json-bigint": "1.0.0",
39
+ "react-native": ">=0.76.7 <1.0.0",
40
+ "bignumber.js": "^9.0.0"
38
41
  },
39
42
  "peerDependencies": {
40
43
  "expo": "*"
package/rollup.config.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import pkg from "./package.json";
2
2
  import typescript from "@rollup/plugin-typescript";
3
3
 
4
+ const external = Object.keys(pkg.dependencies ?? {});
5
+
4
6
  export default {
5
- external: Object.keys(pkg.dependencies),
6
7
  input: "src/index.ts",
8
+ external,
7
9
  plugins: [typescript()],
8
10
  output: [
9
11
  {
package/src/channel.ts ADDED
@@ -0,0 +1,134 @@
1
+ interface Root {}
2
+ interface Database { _db: any }
3
+ interface Collection { _coll: any }
4
+ interface Document { _doc: any }
5
+ interface TablesDB { _tdb: any }
6
+ interface Table { _tbl: any }
7
+ interface Row { _row: any }
8
+ interface Bucket { _bkt: any }
9
+ interface File { _file: any }
10
+ interface Func { _fn: any }
11
+ interface Execution { _exec: any }
12
+ interface Team { _team: any }
13
+ interface Membership { _mem: any }
14
+ interface Resolved { _res: any }
15
+
16
+ type Actionable = Document | Row | File | Execution | Team | Membership;
17
+
18
+ function normalize(id: string): string {
19
+ const trimmed = id.trim();
20
+ return trimmed === "" ? "*" : trimmed;
21
+ }
22
+
23
+ export class Channel<T> {
24
+ declare _type: T;
25
+
26
+ private constructor(private readonly segments: string[]) {}
27
+
28
+ private next<N>(segment: string, id: string = "*"): Channel<N> {
29
+ return new Channel<N>([...this.segments, segment, normalize(id)]) as any;
30
+ }
31
+
32
+ private resolve(action: string): Channel<Resolved> {
33
+ return new Channel<Resolved>([...this.segments, action]) as any;
34
+ }
35
+
36
+ toString(): string {
37
+ return this.segments.join(".");
38
+ }
39
+
40
+ // --- DATABASE ROUTE ---
41
+ // Only available on Channel<Database>
42
+ collection(this: Channel<Database>, id: string = "*"): Channel<Collection> {
43
+ return this.next<Collection>("collections", id);
44
+ }
45
+
46
+ // Only available on Channel<Collection>
47
+ document(this: Channel<Collection>, id: string = "*"): Channel<Document> {
48
+ return this.next<Document>("documents", id);
49
+ }
50
+
51
+ // --- TABLESDB ROUTE ---
52
+ table(this: Channel<TablesDB>, id: string = "*"): Channel<Table> {
53
+ return this.next<Table>("tables", id);
54
+ }
55
+
56
+ row(this: Channel<Table>, id: string = "*"): Channel<Row> {
57
+ return this.next<Row>("rows", id);
58
+ }
59
+
60
+ // --- BUCKET ROUTE ---
61
+ file(this: Channel<Bucket>, id: string = "*"): Channel<File> {
62
+ return this.next<File>("files", id);
63
+ }
64
+
65
+ // --- FUNCTION ROUTE ---
66
+ execution(this: Channel<Func>, id: string = "*"): Channel<Execution> {
67
+ return this.next<Execution>("executions", id);
68
+ }
69
+
70
+ // --- TERMINAL ACTIONS ---
71
+ // Restricted to the Actionable union
72
+ create(this: Channel<Actionable>): Channel<Resolved> {
73
+ return this.resolve("create");
74
+ }
75
+
76
+ update(this: Channel<Actionable>): Channel<Resolved> {
77
+ return this.resolve("update");
78
+ }
79
+
80
+ delete(this: Channel<Actionable>): Channel<Resolved> {
81
+ return this.resolve("delete");
82
+ }
83
+
84
+ // --- ROOT FACTORIES ---
85
+ static database(id: string = "*") {
86
+ return new Channel<Database>(["databases", normalize(id)]);
87
+ }
88
+
89
+ static tablesdb(id: string = "*") {
90
+ return new Channel<TablesDB>(["tablesdb", normalize(id)]);
91
+ }
92
+
93
+ static bucket(id: string = "*") {
94
+ return new Channel<Bucket>(["buckets", normalize(id)]);
95
+ }
96
+
97
+ static function(id: string = "*") {
98
+ return new Channel<Func>(["functions", normalize(id)]);
99
+ }
100
+
101
+ static team(id: string = "*") {
102
+ return new Channel<Team>(["teams", normalize(id)]);
103
+ }
104
+
105
+ static membership(id: string = "*") {
106
+ return new Channel<Membership>(["memberships", normalize(id)]);
107
+ }
108
+
109
+ static account(userId: string = ""): string {
110
+ const id = normalize(userId);
111
+ return id === "*" ? "account" : `account.${id}`;
112
+ }
113
+
114
+ // Global events
115
+ static get documents(): string {
116
+ return "documents";
117
+ }
118
+
119
+ static get rows(): string {
120
+ return "rows";
121
+ }
122
+
123
+ static get files(): string {
124
+ return "files";
125
+ }
126
+
127
+ static get executions(): string {
128
+ return "executions";
129
+ }
130
+ }
131
+
132
+ // Export types for backward compatibility with realtime
133
+ export type ActionableChannel = Channel<Document> | Channel<Row> | Channel<File> | Channel<Execution> | Channel<Team> | Channel<Membership>;
134
+ export type ResolvedChannel = Channel<Resolved>;
package/src/client.ts CHANGED
@@ -1,6 +1,33 @@
1
1
  import { Models } from './models';
2
2
  import { Service } from './service';
3
3
  import { Platform } from 'react-native';
4
+ import JSONbigModule from 'json-bigint';
5
+ import BigNumber from 'bignumber.js';
6
+ const JSONbigParser = JSONbigModule({ storeAsString: false });
7
+ const JSONbigSerializer = JSONbigModule({ useNativeBigInt: true });
8
+
9
+ const MAX_SAFE = BigInt(Number.MAX_SAFE_INTEGER);
10
+ const MIN_SAFE = BigInt(Number.MIN_SAFE_INTEGER);
11
+
12
+ function reviver(_key: string, value: any): any {
13
+ if (BigNumber.isBigNumber(value)) {
14
+ if (value.isInteger()) {
15
+ const str = value.toFixed();
16
+ const bi = BigInt(str);
17
+ if (bi >= MIN_SAFE && bi <= MAX_SAFE) {
18
+ return Number(str);
19
+ }
20
+ return bi;
21
+ }
22
+ return value.toNumber();
23
+ }
24
+ return value;
25
+ }
26
+
27
+ const JSONbig = {
28
+ parse: (text: string) => JSONbigParser.parse(text, reviver),
29
+ stringify: JSONbigSerializer.stringify
30
+ };
4
31
 
5
32
  type Payload = {
6
33
  [key: string]: any;
@@ -115,7 +142,7 @@ class Client {
115
142
  'x-sdk-name': 'React Native',
116
143
  'x-sdk-platform': 'client',
117
144
  'x-sdk-language': 'reactnative',
118
- 'x-sdk-version': '0.19.0',
145
+ 'x-sdk-version': '0.20.0',
119
146
  'X-Appwrite-Response-Format': '1.8.0',
120
147
  };
121
148
 
@@ -129,6 +156,10 @@ class Client {
129
156
  * @returns {this}
130
157
  */
131
158
  setEndpoint(endpoint: string): this {
159
+ if (!endpoint || typeof endpoint !== 'string') {
160
+ throw new AppwriteException('Endpoint must be a valid string');
161
+ }
162
+
132
163
  if (!endpoint.startsWith('http://') && !endpoint.startsWith('https://')) {
133
164
  throw new AppwriteException('Invalid endpoint URL: ' + endpoint);
134
165
  }
@@ -147,6 +178,10 @@ class Client {
147
178
  * @returns {this}
148
179
  */
149
180
  setEndpointRealtime(endpointRealtime: string): this {
181
+ if (!endpointRealtime || typeof endpointRealtime !== 'string') {
182
+ throw new AppwriteException('Endpoint must be a valid string');
183
+ }
184
+
150
185
  if (!endpointRealtime.startsWith('ws://') && !endpointRealtime.startsWith('wss://')) {
151
186
  throw new AppwriteException('Invalid realtime endpoint URL: ' + endpointRealtime);
152
187
  }
@@ -278,7 +313,7 @@ class Client {
278
313
  }
279
314
 
280
315
  this.realtime.heartbeat = window?.setInterval(() => {
281
- this.realtime.socket?.send(JSON.stringify({
316
+ this.realtime.socket?.send(JSONbig.stringify({
282
317
  type: 'ping'
283
318
  }));
284
319
  }, 20_000);
@@ -347,7 +382,7 @@ class Client {
347
382
  },
348
383
  onMessage: (event) => {
349
384
  try {
350
- const message: RealtimeResponse = JSON.parse(event.data);
385
+ const message: RealtimeResponse = JSONbig.parse(event.data);
351
386
  this.realtime.lastMessage = message;
352
387
  switch (message.type) {
353
388
  case 'event':
@@ -454,7 +489,7 @@ class Client {
454
489
  } else {
455
490
  switch (headers['content-type']) {
456
491
  case 'application/json':
457
- options.body = JSON.stringify(params);
492
+ options.body = JSONbig.stringify(params);
458
493
  break;
459
494
 
460
495
  case 'multipart/form-data':
@@ -487,7 +522,7 @@ class Client {
487
522
  }
488
523
 
489
524
  if (response.headers.get('content-type')?.includes('application/json')) {
490
- data = await response.json();
525
+ data = JSONbig.parse(await response.text());
491
526
  } else if (responseType === 'arrayBuffer') {
492
527
  data = await response.arrayBuffer();
493
528
  } else {
@@ -499,7 +534,7 @@ class Client {
499
534
  if (400 <= response.status) {
500
535
  let responseText = '';
501
536
  if (response.headers.get('content-type')?.includes('application/json')) {
502
- responseText = JSON.stringify(data);
537
+ responseText = JSONbig.stringify(data);
503
538
  } else {
504
539
  responseText = data?.message;
505
540
  }
@@ -0,0 +1,22 @@
1
+ export enum BrowserPermission {
2
+ Geolocation = 'geolocation',
3
+ Camera = 'camera',
4
+ Microphone = 'microphone',
5
+ Notifications = 'notifications',
6
+ Midi = 'midi',
7
+ Push = 'push',
8
+ ClipboardRead = 'clipboard-read',
9
+ ClipboardWrite = 'clipboard-write',
10
+ PaymentHandler = 'payment-handler',
11
+ Usb = 'usb',
12
+ Bluetooth = 'bluetooth',
13
+ Accelerometer = 'accelerometer',
14
+ Gyroscope = 'gyroscope',
15
+ Magnetometer = 'magnetometer',
16
+ AmbientLightSensor = 'ambient-light-sensor',
17
+ BackgroundSync = 'background-sync',
18
+ PersistentStorage = 'persistent-storage',
19
+ ScreenWakeLock = 'screen-wake-lock',
20
+ WebShare = 'web-share',
21
+ XrSpatialTracking = 'xr-spatial-tracking',
22
+ }
@@ -38,5 +38,4 @@ export enum OAuthProvider {
38
38
  Yandex = 'yandex',
39
39
  Zoho = 'zoho',
40
40
  Zoom = 'zoom',
41
- Mock = 'mock',
42
41
  }
@@ -0,0 +1,5 @@
1
+ export enum Roles {
2
+ Admin = 'admin',
3
+ Developer = 'developer',
4
+ Owner = 'owner',
5
+ }
package/src/index.ts CHANGED
@@ -15,6 +15,7 @@ export { Query } from './query';
15
15
  export { Permission } from './permission';
16
16
  export { Role } from './role';
17
17
  export { ID } from './id';
18
+ export { Channel } from './channel';
18
19
  export { Operator, Condition } from './operator';
19
20
  export { AuthenticatorType } from './enums/authenticator-type';
20
21
  export { AuthenticationFactor } from './enums/authentication-factor';
@@ -24,9 +25,10 @@ export { CreditCard } from './enums/credit-card';
24
25
  export { Flag } from './enums/flag';
25
26
  export { Theme } from './enums/theme';
26
27
  export { Timezone } from './enums/timezone';
27
- export { Output } from './enums/output';
28
+ export { BrowserPermission } from './enums/browser-permission';
29
+ export { ImageFormat } from './enums/image-format';
28
30
  export { ExecutionMethod } from './enums/execution-method';
29
31
  export { ImageGravity } from './enums/image-gravity';
30
- export { ImageFormat } from './enums/image-format';
32
+ export { Roles } from './enums/roles';
31
33
  export { ExecutionTrigger } from './enums/execution-trigger';
32
34
  export { ExecutionStatus } from './enums/execution-status';
package/src/models.ts CHANGED
@@ -904,6 +904,14 @@ export namespace Models {
904
904
  * Total number of chunks uploaded
905
905
  */
906
906
  chunksUploaded: number;
907
+ /**
908
+ * Whether file contents are encrypted at rest.
909
+ */
910
+ encryption: boolean;
911
+ /**
912
+ * Compression algorithm used for the file. Will be one of none, [gzip](https://en.wikipedia.org/wiki/Gzip), or [zstd](https://en.wikipedia.org/wiki/Zstd).
913
+ */
914
+ compression: string;
907
915
  }
908
916
 
909
917
  /**
package/src/query.ts CHANGED
@@ -1,5 +1,8 @@
1
- type QueryTypesSingle = string | number | boolean;
2
- export type QueryTypesList = string[] | number[] | boolean[] | Query[] | any[];
1
+ import JSONbigModule from 'json-bigint';
2
+ const JSONbig = JSONbigModule({ useNativeBigInt: true });
3
+
4
+ type QueryTypesSingle = string | number | bigint | boolean;
5
+ export type QueryTypesList = string[] | number[] | bigint[] | boolean[] | Query[] | any[];
3
6
  export type QueryTypes = QueryTypesSingle | QueryTypesList;
4
7
  type AttributesTypes = string | string[];
5
8
 
@@ -26,7 +29,7 @@ export class Query {
26
29
  }
27
30
 
28
31
  toString(): string {
29
- return JSON.stringify({
32
+ return JSONbig.stringify({
30
33
  method: this.method,
31
34
  attribute: this.attribute,
32
35
  values: this.values,
@@ -39,6 +42,16 @@ export class Query {
39
42
  static notEqual = (attribute: string, value: QueryTypes): string =>
40
43
  new Query("notEqual", attribute, value).toString();
41
44
 
45
+ /**
46
+ * Filter resources where attribute matches a regular expression pattern.
47
+ *
48
+ * @param {string} attribute The attribute to filter on.
49
+ * @param {string} pattern The regular expression pattern to match.
50
+ * @returns {string}
51
+ */
52
+ static regex = (attribute: string, pattern: string): string =>
53
+ new Query("regex", attribute, pattern).toString();
54
+
42
55
  static lessThan = (attribute: string, value: QueryTypes): string =>
43
56
  new Query("lessThan", attribute, value).toString();
44
57
 
@@ -57,7 +70,25 @@ export class Query {
57
70
  static isNotNull = (attribute: string): string =>
58
71
  new Query("isNotNull", attribute).toString();
59
72
 
60
- static between = (attribute: string, start: string | number, end: string | number) =>
73
+ /**
74
+ * Filter resources where the specified attributes exist.
75
+ *
76
+ * @param {string[]} attributes The list of attributes that must exist.
77
+ * @returns {string}
78
+ */
79
+ static exists = (attributes: string[]): string =>
80
+ new Query("exists", undefined, attributes).toString();
81
+
82
+ /**
83
+ * Filter resources where the specified attributes do not exist.
84
+ *
85
+ * @param {string[]} attributes The list of attributes that must not exist.
86
+ * @returns {string}
87
+ */
88
+ static notExists = (attributes: string[]): string =>
89
+ new Query("notExists", undefined, attributes).toString();
90
+
91
+ static between = (attribute: string, start: string | number | bigint, end: string | number | bigint) =>
61
92
  new Query("between", attribute, [start, end] as QueryTypesList).toString();
62
93
 
63
94
  static startsWith = (attribute: string, value: string): string =>
@@ -128,11 +159,11 @@ export class Query {
128
159
  * Filter resources where attribute is not between start and end (exclusive).
129
160
  *
130
161
  * @param {string} attribute
131
- * @param {string | number} start
132
- * @param {string | number} end
162
+ * @param {string | number | bigint} start
163
+ * @param {string | number | bigint} end
133
164
  * @returns {string}
134
165
  */
135
- static notBetween = (attribute: string, start: string | number, end: string | number): string =>
166
+ static notBetween = (attribute: string, start: string | number | bigint, end: string | number | bigint): string =>
136
167
  new Query("notBetween", attribute, [start, end] as QueryTypesList).toString();
137
168
 
138
169
  /**
@@ -212,10 +243,24 @@ export class Query {
212
243
  Query.between("$updatedAt", start, end);
213
244
 
214
245
  static or = (queries: string[]) =>
215
- new Query("or", undefined, queries.map((query) => JSON.parse(query))).toString();
246
+ new Query("or", undefined, queries.map((query) => JSONbig.parse(query))).toString();
216
247
 
217
248
  static and = (queries: string[]) =>
218
- new Query("and", undefined, queries.map((query) => JSON.parse(query))).toString();
249
+ new Query("and", undefined, queries.map((query) => JSONbig.parse(query))).toString();
250
+
251
+ /**
252
+ * Filter array elements where at least one element matches all the specified queries.
253
+ *
254
+ * @param {string} attribute The attribute containing the array to filter on.
255
+ * @param {string[]} queries The list of query strings to match against array elements.
256
+ * @returns {string}
257
+ */
258
+ static elemMatch = (attribute: string, queries: string[]): string =>
259
+ new Query(
260
+ "elemMatch",
261
+ attribute,
262
+ queries.map((query) => JSONbig.parse(query))
263
+ ).toString();
219
264
 
220
265
  /**
221
266
  * Filter resources where attribute is at a specific distance from the given coordinates.
@@ -280,13 +280,42 @@ export class Account extends Service {
280
280
  /**
281
281
  * Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.
282
282
  *
283
+ * @param {number} params.duration - Time in seconds before JWT expires. Default duration is 900 seconds, and maximum is 3600 seconds.
283
284
  * @throws {AppwriteException}
284
285
  * @returns {Promise}
285
286
  */
286
- createJWT(): Promise<Models.Jwt> {
287
+ createJWT(params?: { duration?: number }): Promise<Models.Jwt>;
288
+ /**
289
+ * Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.
290
+ *
291
+ * @param {number} duration - Time in seconds before JWT expires. Default duration is 900 seconds, and maximum is 3600 seconds.
292
+ * @throws {AppwriteException}
293
+ * @returns {Promise<Models.Jwt>}
294
+ * @deprecated Use the object parameter style method for a better developer experience.
295
+ */
296
+ createJWT(duration?: number): Promise<Models.Jwt>;
297
+ createJWT(
298
+ paramsOrFirst?: { duration?: number } | number
299
+ ): Promise<Models.Jwt> {
300
+ let params: { duration?: number };
301
+
302
+ if (!paramsOrFirst || (paramsOrFirst && typeof paramsOrFirst === 'object' && !Array.isArray(paramsOrFirst))) {
303
+ params = (paramsOrFirst || {}) as { duration?: number };
304
+ } else {
305
+ params = {
306
+ duration: paramsOrFirst as number
307
+ };
308
+ }
309
+
310
+ const duration = params.duration;
311
+
287
312
  const apiPath = '/account/jwts';
288
313
  const payload: Payload = {};
289
314
 
315
+ if (typeof duration !== 'undefined') {
316
+ payload['duration'] = duration;
317
+ }
318
+
290
319
  const uri = new URL(this.client.config.endpoint + apiPath);
291
320
  return this.client.call('post', uri, {
292
321
  'content-type': 'application/json',