@quatrain/cloudwrapper-supabase 1.1.14 → 1.1.16

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.
@@ -1,5 +1,6 @@
1
- import { AbstractCloudWrapper, DatabaseTriggerType } from '@quatrain/cloudwrapper';
1
+ import { AbstractCloudWrapper, DatabaseTriggerType, StorageTriggerType } from '@quatrain/cloudwrapper';
2
2
  import { SupabaseClient, RealtimeChannel } from '@supabase/supabase-js';
3
+ import { FileType } from '@quatrain/storage';
3
4
  export type SupabaseParams = {
4
5
  useEmulator?: boolean;
5
6
  url?: string;
@@ -20,7 +21,15 @@ export declare class SupabaseCloudWrapper extends AbstractCloudWrapper {
20
21
  schema: string;
21
22
  table: string;
22
23
  };
24
+ storageTrigger(trigger: StorageTriggerType): void | {
25
+ event: any;
26
+ schema: string;
27
+ table: string;
28
+ };
23
29
  triggersEnable(): void;
24
30
  triggersDisable(): void;
25
31
  protected _initialize(): void;
32
+ protected _payload2File(payload: {
33
+ [x: string]: any;
34
+ }): FileType | undefined;
26
35
  }
@@ -35,19 +35,6 @@ class SupabaseCloudWrapper extends cloudwrapper_1.AbstractCloudWrapper {
35
35
  this._isInitialized = false;
36
36
  this._initialize();
37
37
  }
38
- // httpsTrigger(
39
- // func: any,
40
- // params: HttpsOptions = { memory: '4GiB', timeoutSeconds: 500 }
41
- // ): HttpsFunction {
42
- // this._initialize()
43
- // return onRequest(
44
- // {
45
- // concurrency: 500,
46
- // ...params,
47
- // },
48
- // func
49
- // )
50
- // }
51
38
  databaseTrigger(trigger) {
52
39
  var _a;
53
40
  this._initialize();
@@ -64,12 +51,13 @@ class SupabaseCloudWrapper extends cloudwrapper_1.AbstractCloudWrapper {
64
51
  return params;
65
52
  }
66
53
  try {
54
+ const schema = trigger.schema || 'public';
67
55
  const params = {
68
56
  event: Reflect.get(exports.eventMap, trigger.event),
69
- schema: trigger.schema || 'public',
57
+ schema,
70
58
  table: trigger.model,
71
59
  };
72
- cloudwrapper_1.CloudWrapper.info(`Set up DB trigger ${trigger.name} for ${trigger.event} event on table ${params.table}`);
60
+ cloudwrapper_1.CloudWrapper.info(`Set up DB trigger ${trigger.name} for ${trigger.event} event on table ${schema}.${params.table}`);
73
61
  (_a = this._supabaseClient) === null || _a === void 0 ? void 0 : _a.channel(trigger.name).on('postgres_changes', params, (_b) => __awaiter(this, void 0, void 0, function* () {
74
62
  var { old: before, new: after } = _b, context = __rest(_b, ["old", "new"]);
75
63
  cloudwrapper_1.CloudWrapper.info(`Triggering function on event ${trigger.name}`);
@@ -83,6 +71,52 @@ class SupabaseCloudWrapper extends cloudwrapper_1.AbstractCloudWrapper {
83
71
  })).subscribe();
84
72
  return params;
85
73
  }
74
+ catch (err) {
75
+ cloudwrapper_1.CloudWrapper.error(err);
76
+ throw new Error(`Realtime channel subscription failed`);
77
+ }
78
+ }
79
+ storageTrigger(trigger) {
80
+ var _a;
81
+ this._initialize();
82
+ if (!this._realtimeClient) {
83
+ throw new Error(`Realtime channel is not enabled`);
84
+ }
85
+ if (typeof trigger.script !== 'function') {
86
+ throw new Error(`Passed script value is not a function`);
87
+ }
88
+ if (Array.isArray(trigger.event)) {
89
+ const params = trigger.event.forEach((event) => {
90
+ return this.storageTrigger(Object.assign(Object.assign({}, trigger), { event, name: `${trigger.name}-${event}` }));
91
+ });
92
+ return params;
93
+ }
94
+ try {
95
+ const params = {
96
+ event: Reflect.get(exports.eventMap, trigger.event),
97
+ schema: 'storage',
98
+ table: 'objects',
99
+ };
100
+ cloudwrapper_1.CloudWrapper.info(`Set up Storage trigger ${trigger.name} for ${trigger.event} event`);
101
+ (_a = this._supabaseClient) === null || _a === void 0 ? void 0 : _a.channel(trigger.name).on('postgres_changes', params, (_b) => __awaiter(this, void 0, void 0, function* () {
102
+ var { old: before, new: after } = _b, context = __rest(_b, ["old", "new"]);
103
+ cloudwrapper_1.CloudWrapper.info(`Triggering storage function on event ${trigger.name}`);
104
+ try {
105
+ const payload = {
106
+ before: this._payload2File(before),
107
+ after: this._payload2File(after),
108
+ context,
109
+ };
110
+ cloudwrapper_1.CloudWrapper.debug(payload);
111
+ return yield trigger.script(payload);
112
+ }
113
+ catch (err) {
114
+ cloudwrapper_1.CloudWrapper.error(err.message);
115
+ console.log(err);
116
+ }
117
+ })).subscribe();
118
+ return params;
119
+ }
86
120
  catch (err) {
87
121
  console.log(err);
88
122
  throw new Error(`Realtime channel subscription failed`);
@@ -115,5 +149,22 @@ class SupabaseCloudWrapper extends cloudwrapper_1.AbstractCloudWrapper {
115
149
  cloudwrapper_1.CloudWrapper.info(`Supabase App initialized`);
116
150
  }
117
151
  }
152
+ _payload2File(payload) {
153
+ console.log('received payload', payload);
154
+ if (!payload.metadata) {
155
+ return undefined;
156
+ }
157
+ if (Object.keys(payload).length === 0) {
158
+ return undefined;
159
+ }
160
+ const { size, mimetype } = payload === null || payload === void 0 ? void 0 : payload.metadata;
161
+ return {
162
+ host: 'supabase',
163
+ bucket: payload.bucket_id,
164
+ ref: payload.name,
165
+ contentType: mimetype,
166
+ size,
167
+ };
168
+ }
118
169
  }
119
170
  exports.SupabaseCloudWrapper = SupabaseCloudWrapper;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quatrain/cloudwrapper-supabase",
3
- "version": "1.1.14",
3
+ "version": "1.1.16",
4
4
  "license": "MIT",
5
5
  "description": "Cloud Wrapper adapter for Supabase",
6
6
  "main": "lib/index.js",
@@ -11,13 +11,13 @@
11
11
  ],
12
12
  "author": "Quatrain Développement SAS <developers@quatrain.com>",
13
13
  "peerDependencies": {
14
- "@quatrain/core": "^1.1.14"
14
+ "@quatrain/core": "^1.1.19"
15
15
  },
16
16
  "dependencies": {
17
- "@quatrain/backend": "^1.1.12",
18
- "@quatrain/cloudwrapper": "^1.1.13",
19
- "@quatrain/core": "^1.1.14",
20
- "@supabase/supabase-js": "^2.47.15"
17
+ "@quatrain/backend": "^1.1.20",
18
+ "@quatrain/cloudwrapper": "^1.1.14",
19
+ "@quatrain/core": "^1.1.19",
20
+ "@supabase/supabase-js": "^2.49.4"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@tsconfig/recommended": "^1.0.1",