@firebase-function-kits/bigquery-firestore-export 0.0.1 → 0.0.2-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/README.md +188 -0
  3. package/lib/config.d.ts +5 -0
  4. package/lib/config.d.ts.map +1 -0
  5. package/lib/config.js +75 -0
  6. package/lib/config.js.map +1 -0
  7. package/lib/dts.d.ts +14 -0
  8. package/lib/dts.d.ts.map +1 -0
  9. package/lib/dts.js +189 -0
  10. package/lib/dts.js.map +1 -0
  11. package/lib/export-config.d.ts +58 -0
  12. package/lib/export-config.d.ts.map +1 -0
  13. package/lib/export-config.js +56 -0
  14. package/lib/export-config.js.map +1 -0
  15. package/lib/handlers.d.ts +22 -0
  16. package/lib/handlers.d.ts.map +1 -0
  17. package/lib/handlers.js +125 -0
  18. package/lib/handlers.js.map +1 -0
  19. package/lib/helper.d.ts +37 -0
  20. package/lib/helper.d.ts.map +1 -0
  21. package/lib/helper.js +219 -0
  22. package/lib/helper.js.map +1 -0
  23. package/lib/index.d.ts +7 -0
  24. package/lib/index.d.ts.map +1 -0
  25. package/lib/index.js +137 -0
  26. package/lib/index.js.map +1 -0
  27. package/lib/lib.d.ts +11 -0
  28. package/lib/lib.d.ts.map +1 -0
  29. package/lib/lib.js +47 -0
  30. package/lib/lib.js.map +1 -0
  31. package/lib/logs.d.ts +21 -0
  32. package/lib/logs.d.ts.map +1 -0
  33. package/lib/logs.js +122 -0
  34. package/lib/logs.js.map +1 -0
  35. package/lib/metadata.d.ts +6 -0
  36. package/lib/metadata.d.ts.map +1 -0
  37. package/lib/metadata.js +34 -0
  38. package/lib/metadata.js.map +1 -0
  39. package/lib/types.d.ts +44 -0
  40. package/lib/types.d.ts.map +1 -0
  41. package/lib/types.js +18 -0
  42. package/lib/types.js.map +1 -0
  43. package/package.json +40 -4
  44. package/src/config.ts +88 -0
  45. package/src/dts.ts +214 -0
  46. package/src/export-config.ts +123 -0
  47. package/src/handlers.ts +141 -0
  48. package/src/helper.ts +320 -0
  49. package/src/index.ts +126 -0
  50. package/src/lib.ts +69 -0
  51. package/src/logs.ts +145 -0
  52. package/src/metadata.ts +31 -0
  53. package/src/types.ts +100 -0
  54. package/tests/config.test.ts +61 -0
  55. package/tests/dts.test.ts +124 -0
  56. package/tests/export-config.test.ts +78 -0
  57. package/tests/handlers.test.ts +170 -0
  58. package/tests/helper.test.ts +74 -0
  59. package/tests/lib.test.ts +43 -0
  60. package/tsconfig.json +18 -0
  61. package/tsconfig.tsbuildinfo +1 -0
  62. package/index.js +0 -0
@@ -0,0 +1,170 @@
1
+ /*
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { beforeEach, describe, expect, test, vi } from "vitest";
18
+ import type { HandlerContext } from "../src/handlers";
19
+ import { resolveConfig } from "../src/export-config";
20
+
21
+ const mocks = vi.hoisted(() => ({
22
+ createTransferConfig: vi.fn(),
23
+ getTransferConfig: vi.fn(),
24
+ updateTransferConfig: vi.fn(),
25
+ handleTransferRunMessage: vi.fn(),
26
+ }));
27
+
28
+ vi.mock("../src/dts", () => ({
29
+ createTransferConfig: mocks.createTransferConfig,
30
+ getTransferConfig: mocks.getTransferConfig,
31
+ updateTransferConfig: mocks.updateTransferConfig,
32
+ }));
33
+
34
+ vi.mock("../src/helper", () => ({
35
+ handleTransferRunMessage: mocks.handleTransferRunMessage,
36
+ parseTransferConfigName: (name: string) => ({
37
+ transferConfigId: name.split("/").at(-1),
38
+ }),
39
+ }));
40
+
41
+ vi.mock("../src/logs", () => ({
42
+ complete: vi.fn(),
43
+ error: vi.fn(),
44
+ start: vi.fn(),
45
+ topicCreated: vi.fn(),
46
+ }));
47
+
48
+ import { handleUpsertTransferConfig } from "../src/handlers";
49
+
50
+ const config = resolveConfig({
51
+ bigqueryDatasetLocation: "US",
52
+ projectId: "test-project",
53
+ instanceId: "users-export",
54
+ datasetId: "analytics",
55
+ tableName: "users",
56
+ queryString: "SELECT * FROM source.users",
57
+ displayName: "Users export",
58
+ schedule: "every 24 hours",
59
+ });
60
+
61
+ function makeContext(options: {
62
+ existing?: { empty: boolean; docs: Array<{ data(): object }> };
63
+ transferConfigName?: string;
64
+ }) {
65
+ const set = vi.fn();
66
+ const get = vi.fn().mockResolvedValue(
67
+ options.existing ?? {
68
+ empty: true,
69
+ docs: [],
70
+ }
71
+ );
72
+ const collection = vi.fn(() => ({
73
+ doc: vi.fn(() => ({ set })),
74
+ where: vi.fn(() => ({
75
+ limit: vi.fn(() => ({ get })),
76
+ })),
77
+ }));
78
+ const topic = vi.fn(() => ({
79
+ exists: vi.fn().mockResolvedValue([true]),
80
+ }));
81
+ const createTopic = vi.fn();
82
+
83
+ return {
84
+ ctx: {
85
+ db: { collection },
86
+ bigquery: {},
87
+ dataTransfer: {},
88
+ pubsub: { topic, createTopic },
89
+ config: { ...config, transferConfigName: options.transferConfigName },
90
+ } as unknown as HandlerContext,
91
+ set,
92
+ };
93
+ }
94
+
95
+ beforeEach(() => {
96
+ vi.clearAllMocks();
97
+ });
98
+
99
+ describe("handleUpsertTransferConfig", () => {
100
+ test("creates and stores a transfer config for a new instance", async () => {
101
+ const created = {
102
+ name: "projects/p/locations/us/transferConfigs/config-1",
103
+ displayName: "Users export",
104
+ };
105
+ mocks.createTransferConfig.mockResolvedValue(created);
106
+ const { ctx, set } = makeContext({});
107
+
108
+ await handleUpsertTransferConfig(ctx);
109
+
110
+ expect(mocks.createTransferConfig).toHaveBeenCalledWith(
111
+ ctx.dataTransfer,
112
+ ctx.config
113
+ );
114
+ expect(set).toHaveBeenCalledWith({
115
+ extInstanceId: "users-export",
116
+ ...created,
117
+ });
118
+ });
119
+
120
+ test("stores the object returned by an update without reading it twice", async () => {
121
+ const updated = {
122
+ name: "projects/p/locations/us/transferConfigs/config-1",
123
+ displayName: "Updated users export",
124
+ };
125
+ mocks.updateTransferConfig.mockResolvedValue(updated);
126
+ const { ctx, set } = makeContext({
127
+ existing: {
128
+ empty: false,
129
+ docs: [
130
+ {
131
+ data: () => ({
132
+ name: "projects/p/locations/us/transferConfigs/config-1",
133
+ }),
134
+ },
135
+ ],
136
+ },
137
+ });
138
+
139
+ await handleUpsertTransferConfig(ctx);
140
+
141
+ expect(mocks.updateTransferConfig).toHaveBeenCalledOnce();
142
+ expect(mocks.getTransferConfig).not.toHaveBeenCalled();
143
+ expect(set).toHaveBeenCalledWith({
144
+ extInstanceId: "users-export",
145
+ ...updated,
146
+ });
147
+ });
148
+
149
+ test("links an explicitly named transfer config without updating it", async () => {
150
+ const linked = {
151
+ name: "projects/p/locations/us/transferConfigs/config-2",
152
+ };
153
+ mocks.getTransferConfig.mockResolvedValue(linked);
154
+ const { ctx, set } = makeContext({
155
+ transferConfigName: linked.name,
156
+ });
157
+
158
+ await handleUpsertTransferConfig(ctx);
159
+
160
+ expect(mocks.getTransferConfig).toHaveBeenCalledWith(
161
+ ctx.dataTransfer,
162
+ linked.name
163
+ );
164
+ expect(mocks.updateTransferConfig).not.toHaveBeenCalled();
165
+ expect(set).toHaveBeenCalledWith({
166
+ extInstanceId: "users-export",
167
+ ...linked,
168
+ });
169
+ });
170
+ });
@@ -0,0 +1,74 @@
1
+ /*
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { Geography } from "@google-cloud/bigquery";
18
+ import { Timestamp } from "firebase-admin/firestore";
19
+ import { describe, expect, test } from "vitest";
20
+ import {
21
+ convertUnsupportedDataTypes,
22
+ parseTransferConfigName,
23
+ parseTransferRunName,
24
+ } from "../src/helper";
25
+
26
+ describe("transfer resource parsing", () => {
27
+ test("parses config and run resource names", () => {
28
+ expect(
29
+ parseTransferConfigName(
30
+ "projects/test-project/locations/us/transferConfigs/config-1"
31
+ )
32
+ ).toEqual({
33
+ projectId: "test-project",
34
+ location: "us",
35
+ transferConfigId: "config-1",
36
+ });
37
+ expect(
38
+ parseTransferRunName(
39
+ "projects/test-project/locations/us/transferConfigs/config-1/runs/run-2"
40
+ )
41
+ ).toEqual({
42
+ projectId: "test-project",
43
+ location: "us",
44
+ transferConfigId: "config-1",
45
+ runId: "run-2",
46
+ });
47
+ });
48
+
49
+ test("rejects malformed resource names", () => {
50
+ expect(() => parseTransferConfigName("transferConfigs/config-1")).toThrow(
51
+ "Invalid transfer config name format"
52
+ );
53
+ expect(() => parseTransferRunName("runs/run-2")).toThrow(
54
+ "Invalid transfer run name format"
55
+ );
56
+ });
57
+ });
58
+
59
+ describe("convertUnsupportedDataTypes", () => {
60
+ test("recursively converts BigQuery-only values", () => {
61
+ const date = new Date("2026-08-11T12:00:00.000Z");
62
+ const converted = convertUnsupportedDataTypes({
63
+ date,
64
+ bytes: Buffer.from([1, 2, 3]),
65
+ geography: new Geography("POINT(1 2)"),
66
+ nested: [{ value: true }],
67
+ });
68
+
69
+ expect(converted.date).toBeInstanceOf(Timestamp);
70
+ expect(converted.bytes).toBeInstanceOf(Uint8Array);
71
+ expect(converted.geography).toBe("POINT(1 2)");
72
+ expect(converted.nested).toEqual([{ value: true }]);
73
+ });
74
+ });
@@ -0,0 +1,43 @@
1
+ /*
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { describe, expect, test, vi } from "vitest";
18
+
19
+ vi.mock("firebase-functions", () => ({
20
+ logger: {
21
+ debug: vi.fn(),
22
+ error: vi.fn(),
23
+ info: vi.fn(),
24
+ log: vi.fn(),
25
+ warn: vi.fn(),
26
+ },
27
+ }));
28
+
29
+ vi.mock("firebase-functions/params", () => {
30
+ throw new Error("./lib must not import firebase-functions/params");
31
+ });
32
+
33
+ describe("./lib", () => {
34
+ test("imports without declaring Firebase params", async () => {
35
+ const lib = await import("../src/lib");
36
+
37
+ expect(lib.handleMessagePublished).toBeTypeOf("function");
38
+ expect(lib.handleUpsertTransferConfig).toBeTypeOf("function");
39
+ expect(lib.resolveConfig).toBeTypeOf("function");
40
+ expect(lib.createTransferConfigRequest).toBeTypeOf("function");
41
+ expect(lib.convertUnsupportedDataTypes).toBeTypeOf("function");
42
+ }, 15000);
43
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "compilerOptions": {
3
+ "outDir": "lib",
4
+ "rootDir": "src",
5
+ "target": "ES2022",
6
+ "module": "nodenext",
7
+ "moduleResolution": "nodenext",
8
+ "declaration": true,
9
+ "declarationMap": true,
10
+ "sourceMap": true,
11
+ "strict": false,
12
+ "esModuleInterop": true,
13
+ "skipLibCheck": true,
14
+ "types": ["node"]
15
+ },
16
+ "include": ["src"],
17
+ "exclude": ["node_modules", "lib", "**/*.test.ts"]
18
+ }
@@ -0,0 +1 @@
1
+ {"version":"7.0.2","root":["./src/config.ts","./src/dts.ts","./src/export-config.ts","./src/handlers.ts","./src/helper.ts","./src/index.ts","./src/lib.ts","./src/logs.ts","./src/metadata.ts","./src/types.ts"],"packageJsons":["./node_modules/@firebase/app-types/package.json","./node_modules/@firebase/component/package.json","./node_modules/@firebase/database-types/package.json","./node_modules/@firebase/logger/package.json","./node_modules/@firebase/util/package.json","./node_modules/@google-cloud/bigquery-data-transfer/package.json","./node_modules/@google-cloud/bigquery/package.json","./node_modules/@google-cloud/common/package.json","./node_modules/@google-cloud/firestore/package.json","./node_modules/@google-cloud/paginator/package.json","./node_modules/@google-cloud/precise-date/package.json","./node_modules/@google-cloud/pubsub/node_modules/@google-cloud/precise-date/package.json","./node_modules/@google-cloud/pubsub/node_modules/@grpc/proto-loader/package.json","./node_modules/@google-cloud/pubsub/node_modules/gcp-metadata/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-auth-library/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-gax/package.json","./node_modules/@google-cloud/pubsub/node_modules/proto3-json-serializer/package.json","./node_modules/@google-cloud/pubsub/package.json","./node_modules/@grpc/grpc-js/package.json","./node_modules/@grpc/proto-loader/package.json","./node_modules/@js-sdsl/ordered-map/package.json","./node_modules/@opentelemetry/api/package.json","./node_modules/@types/body-parser/package.json","./node_modules/@types/connect/package.json","./node_modules/@types/cors/package.json","./node_modules/@types/express-serve-static-core/package.json","./node_modules/@types/express/package.json","./node_modules/@types/http-errors/package.json","./node_modules/@types/node/package.json","./node_modules/@types/qs/package.json","./node_modules/@types/range-parser/package.json","./node_modules/@types/send/package.json","./node_modules/@types/serve-static/package.json","./node_modules/abort-controller/package.json","./node_modules/body-parser/package.json","./node_modules/cors/package.json","./node_modules/event-target-shim/package.json","./node_modules/express/package.json","./node_modules/firebase-admin/package.json","./node_modules/firebase-functions/package.json","./node_modules/gaxios/package.json","./node_modules/gcp-metadata/package.json","./node_modules/google-auth-library/node_modules/gaxios/package.json","./node_modules/google-auth-library/package.json","./node_modules/google-gax/node_modules/gaxios/build/esm/package.json","./node_modules/google-gax/node_modules/gaxios/package.json","./node_modules/google-gax/node_modules/google-auth-library/package.json","./node_modules/google-gax/node_modules/gtoken/package.json","./node_modules/google-gax/package.json","./node_modules/google-logging-utils/package.json","./node_modules/gtoken/package.json","./node_modules/http-errors/package.json","./node_modules/long/package.json","./node_modules/long/umd/package.json","./node_modules/p-defer/package.json","./node_modules/proto3-json-serializer/package.json","./node_modules/protobufjs/package.json","./node_modules/qs/package.json","./node_modules/range-parser/package.json","./node_modules/send/package.json","./node_modules/serve-static/package.json","./node_modules/string_decoder/package.json","./node_modules/teeny-request/package.json","./node_modules/undici-types/package.json","./package.json"],"missingPackageJsons":["./node_modules/@apollo/server/package.json","./node_modules/@as-integrations/express4/package.json","./node_modules/@firebase/logger/dist/package.json","./node_modules/@firebase/logger/dist/src/package.json","./node_modules/@firebase/util/dist/package.json","./node_modules/@google-cloud/bigquery-data-transfer/build/package.json","./node_modules/@google-cloud/bigquery-data-transfer/build/protos/package.json","./node_modules/@google-cloud/bigquery-data-transfer/build/src/package.json","./node_modules/@google-cloud/bigquery-data-transfer/build/src/v1/package.json","./node_modules/@google-cloud/bigquery/build/package.json","./node_modules/@google-cloud/bigquery/build/src/package.json","./node_modules/@google-cloud/common/build/package.json","./node_modules/@google-cloud/common/build/src/package.json","./node_modules/@google-cloud/common/build/src/util/package.json","./node_modules/@google-cloud/common/node_modules/events/package.json","./node_modules/@google-cloud/common/node_modules/google-auth-library/package.json","./node_modules/@google-cloud/common/node_modules/stream/package.json","./node_modules/@google-cloud/common/node_modules/teeny-request/package.json","./node_modules/@google-cloud/firestore/types/package.json","./node_modules/@google-cloud/firestore/types/protos/package.json","./node_modules/@google-cloud/firestore/types/v1/package.json","./node_modules/@google-cloud/firestore/types/v1beta1/package.json","./node_modules/@google-cloud/paginator/build/package.json","./node_modules/@google-cloud/paginator/build/src/package.json","./node_modules/@google-cloud/precise-date/build/package.json","./node_modules/@google-cloud/precise-date/build/src/package.json","./node_modules/@google-cloud/pubsub/build/package.json","./node_modules/@google-cloud/pubsub/build/protos/package.json","./node_modules/@google-cloud/pubsub/build/src/package.json","./node_modules/@google-cloud/pubsub/build/src/publisher/package.json","./node_modules/@google-cloud/pubsub/build/src/v1/package.json","./node_modules/@google-cloud/pubsub/node_modules/@google-cloud/precise-date/build/package.json","./node_modules/@google-cloud/pubsub/node_modules/@google-cloud/precise-date/build/src/package.json","./node_modules/@google-cloud/pubsub/node_modules/@grpc/grpc-js/build/src/client/package.json","./node_modules/@google-cloud/pubsub/node_modules/@grpc/grpc-js/package.json","./node_modules/@google-cloud/pubsub/node_modules/@grpc/proto-loader/build/package.json","./node_modules/@google-cloud/pubsub/node_modules/@grpc/proto-loader/build/src/package.json","./node_modules/@google-cloud/pubsub/node_modules/@opentelemetry/api/package.json","./node_modules/@google-cloud/pubsub/node_modules/abort-controller/package.json","./node_modules/@google-cloud/pubsub/node_modules/events/package.json","./node_modules/@google-cloud/pubsub/node_modules/gaxios/package.json","./node_modules/@google-cloud/pubsub/node_modules/gcp-metadata/build/package.json","./node_modules/@google-cloud/pubsub/node_modules/gcp-metadata/build/src/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-auth-library/build/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-auth-library/build/src/auth/googleauth/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-auth-library/build/src/auth/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-auth-library/build/src/crypto/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-auth-library/build/src/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-gax/build/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-gax/build/protos/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-gax/build/src/bundlingCalls/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-gax/build/src/longRunningCalls/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-gax/build/src/normalCalls/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-gax/build/src/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-gax/build/src/paginationCalls/package.json","./node_modules/@google-cloud/pubsub/node_modules/google-gax/build/src/streamingCalls/package.json","./node_modules/@google-cloud/pubsub/node_modules/gtoken/package.json","./node_modules/@google-cloud/pubsub/node_modules/http/package.json","./node_modules/@google-cloud/pubsub/node_modules/long/package.json","./node_modules/@google-cloud/pubsub/node_modules/p-defer/package.json","./node_modules/@google-cloud/pubsub/node_modules/proto3-json-serializer/build/package.json","./node_modules/@google-cloud/pubsub/node_modules/proto3-json-serializer/build/src/package.json","./node_modules/@google-cloud/pubsub/node_modules/protobufjs/ext/descriptor/package.json","./node_modules/@google-cloud/pubsub/node_modules/protobufjs/minimal/package.json","./node_modules/@google-cloud/pubsub/node_modules/protobufjs/package.json","./node_modules/@google-cloud/pubsub/node_modules/querystring/package.json","./node_modules/@google-cloud/pubsub/node_modules/stream/package.json","./node_modules/@grpc/grpc-js/build/package.json","./node_modules/@grpc/grpc-js/build/src/client/package.json","./node_modules/@grpc/grpc-js/build/src/generated/google/package.json","./node_modules/@grpc/grpc-js/build/src/generated/google/protobuf/package.json","./node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/package.json","./node_modules/@grpc/grpc-js/build/src/generated/grpc/channelz/v1/package.json","./node_modules/@grpc/grpc-js/build/src/generated/grpc/package.json","./node_modules/@grpc/grpc-js/build/src/generated/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/data/orca/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/data/orca/v3/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/data/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/service/orca/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/service/orca/v3/package.json","./node_modules/@grpc/grpc-js/build/src/generated/xds/service/package.json","./node_modules/@grpc/grpc-js/build/src/package.json","./node_modules/@grpc/proto-loader/build/package.json","./node_modules/@grpc/proto-loader/build/src/package.json","./node_modules/@js-sdsl/ordered-map/dist/esm/package.json","./node_modules/@js-sdsl/ordered-map/dist/package.json","./node_modules/@opentelemetry/api/build/package.json","./node_modules/@opentelemetry/api/build/src/api/package.json","./node_modules/@opentelemetry/api/build/src/baggage/internal/package.json","./node_modules/@opentelemetry/api/build/src/baggage/package.json","./node_modules/@opentelemetry/api/build/src/common/package.json","./node_modules/@opentelemetry/api/build/src/context/package.json","./node_modules/@opentelemetry/api/build/src/diag/package.json","./node_modules/@opentelemetry/api/build/src/metrics/package.json","./node_modules/@opentelemetry/api/build/src/package.json","./node_modules/@opentelemetry/api/build/src/propagation/package.json","./node_modules/@opentelemetry/api/build/src/trace/internal/package.json","./node_modules/@opentelemetry/api/build/src/trace/package.json","./node_modules/@types/assert/package.json","./node_modules/@types/assert/strict/package.json","./node_modules/@types/async_hooks/package.json","./node_modules/@types/buffer/package.json","./node_modules/@types/child_process/package.json","./node_modules/@types/cluster/package.json","./node_modules/@types/console/package.json","./node_modules/@types/constants/package.json","./node_modules/@types/crypto/package.json","./node_modules/@types/dgram/package.json","./node_modules/@types/diagnostics_channel/package.json","./node_modules/@types/dns/package.json","./node_modules/@types/dns/promises/package.json","./node_modules/@types/domain/package.json","./node_modules/@types/events/package.json","./node_modules/@types/fs/package.json","./node_modules/@types/fs/promises/package.json","./node_modules/@types/http/package.json","./node_modules/@types/http2/package.json","./node_modules/@types/https/package.json","./node_modules/@types/inspector/package.json","./node_modules/@types/inspector/promises/package.json","./node_modules/@types/module/package.json","./node_modules/@types/net/package.json","./node_modules/@types/node/assert/package.json","./node_modules/@types/node/dns/package.json","./node_modules/@types/node/fs/package.json","./node_modules/@types/node/inspector/package.json","./node_modules/@types/node/path/package.json","./node_modules/@types/node/readline/package.json","./node_modules/@types/node/stream/package.json","./node_modules/@types/node/test/package.json","./node_modules/@types/node/timers/package.json","./node_modules/@types/node/util/package.json","./node_modules/@types/node/web-globals/package.json","./node_modules/@types/node/zlib/package.json","./node_modules/@types/os/package.json","./node_modules/@types/path/package.json","./node_modules/@types/path/posix/package.json","./node_modules/@types/path/win32/package.json","./node_modules/@types/perf_hooks/package.json","./node_modules/@types/process/package.json","./node_modules/@types/punycode/package.json","./node_modules/@types/querystring/package.json","./node_modules/@types/readline/package.json","./node_modules/@types/readline/promises/package.json","./node_modules/@types/repl/package.json","./node_modules/@types/stream/consumers/package.json","./node_modules/@types/stream/iter/package.json","./node_modules/@types/stream/package.json","./node_modules/@types/stream/promises/package.json","./node_modules/@types/stream/web/package.json","./node_modules/@types/string_decoder/package.json","./node_modules/@types/timers/package.json","./node_modules/@types/timers/promises/package.json","./node_modules/@types/tls/package.json","./node_modules/@types/trace_events/package.json","./node_modules/@types/tty/package.json","./node_modules/@types/url/package.json","./node_modules/@types/util/package.json","./node_modules/@types/util/types/package.json","./node_modules/@types/v8/package.json","./node_modules/@types/vm/package.json","./node_modules/@types/wasi/package.json","./node_modules/@types/worker_threads/package.json","./node_modules/@types/zlib/package.json","./node_modules/abort-controller/dist/package.json","./node_modules/assert/package.json","./node_modules/assert/strict/package.json","./node_modules/async_hooks/package.json","./node_modules/buffer/package.json","./node_modules/child_process/package.json","./node_modules/cluster/package.json","./node_modules/connect/package.json","./node_modules/console/package.json","./node_modules/constants/package.json","./node_modules/crypto/package.json","./node_modules/dgram/package.json","./node_modules/diagnostics_channel/package.json","./node_modules/dns/package.json","./node_modules/dns/promises/package.json","./node_modules/domain/package.json","./node_modules/events/package.json","./node_modules/express-serve-static-core/package.json","./node_modules/firebase-admin/app-check/package.json","./node_modules/firebase-admin/app/package.json","./node_modules/firebase-admin/auth/package.json","./node_modules/firebase-admin/database/package.json","./node_modules/firebase-admin/firestore/package.json","./node_modules/firebase-admin/lib/app-check/package.json","./node_modules/firebase-admin/lib/app/package.json","./node_modules/firebase-admin/lib/auth/package.json","./node_modules/firebase-admin/lib/database/package.json","./node_modules/firebase-admin/lib/firestore/package.json","./node_modules/firebase-admin/lib/package.json","./node_modules/firebase-admin/lib/utils/package.json","./node_modules/firebase-functions/lib/common/package.json","./node_modules/firebase-functions/lib/common/providers/package.json","./node_modules/firebase-functions/lib/lifecycle/package.json","./node_modules/firebase-functions/lib/logger/package.json","./node_modules/firebase-functions/lib/package.json","./node_modules/firebase-functions/lib/params/package.json","./node_modules/firebase-functions/lib/runtime/package.json","./node_modules/firebase-functions/lib/v1/package.json","./node_modules/firebase-functions/lib/v1/providers/package.json","./node_modules/firebase-functions/lib/v2/package.json","./node_modules/firebase-functions/lib/v2/providers/alerts/package.json","./node_modules/firebase-functions/lib/v2/providers/dataconnect/package.json","./node_modules/firebase-functions/lib/v2/providers/package.json","./node_modules/firebase-functions/params/package.json","./node_modules/firebase-functions/v2/lifecycle/package.json","./node_modules/firebase-functions/v2/package.json","./node_modules/firebase-functions/v2/pubsub/package.json","./node_modules/firebase-functions/v2/tasks/package.json","./node_modules/fs/package.json","./node_modules/fs/promises/package.json","./node_modules/gaxios/build/package.json","./node_modules/gaxios/build/src/package.json","./node_modules/gcp-metadata/build/package.json","./node_modules/gcp-metadata/build/src/package.json","./node_modules/google-auth-library/build/package.json","./node_modules/google-auth-library/build/src/auth/package.json","./node_modules/google-auth-library/build/src/crypto/package.json","./node_modules/google-auth-library/build/src/gtoken/package.json","./node_modules/google-auth-library/build/src/package.json","./node_modules/google-auth-library/node_modules/events/package.json","./node_modules/google-auth-library/node_modules/gaxios/build/cjs/package.json","./node_modules/google-auth-library/node_modules/gaxios/build/cjs/src/package.json","./node_modules/google-auth-library/node_modules/gaxios/build/package.json","./node_modules/google-auth-library/node_modules/gcp-metadata/package.json","./node_modules/google-auth-library/node_modules/google-logging-utils/package.json","./node_modules/google-auth-library/node_modules/http/package.json","./node_modules/google-auth-library/node_modules/querystring/package.json","./node_modules/google-auth-library/node_modules/stream/package.json","./node_modules/google-auth-library/node_modules/undici-types/package.json","./node_modules/google-gax/build/package.json","./node_modules/google-gax/build/protos/package.json","./node_modules/google-gax/build/src/bundlingCalls/package.json","./node_modules/google-gax/build/src/longRunningCalls/package.json","./node_modules/google-gax/build/src/normalCalls/package.json","./node_modules/google-gax/build/src/package.json","./node_modules/google-gax/build/src/paginationCalls/package.json","./node_modules/google-gax/build/src/streamingCalls/package.json","./node_modules/google-gax/node_modules/@grpc/grpc-js/build/src/client/package.json","./node_modules/google-gax/node_modules/@grpc/grpc-js/package.json","./node_modules/google-gax/node_modules/@grpc/proto-loader/package.json","./node_modules/google-gax/node_modules/events/package.json","./node_modules/google-gax/node_modules/gaxios/build/cjs/package.json","./node_modules/google-gax/node_modules/gaxios/build/cjs/src/package.json","./node_modules/google-gax/node_modules/gaxios/build/esm/src/package.json","./node_modules/google-gax/node_modules/gaxios/build/package.json","./node_modules/google-gax/node_modules/gcp-metadata/package.json","./node_modules/google-gax/node_modules/google-auth-library/build/package.json","./node_modules/google-gax/node_modules/google-auth-library/build/src/auth/googleauth/package.json","./node_modules/google-gax/node_modules/google-auth-library/build/src/auth/package.json","./node_modules/google-gax/node_modules/google-auth-library/build/src/crypto/package.json","./node_modules/google-gax/node_modules/google-auth-library/build/src/package.json","./node_modules/google-gax/node_modules/google-logging-utils/package.json","./node_modules/google-gax/node_modules/gtoken/build/cjs/package.json","./node_modules/google-gax/node_modules/gtoken/build/cjs/src/package.json","./node_modules/google-gax/node_modules/gtoken/build/package.json","./node_modules/google-gax/node_modules/http/package.json","./node_modules/google-gax/node_modules/long/package.json","./node_modules/google-gax/node_modules/proto3-json-serializer/package.json","./node_modules/google-gax/node_modules/protobufjs/minimal/package.json","./node_modules/google-gax/node_modules/protobufjs/package.json","./node_modules/google-gax/node_modules/querystring/package.json","./node_modules/google-gax/node_modules/stream/package.json","./node_modules/google-gax/node_modules/undici-types/package.json","./node_modules/google-logging-utils/build/package.json","./node_modules/google-logging-utils/build/src/package.json","./node_modules/graphql/package.json","./node_modules/gtoken/build/package.json","./node_modules/gtoken/build/src/package.json","./node_modules/http/package.json","./node_modules/http2/package.json","./node_modules/https/package.json","./node_modules/inspector/package.json","./node_modules/inspector/promises/package.json","./node_modules/module/package.json","./node_modules/net/package.json","./node_modules/os/package.json","./node_modules/path/package.json","./node_modules/path/posix/package.json","./node_modules/path/win32/package.json","./node_modules/perf_hooks/package.json","./node_modules/process/package.json","./node_modules/proto3-json-serializer/build/package.json","./node_modules/proto3-json-serializer/build/src/package.json","./node_modules/protobufjs/ext/descriptor/package.json","./node_modules/protobufjs/ext/package.json","./node_modules/protobufjs/minimal/package.json","./node_modules/punycode/package.json","./node_modules/querystring/package.json","./node_modules/readline/package.json","./node_modules/readline/promises/package.json","./node_modules/repl/package.json","./node_modules/stream/consumers/package.json","./node_modules/stream/iter/package.json","./node_modules/stream/package.json","./node_modules/stream/promises/package.json","./node_modules/stream/web/package.json","./node_modules/teeny-request/build/package.json","./node_modules/teeny-request/build/src/package.json","./node_modules/teeny-request/node_modules/http/package.json","./node_modules/teeny-request/node_modules/https/package.json","./node_modules/teeny-request/node_modules/stream/package.json","./node_modules/timers/package.json","./node_modules/timers/promises/package.json","./node_modules/tls/package.json","./node_modules/trace_events/package.json","./node_modules/tty/package.json","./node_modules/url/package.json","./node_modules/util/package.json","./node_modules/util/types/package.json","./node_modules/v8/package.json","./node_modules/vm/package.json","./node_modules/wasi/package.json","./node_modules/worker_threads/package.json","./node_modules/zlib/package.json"]}
package/index.js DELETED
File without changes