@membranehq/sdk 0.20.0 → 0.21.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.
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+
3
+ declare const CONFIG_FILE_NAME = "membrane.config.yml";
4
+ declare const membraneConfigSchema: z.ZodObject<{
5
+ workspaceKey: z.ZodString;
6
+ workspaceSecret: z.ZodString;
7
+ apiUri: z.ZodOptional<z.ZodString>;
8
+ consoleUri: z.ZodOptional<z.ZodString>;
9
+ testCustomerId: z.ZodOptional<z.ZodString>;
10
+ accessToken: z.ZodOptional<z.ZodString>;
11
+ }, z.core.$strip>;
12
+ type MembraneConfig = z.infer<typeof membraneConfigSchema>;
13
+ type PartialMembraneConfig = Partial<MembraneConfig>;
14
+ interface LoadConfigOptions {
15
+ validate?: boolean;
16
+ useCache?: boolean;
17
+ }
18
+ declare class MembraneConfigLoader {
19
+ private cachedConfig;
20
+ private cwd;
21
+ constructor(cwd?: string);
22
+ loadConfig(options?: LoadConfigOptions): PartialMembraneConfig;
23
+ hasValidConfig(): boolean;
24
+ hasWorkspaceCredentials(): boolean;
25
+ clearCache(): void;
26
+ updateConfig(newConfig: PartialMembraneConfig): PartialMembraneConfig;
27
+ saveToFile(config: PartialMembraneConfig): boolean;
28
+ getCwd(): string;
29
+ setCwd(newCwd: string): void;
30
+ private loadFromFile;
31
+ private loadFromEnv;
32
+ }
33
+ declare function getDefaultMembraneConfigLoader(): MembraneConfigLoader;
34
+ declare function loadMembraneConfig(cwd?: string, options?: LoadConfigOptions): PartialMembraneConfig;
35
+ declare function hasMembraneCredentials(cwd?: string): boolean;
36
+
37
+ export { CONFIG_FILE_NAME, MembraneConfigLoader, getDefaultMembraneConfigLoader, hasMembraneCredentials, loadMembraneConfig, membraneConfigSchema };
38
+ export type { LoadConfigOptions, MembraneConfig, PartialMembraneConfig };
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+
3
+ declare const CONFIG_FILE_NAME = "membrane.config.yml";
4
+ declare const membraneConfigSchema: z.ZodObject<{
5
+ workspaceKey: z.ZodString;
6
+ workspaceSecret: z.ZodString;
7
+ apiUri: z.ZodOptional<z.ZodString>;
8
+ consoleUri: z.ZodOptional<z.ZodString>;
9
+ testCustomerId: z.ZodOptional<z.ZodString>;
10
+ accessToken: z.ZodOptional<z.ZodString>;
11
+ }, z.core.$strip>;
12
+ type MembraneConfig = z.infer<typeof membraneConfigSchema>;
13
+ type PartialMembraneConfig = Partial<MembraneConfig>;
14
+ interface LoadConfigOptions {
15
+ validate?: boolean;
16
+ useCache?: boolean;
17
+ }
18
+ declare class MembraneConfigLoader {
19
+ private cachedConfig;
20
+ private cwd;
21
+ constructor(cwd?: string);
22
+ loadConfig(options?: LoadConfigOptions): PartialMembraneConfig;
23
+ hasValidConfig(): boolean;
24
+ hasWorkspaceCredentials(): boolean;
25
+ clearCache(): void;
26
+ updateConfig(newConfig: PartialMembraneConfig): PartialMembraneConfig;
27
+ saveToFile(config: PartialMembraneConfig): boolean;
28
+ getCwd(): string;
29
+ setCwd(newCwd: string): void;
30
+ private loadFromFile;
31
+ private loadFromEnv;
32
+ }
33
+ declare function getDefaultMembraneConfigLoader(): MembraneConfigLoader;
34
+ declare function loadMembraneConfig(cwd?: string, options?: LoadConfigOptions): PartialMembraneConfig;
35
+ declare function hasMembraneCredentials(cwd?: string): boolean;
36
+
37
+ export { CONFIG_FILE_NAME, MembraneConfigLoader, getDefaultMembraneConfigLoader, hasMembraneCredentials, loadMembraneConfig, membraneConfigSchema };
38
+ export type { LoadConfigOptions, MembraneConfig, PartialMembraneConfig };
package/dist/config.js ADDED
@@ -0,0 +1,215 @@
1
+ 'use strict';
2
+
3
+ var fs = require('fs');
4
+ var yaml = require('js-yaml');
5
+ var path = require('path');
6
+ var zod = require('zod');
7
+
8
+ function _interopNamespaceDefault(e) {
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs);
26
+ var yaml__namespace = /*#__PURE__*/_interopNamespaceDefault(yaml);
27
+ var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
28
+
29
+ const CONFIG_FILE_NAME = 'membrane.config.yml';
30
+ const membraneConfigSchema = zod.z.object({
31
+ workspaceKey: zod.z.string(),
32
+ workspaceSecret: zod.z.string(),
33
+ apiUri: zod.z.string().optional(),
34
+ consoleUri: zod.z.string().optional(),
35
+ testCustomerId: zod.z.string().optional(),
36
+ accessToken: zod.z.string().optional(),
37
+ });
38
+ class MembraneConfigLoader {
39
+ constructor(cwd = process.cwd()) {
40
+ this.cachedConfig = null;
41
+ this.cwd = cwd;
42
+ }
43
+ loadConfig(options = {}) {
44
+ const { validate = false, useCache = true } = options;
45
+ if (useCache && this.cachedConfig !== null) {
46
+ if (validate) {
47
+ const validation = membraneConfigSchema.safeParse(this.cachedConfig);
48
+ if (!validation.success) {
49
+ throw new Error(`Invalid configuration: ${validation.error.message}`);
50
+ }
51
+ }
52
+ return this.cachedConfig;
53
+ }
54
+ const fileConfig = this.loadFromFile();
55
+ const envConfig = this.loadFromEnv();
56
+ const mergedConfig = {
57
+ ...fileConfig,
58
+ ...envConfig,
59
+ };
60
+ this.cachedConfig = mergedConfig;
61
+ if (validate) {
62
+ const validation = membraneConfigSchema.safeParse(mergedConfig);
63
+ if (!validation.success) {
64
+ throw new Error(`Invalid configuration: ${validation.error.message}`);
65
+ }
66
+ return validation.data;
67
+ }
68
+ return mergedConfig;
69
+ }
70
+ hasValidConfig() {
71
+ try {
72
+ const config = this.loadConfig({ validate: true });
73
+ return Boolean(config.workspaceKey && config.workspaceSecret);
74
+ }
75
+ catch (_a) {
76
+ return false;
77
+ }
78
+ }
79
+ hasWorkspaceCredentials() {
80
+ const config = this.loadConfig();
81
+ return Boolean(config.workspaceKey && config.workspaceSecret);
82
+ }
83
+ clearCache() {
84
+ this.cachedConfig = null;
85
+ }
86
+ updateConfig(newConfig) {
87
+ const currentConfig = this.loadConfig({ useCache: false });
88
+ const mergedConfig = {
89
+ ...currentConfig,
90
+ ...newConfig,
91
+ };
92
+ this.saveToFile(newConfig);
93
+ this.cachedConfig = mergedConfig;
94
+ return mergedConfig;
95
+ }
96
+ saveToFile(config) {
97
+ const configPath = path__namespace.join(this.cwd, CONFIG_FILE_NAME);
98
+ const fileConfig = this.loadFromFile();
99
+ const newFileConfig = {
100
+ ...fileConfig,
101
+ ...config,
102
+ };
103
+ const envConfig = this.loadFromEnv();
104
+ for (const key of Object.keys(envConfig)) {
105
+ if (envConfig[key] === newFileConfig[key]) {
106
+ delete newFileConfig[key];
107
+ }
108
+ }
109
+ try {
110
+ const yamlStr = yaml__namespace.dump(newFileConfig);
111
+ fs__namespace.writeFileSync(configPath, yamlStr, 'utf8');
112
+ return true;
113
+ }
114
+ catch (_error) {
115
+ return false;
116
+ }
117
+ }
118
+ getCwd() {
119
+ return this.cwd;
120
+ }
121
+ setCwd(newCwd) {
122
+ if (this.cwd !== newCwd) {
123
+ this.cwd = newCwd;
124
+ this.clearCache();
125
+ }
126
+ }
127
+ loadFromFile() {
128
+ const configPath = path__namespace.join(this.cwd, CONFIG_FILE_NAME);
129
+ let configFile;
130
+ try {
131
+ configFile = fs__namespace.readFileSync(configPath, 'utf8');
132
+ }
133
+ catch (_a) {
134
+ return {};
135
+ }
136
+ let parsedConfig;
137
+ try {
138
+ parsedConfig = yaml__namespace.load(configFile);
139
+ }
140
+ catch (yamlError) {
141
+ throw new Error(`Failed to parse ${CONFIG_FILE_NAME}: ${yamlError.message}`);
142
+ }
143
+ const config = {};
144
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.accessToken) {
145
+ config.accessToken = String(parsedConfig.accessToken);
146
+ }
147
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.workspaceKey) {
148
+ config.workspaceKey = String(parsedConfig.workspaceKey);
149
+ }
150
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.workspaceSecret) {
151
+ config.workspaceSecret = String(parsedConfig.workspaceSecret);
152
+ }
153
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.apiUri) {
154
+ config.apiUri = String(parsedConfig.apiUri);
155
+ }
156
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.consoleUri) {
157
+ config.consoleUri = String(parsedConfig.consoleUri);
158
+ }
159
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.testCustomerId) {
160
+ config.testCustomerId = String(parsedConfig.testCustomerId);
161
+ }
162
+ return config;
163
+ }
164
+ loadFromEnv() {
165
+ const config = {};
166
+ if (process.env.MEMBRANE_ACCESS_TOKEN) {
167
+ config.accessToken = process.env.MEMBRANE_ACCESS_TOKEN;
168
+ }
169
+ if (process.env.MEMBRANE_WORKSPACE_KEY) {
170
+ config.workspaceKey = process.env.MEMBRANE_WORKSPACE_KEY;
171
+ }
172
+ if (process.env.MEMBRANE_WORKSPACE_SECRET) {
173
+ config.workspaceSecret = process.env.MEMBRANE_WORKSPACE_SECRET;
174
+ }
175
+ if (process.env.MEMBRANE_API_URI) {
176
+ config.apiUri = process.env.MEMBRANE_API_URI;
177
+ }
178
+ if (process.env.MEMBRANE_CONSOLE_URI) {
179
+ config.consoleUri = process.env.MEMBRANE_CONSOLE_URI;
180
+ }
181
+ if (process.env.MEMBRANE_TEST_CUSTOMER_ID) {
182
+ config.testCustomerId = process.env.MEMBRANE_TEST_CUSTOMER_ID;
183
+ }
184
+ return config;
185
+ }
186
+ }
187
+ let defaultLoader = null;
188
+ function getDefaultMembraneConfigLoader() {
189
+ if (!defaultLoader) {
190
+ defaultLoader = new MembraneConfigLoader();
191
+ }
192
+ return defaultLoader;
193
+ }
194
+ function loadMembraneConfig(cwd, options) {
195
+ if (cwd) {
196
+ const loader = new MembraneConfigLoader(cwd);
197
+ return loader.loadConfig(options);
198
+ }
199
+ return getDefaultMembraneConfigLoader().loadConfig(options);
200
+ }
201
+ function hasMembraneCredentials(cwd) {
202
+ if (cwd) {
203
+ const loader = new MembraneConfigLoader(cwd);
204
+ return loader.hasWorkspaceCredentials();
205
+ }
206
+ return getDefaultMembraneConfigLoader().hasWorkspaceCredentials();
207
+ }
208
+
209
+ exports.CONFIG_FILE_NAME = CONFIG_FILE_NAME;
210
+ exports.MembraneConfigLoader = MembraneConfigLoader;
211
+ exports.getDefaultMembraneConfigLoader = getDefaultMembraneConfigLoader;
212
+ exports.hasMembraneCredentials = hasMembraneCredentials;
213
+ exports.loadMembraneConfig = loadMembraneConfig;
214
+ exports.membraneConfigSchema = membraneConfigSchema;
215
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sources":["../src/config/index.ts"],"sourcesContent":[null],"names":["z","path","yaml","fs"],"mappings":"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"}
@@ -0,0 +1,187 @@
1
+ import * as fs from 'fs';
2
+ import * as yaml from 'js-yaml';
3
+ import * as path from 'path';
4
+ import { z } from 'zod';
5
+
6
+ const CONFIG_FILE_NAME = 'membrane.config.yml';
7
+ const membraneConfigSchema = z.object({
8
+ workspaceKey: z.string(),
9
+ workspaceSecret: z.string(),
10
+ apiUri: z.string().optional(),
11
+ consoleUri: z.string().optional(),
12
+ testCustomerId: z.string().optional(),
13
+ accessToken: z.string().optional(),
14
+ });
15
+ class MembraneConfigLoader {
16
+ constructor(cwd = process.cwd()) {
17
+ this.cachedConfig = null;
18
+ this.cwd = cwd;
19
+ }
20
+ loadConfig(options = {}) {
21
+ const { validate = false, useCache = true } = options;
22
+ if (useCache && this.cachedConfig !== null) {
23
+ if (validate) {
24
+ const validation = membraneConfigSchema.safeParse(this.cachedConfig);
25
+ if (!validation.success) {
26
+ throw new Error(`Invalid configuration: ${validation.error.message}`);
27
+ }
28
+ }
29
+ return this.cachedConfig;
30
+ }
31
+ const fileConfig = this.loadFromFile();
32
+ const envConfig = this.loadFromEnv();
33
+ const mergedConfig = {
34
+ ...fileConfig,
35
+ ...envConfig,
36
+ };
37
+ this.cachedConfig = mergedConfig;
38
+ if (validate) {
39
+ const validation = membraneConfigSchema.safeParse(mergedConfig);
40
+ if (!validation.success) {
41
+ throw new Error(`Invalid configuration: ${validation.error.message}`);
42
+ }
43
+ return validation.data;
44
+ }
45
+ return mergedConfig;
46
+ }
47
+ hasValidConfig() {
48
+ try {
49
+ const config = this.loadConfig({ validate: true });
50
+ return Boolean(config.workspaceKey && config.workspaceSecret);
51
+ }
52
+ catch (_a) {
53
+ return false;
54
+ }
55
+ }
56
+ hasWorkspaceCredentials() {
57
+ const config = this.loadConfig();
58
+ return Boolean(config.workspaceKey && config.workspaceSecret);
59
+ }
60
+ clearCache() {
61
+ this.cachedConfig = null;
62
+ }
63
+ updateConfig(newConfig) {
64
+ const currentConfig = this.loadConfig({ useCache: false });
65
+ const mergedConfig = {
66
+ ...currentConfig,
67
+ ...newConfig,
68
+ };
69
+ this.saveToFile(newConfig);
70
+ this.cachedConfig = mergedConfig;
71
+ return mergedConfig;
72
+ }
73
+ saveToFile(config) {
74
+ const configPath = path.join(this.cwd, CONFIG_FILE_NAME);
75
+ const fileConfig = this.loadFromFile();
76
+ const newFileConfig = {
77
+ ...fileConfig,
78
+ ...config,
79
+ };
80
+ const envConfig = this.loadFromEnv();
81
+ for (const key of Object.keys(envConfig)) {
82
+ if (envConfig[key] === newFileConfig[key]) {
83
+ delete newFileConfig[key];
84
+ }
85
+ }
86
+ try {
87
+ const yamlStr = yaml.dump(newFileConfig);
88
+ fs.writeFileSync(configPath, yamlStr, 'utf8');
89
+ return true;
90
+ }
91
+ catch (_error) {
92
+ return false;
93
+ }
94
+ }
95
+ getCwd() {
96
+ return this.cwd;
97
+ }
98
+ setCwd(newCwd) {
99
+ if (this.cwd !== newCwd) {
100
+ this.cwd = newCwd;
101
+ this.clearCache();
102
+ }
103
+ }
104
+ loadFromFile() {
105
+ const configPath = path.join(this.cwd, CONFIG_FILE_NAME);
106
+ let configFile;
107
+ try {
108
+ configFile = fs.readFileSync(configPath, 'utf8');
109
+ }
110
+ catch (_a) {
111
+ return {};
112
+ }
113
+ let parsedConfig;
114
+ try {
115
+ parsedConfig = yaml.load(configFile);
116
+ }
117
+ catch (yamlError) {
118
+ throw new Error(`Failed to parse ${CONFIG_FILE_NAME}: ${yamlError.message}`);
119
+ }
120
+ const config = {};
121
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.accessToken) {
122
+ config.accessToken = String(parsedConfig.accessToken);
123
+ }
124
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.workspaceKey) {
125
+ config.workspaceKey = String(parsedConfig.workspaceKey);
126
+ }
127
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.workspaceSecret) {
128
+ config.workspaceSecret = String(parsedConfig.workspaceSecret);
129
+ }
130
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.apiUri) {
131
+ config.apiUri = String(parsedConfig.apiUri);
132
+ }
133
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.consoleUri) {
134
+ config.consoleUri = String(parsedConfig.consoleUri);
135
+ }
136
+ if (parsedConfig === null || parsedConfig === void 0 ? void 0 : parsedConfig.testCustomerId) {
137
+ config.testCustomerId = String(parsedConfig.testCustomerId);
138
+ }
139
+ return config;
140
+ }
141
+ loadFromEnv() {
142
+ const config = {};
143
+ if (process.env.MEMBRANE_ACCESS_TOKEN) {
144
+ config.accessToken = process.env.MEMBRANE_ACCESS_TOKEN;
145
+ }
146
+ if (process.env.MEMBRANE_WORKSPACE_KEY) {
147
+ config.workspaceKey = process.env.MEMBRANE_WORKSPACE_KEY;
148
+ }
149
+ if (process.env.MEMBRANE_WORKSPACE_SECRET) {
150
+ config.workspaceSecret = process.env.MEMBRANE_WORKSPACE_SECRET;
151
+ }
152
+ if (process.env.MEMBRANE_API_URI) {
153
+ config.apiUri = process.env.MEMBRANE_API_URI;
154
+ }
155
+ if (process.env.MEMBRANE_CONSOLE_URI) {
156
+ config.consoleUri = process.env.MEMBRANE_CONSOLE_URI;
157
+ }
158
+ if (process.env.MEMBRANE_TEST_CUSTOMER_ID) {
159
+ config.testCustomerId = process.env.MEMBRANE_TEST_CUSTOMER_ID;
160
+ }
161
+ return config;
162
+ }
163
+ }
164
+ let defaultLoader = null;
165
+ function getDefaultMembraneConfigLoader() {
166
+ if (!defaultLoader) {
167
+ defaultLoader = new MembraneConfigLoader();
168
+ }
169
+ return defaultLoader;
170
+ }
171
+ function loadMembraneConfig(cwd, options) {
172
+ if (cwd) {
173
+ const loader = new MembraneConfigLoader(cwd);
174
+ return loader.loadConfig(options);
175
+ }
176
+ return getDefaultMembraneConfigLoader().loadConfig(options);
177
+ }
178
+ function hasMembraneCredentials(cwd) {
179
+ if (cwd) {
180
+ const loader = new MembraneConfigLoader(cwd);
181
+ return loader.hasWorkspaceCredentials();
182
+ }
183
+ return getDefaultMembraneConfigLoader().hasWorkspaceCredentials();
184
+ }
185
+
186
+ export { CONFIG_FILE_NAME, MembraneConfigLoader, getDefaultMembraneConfigLoader, hasMembraneCredentials, loadMembraneConfig, membraneConfigSchema };
187
+ //# sourceMappingURL=config.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.mjs","sources":["../src/config/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,2 +1 @@
1
1
  export * from './index.browser';
2
- export * from './config';