@funnelsgrove/runtime 0.1.7 → 0.1.8
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.
- package/dist/config/env.config.d.ts +1 -1
- package/dist/config/env.config.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/services/project-env.d.ts +94 -0
- package/dist/services/project-env.js +184 -0
- package/dist/services/public-env.d.ts +1 -1
- package/dist/services/public-env.js +33 -32
- package/package.json +6 -1
|
@@ -2,7 +2,7 @@ export declare const readRuntimeEnv: (reader: () => string | undefined) => strin
|
|
|
2
2
|
export declare const isDevelopmentRuntime: () => boolean;
|
|
3
3
|
export declare const RUNTIME_ENV_KEYS: {
|
|
4
4
|
readonly appDealsApiBaseUrl: readonly ["NEXT_PUBLIC_APP_DEALS_API_BASE_URL", "APP_DEALS_API_BASE_URL"];
|
|
5
|
-
readonly funnelSdkPublishableKey: readonly ["
|
|
5
|
+
readonly funnelSdkPublishableKey: readonly ["NEXT_PUBLIC_FUNNEL_PUBLISHABLE_KEY", "NEXT_PUBLIC_FUNNEL_SDK_PUBLISHABLE_KEY", "FUNNEL_SDK_PUBLISHABLE_KEY"];
|
|
6
6
|
readonly funnelId: readonly ["NEXT_PUBLIC_FUNNEL_ID", "FUNNEL_ID", "NEXT_PUBLIC_RAG_FUNNEL_ID", "RAG_FUNNEL_ID", "NEXT_PUBLIC_PREVIEW_TEST_FUNNEL_ID", "PREVIEW_TEST_FUNNEL_ID"];
|
|
7
7
|
readonly projectId: readonly ["NEXT_PUBLIC_PROJECT_ID", "PROJECT_ID"];
|
|
8
8
|
readonly funnelVersionId: readonly ["NEXT_PUBLIC_FUNNEL_VERSION_ID", "FUNNEL_VERSION_ID"];
|
|
@@ -14,8 +14,8 @@ export const isDevelopmentRuntime = () => {
|
|
|
14
14
|
export const RUNTIME_ENV_KEYS = {
|
|
15
15
|
appDealsApiBaseUrl: ['NEXT_PUBLIC_APP_DEALS_API_BASE_URL', 'APP_DEALS_API_BASE_URL'],
|
|
16
16
|
funnelSdkPublishableKey: [
|
|
17
|
-
'NEXT_PUBLIC_FUNNEL_SDK_PUBLISHABLE_KEY',
|
|
18
17
|
'NEXT_PUBLIC_FUNNEL_PUBLISHABLE_KEY',
|
|
18
|
+
'NEXT_PUBLIC_FUNNEL_SDK_PUBLISHABLE_KEY',
|
|
19
19
|
'FUNNEL_SDK_PUBLISHABLE_KEY',
|
|
20
20
|
],
|
|
21
21
|
funnelId: [
|
package/dist/index.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export * from './services/api.service.js';
|
|
|
22
22
|
export * from './services/funnel-state.service.js';
|
|
23
23
|
export * from './services/logger.js';
|
|
24
24
|
export * from './services/preview-frame.service.js';
|
|
25
|
+
export * from './services/project-env.js';
|
|
25
26
|
export * from './services/public-env.js';
|
|
26
27
|
export * from './services/runtime-api.config.js';
|
|
27
28
|
export * from './services/runtime-mode.service.js';
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,7 @@ export * from './services/api.service.js';
|
|
|
22
22
|
export * from './services/funnel-state.service.js';
|
|
23
23
|
export * from './services/logger.js';
|
|
24
24
|
export * from './services/preview-frame.service.js';
|
|
25
|
+
export * from './services/project-env.js';
|
|
25
26
|
export * from './services/public-env.js';
|
|
26
27
|
export * from './services/runtime-api.config.js';
|
|
27
28
|
export * from './services/runtime-mode.service.js';
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
export declare const PROJECT_ENV_STANDARD_KEYS: {
|
|
2
|
+
readonly funnelSdkPublishableKey: "NEXT_PUBLIC_FUNNEL_PUBLISHABLE_KEY";
|
|
3
|
+
readonly funnelId: "NEXT_PUBLIC_FUNNEL_ID";
|
|
4
|
+
readonly funnelVersionId: "NEXT_PUBLIC_FUNNEL_VERSION_ID";
|
|
5
|
+
readonly projectId: "NEXT_PUBLIC_PROJECT_ID";
|
|
6
|
+
readonly posthogProjectApiKey: "NEXT_PUBLIC_POSTHOG_PROJECT_API_KEY";
|
|
7
|
+
readonly stripeEnabled: "STRIPE_ENABLED";
|
|
8
|
+
readonly stripeActiveMode: "NEXT_PUBLIC_STRIPE_ACTIVE_MODE";
|
|
9
|
+
readonly stripeTestPublishableKey: "NEXT_PUBLIC_STRIPE_TEST_PUBLISHABLE_KEY";
|
|
10
|
+
readonly stripeTestSecretKey: "STRIPE_TEST_SECRET_KEY";
|
|
11
|
+
readonly stripeTestWebhookSecret: "STRIPE_TEST_WEBHOOK_SECRET";
|
|
12
|
+
readonly stripeLivePublishableKey: "NEXT_PUBLIC_STRIPE_LIVE_PUBLISHABLE_KEY";
|
|
13
|
+
readonly stripeLiveSecretKey: "STRIPE_LIVE_SECRET_KEY";
|
|
14
|
+
readonly stripeLiveWebhookSecret: "STRIPE_LIVE_WEBHOOK_SECRET";
|
|
15
|
+
readonly funnelIosDeepLink: "NEXT_PUBLIC_FUNNEL_IOS_DEEP_LINK";
|
|
16
|
+
readonly funnelAndroidPlayStoreUrl: "NEXT_PUBLIC_ANDROID_PLAY_STORE_URL";
|
|
17
|
+
readonly funnelUniversalLink: "NEXT_PUBLIC_FUNNEL_UNIVERSAL_LINK";
|
|
18
|
+
readonly funnelAppStoreId: "NEXT_PUBLIC_FUNNEL_APP_STORE_ID";
|
|
19
|
+
readonly funnelGoogleStoreId: "NEXT_PUBLIC_FUNNEL_GOOGLE_STORE_ID";
|
|
20
|
+
readonly funnelTimezone: "NEXT_PUBLIC_FUNNEL_TIMEZONE";
|
|
21
|
+
readonly funnelFaviconUrl: "NEXT_PUBLIC_FUNNEL_FAVICON_URL";
|
|
22
|
+
readonly funnelPageTitle: "NEXT_PUBLIC_FUNNEL_PAGE_TITLE";
|
|
23
|
+
readonly funnelPageDescription: "NEXT_PUBLIC_FUNNEL_PAGE_DESCRIPTION";
|
|
24
|
+
readonly funnelPagePreviewImageUrl: "NEXT_PUBLIC_FUNNEL_PAGE_PREVIEW_IMAGE_URL";
|
|
25
|
+
readonly funnelCompanyName: "NEXT_PUBLIC_FUNNEL_COMPANY_NAME";
|
|
26
|
+
readonly funnelCompanyAddress: "NEXT_PUBLIC_FUNNEL_COMPANY_ADDRESS";
|
|
27
|
+
readonly funnelCompanyCountry: "NEXT_PUBLIC_FUNNEL_COMPANY_COUNTRY";
|
|
28
|
+
readonly funnelPrivacyUrl: "NEXT_PUBLIC_FUNNEL_PRIVACY_URL";
|
|
29
|
+
readonly funnelTermsUrl: "NEXT_PUBLIC_FUNNEL_TERMS_URL";
|
|
30
|
+
readonly funnelCustomDomain: "FUNNEL_CUSTOM_DOMAIN";
|
|
31
|
+
readonly funnelSupportEmail: "NEXT_PUBLIC_FUNNEL_SUPPORT_EMAIL";
|
|
32
|
+
readonly metaPixelEnabled: "NEXT_PUBLIC_META_PIXEL_ENABLED";
|
|
33
|
+
readonly metaPixelId: "NEXT_PUBLIC_META_PIXEL_ID";
|
|
34
|
+
readonly metaConversionsAccessToken: "META_CONVERSIONS_ACCESS_TOKEN";
|
|
35
|
+
readonly metaTestEventCode: "META_TEST_EVENT_CODE";
|
|
36
|
+
};
|
|
37
|
+
export type ProjectEnvStandardKey = keyof typeof PROJECT_ENV_STANDARD_KEYS;
|
|
38
|
+
export type ProjectEnvStandardValues = Record<ProjectEnvStandardKey, string>;
|
|
39
|
+
export declare const PROJECT_ENV_STANDARD_KEY_ALIASES: {
|
|
40
|
+
readonly funnelSdkPublishableKey: readonly ["NEXT_PUBLIC_FUNNEL_PUBLISHABLE_KEY", "NEXT_PUBLIC_FUNNEL_SDK_PUBLISHABLE_KEY"];
|
|
41
|
+
readonly funnelId: readonly ["NEXT_PUBLIC_FUNNEL_ID"];
|
|
42
|
+
readonly funnelVersionId: readonly ["NEXT_PUBLIC_FUNNEL_VERSION_ID"];
|
|
43
|
+
readonly projectId: readonly ["NEXT_PUBLIC_PROJECT_ID"];
|
|
44
|
+
readonly posthogProjectApiKey: readonly ["NEXT_PUBLIC_POSTHOG_PROJECT_API_KEY"];
|
|
45
|
+
readonly stripeEnabled: readonly ["STRIPE_ENABLED"];
|
|
46
|
+
readonly stripeActiveMode: readonly ["NEXT_PUBLIC_STRIPE_ACTIVE_MODE", "STRIPE_ACTIVE_MODE"];
|
|
47
|
+
readonly stripeTestPublishableKey: readonly ["NEXT_PUBLIC_STRIPE_TEST_PUBLISHABLE_KEY", "STRIPE_TEST_PUBLISHABLE_KEY"];
|
|
48
|
+
readonly stripeTestSecretKey: readonly ["STRIPE_TEST_SECRET_KEY"];
|
|
49
|
+
readonly stripeTestWebhookSecret: readonly ["STRIPE_TEST_WEBHOOK_SECRET"];
|
|
50
|
+
readonly stripeLivePublishableKey: readonly ["NEXT_PUBLIC_STRIPE_LIVE_PUBLISHABLE_KEY", "STRIPE_LIVE_PUBLISHABLE_KEY"];
|
|
51
|
+
readonly stripeLiveSecretKey: readonly ["STRIPE_LIVE_SECRET_KEY"];
|
|
52
|
+
readonly stripeLiveWebhookSecret: readonly ["STRIPE_LIVE_WEBHOOK_SECRET"];
|
|
53
|
+
readonly funnelIosDeepLink: readonly ["NEXT_PUBLIC_FUNNEL_IOS_DEEP_LINK", "APPSTORE_DEEPLINK_URL"];
|
|
54
|
+
readonly funnelAndroidPlayStoreUrl: readonly ["NEXT_PUBLIC_ANDROID_PLAY_STORE_URL", "GOOGLE_PLAY_URL"];
|
|
55
|
+
readonly funnelUniversalLink: readonly ["NEXT_PUBLIC_FUNNEL_UNIVERSAL_LINK", "WEB_LANDING_URL"];
|
|
56
|
+
readonly funnelAppStoreId: readonly ["NEXT_PUBLIC_FUNNEL_APP_STORE_ID"];
|
|
57
|
+
readonly funnelGoogleStoreId: readonly ["NEXT_PUBLIC_FUNNEL_GOOGLE_STORE_ID"];
|
|
58
|
+
readonly funnelTimezone: readonly ["NEXT_PUBLIC_FUNNEL_TIMEZONE"];
|
|
59
|
+
readonly funnelFaviconUrl: readonly ["NEXT_PUBLIC_FUNNEL_FAVICON_URL"];
|
|
60
|
+
readonly funnelPageTitle: readonly ["NEXT_PUBLIC_FUNNEL_PAGE_TITLE"];
|
|
61
|
+
readonly funnelPageDescription: readonly ["NEXT_PUBLIC_FUNNEL_PAGE_DESCRIPTION"];
|
|
62
|
+
readonly funnelPagePreviewImageUrl: readonly ["NEXT_PUBLIC_FUNNEL_PAGE_PREVIEW_IMAGE_URL"];
|
|
63
|
+
readonly funnelCompanyName: readonly ["NEXT_PUBLIC_FUNNEL_COMPANY_NAME"];
|
|
64
|
+
readonly funnelCompanyAddress: readonly ["NEXT_PUBLIC_FUNNEL_COMPANY_ADDRESS"];
|
|
65
|
+
readonly funnelCompanyCountry: readonly ["NEXT_PUBLIC_FUNNEL_COMPANY_COUNTRY"];
|
|
66
|
+
readonly funnelPrivacyUrl: readonly ["NEXT_PUBLIC_FUNNEL_PRIVACY_URL"];
|
|
67
|
+
readonly funnelTermsUrl: readonly ["NEXT_PUBLIC_FUNNEL_TERMS_URL"];
|
|
68
|
+
readonly funnelCustomDomain: readonly ["FUNNEL_CUSTOM_DOMAIN"];
|
|
69
|
+
readonly funnelSupportEmail: readonly ["NEXT_PUBLIC_FUNNEL_SUPPORT_EMAIL", "FUNNEL_SUPPORT_EMAIL"];
|
|
70
|
+
readonly metaPixelEnabled: readonly ["NEXT_PUBLIC_META_PIXEL_ENABLED", "META_PIXEL_ENABLED"];
|
|
71
|
+
readonly metaPixelId: readonly ["NEXT_PUBLIC_META_PIXEL_ID", "META_PIXEL_ID"];
|
|
72
|
+
readonly metaConversionsAccessToken: readonly ["META_CONVERSIONS_ACCESS_TOKEN"];
|
|
73
|
+
readonly metaTestEventCode: readonly ["META_TEST_EVENT_CODE"];
|
|
74
|
+
};
|
|
75
|
+
export type ProjectEnvVariableLike = {
|
|
76
|
+
key: string;
|
|
77
|
+
value: string | null | undefined;
|
|
78
|
+
};
|
|
79
|
+
export type ProjectEnvVariableInputLike = {
|
|
80
|
+
key: string;
|
|
81
|
+
value: string;
|
|
82
|
+
};
|
|
83
|
+
export interface ParsedProjectEnvVariables {
|
|
84
|
+
envMap: Map<string, string>;
|
|
85
|
+
standard: ProjectEnvStandardValues;
|
|
86
|
+
}
|
|
87
|
+
export declare const canonicalizeProjectEnvKey: (key: string) => string;
|
|
88
|
+
export declare const normalizeProjectEnvValue: (value: string | null | undefined) => string;
|
|
89
|
+
export declare const buildProjectEnvMap: (variables: readonly ProjectEnvVariableLike[]) => Map<string, string>;
|
|
90
|
+
export declare const getProjectEnvValue: (envMap: ReadonlyMap<string, string>, keys: readonly string[], options?: {
|
|
91
|
+
requireNonEmpty?: boolean;
|
|
92
|
+
}) => string;
|
|
93
|
+
export declare const parseProjectEnvVariables: (variables: readonly ProjectEnvVariableLike[]) => ParsedProjectEnvVariables;
|
|
94
|
+
export declare const normalizeProjectEnvVariables: (variables: readonly ProjectEnvVariableInputLike[]) => ProjectEnvVariableInputLike[];
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
export const PROJECT_ENV_STANDARD_KEYS = {
|
|
2
|
+
funnelSdkPublishableKey: 'NEXT_PUBLIC_FUNNEL_PUBLISHABLE_KEY',
|
|
3
|
+
funnelId: 'NEXT_PUBLIC_FUNNEL_ID',
|
|
4
|
+
funnelVersionId: 'NEXT_PUBLIC_FUNNEL_VERSION_ID',
|
|
5
|
+
projectId: 'NEXT_PUBLIC_PROJECT_ID',
|
|
6
|
+
posthogProjectApiKey: 'NEXT_PUBLIC_POSTHOG_PROJECT_API_KEY',
|
|
7
|
+
stripeEnabled: 'STRIPE_ENABLED',
|
|
8
|
+
stripeActiveMode: 'NEXT_PUBLIC_STRIPE_ACTIVE_MODE',
|
|
9
|
+
stripeTestPublishableKey: 'NEXT_PUBLIC_STRIPE_TEST_PUBLISHABLE_KEY',
|
|
10
|
+
stripeTestSecretKey: 'STRIPE_TEST_SECRET_KEY',
|
|
11
|
+
stripeTestWebhookSecret: 'STRIPE_TEST_WEBHOOK_SECRET',
|
|
12
|
+
stripeLivePublishableKey: 'NEXT_PUBLIC_STRIPE_LIVE_PUBLISHABLE_KEY',
|
|
13
|
+
stripeLiveSecretKey: 'STRIPE_LIVE_SECRET_KEY',
|
|
14
|
+
stripeLiveWebhookSecret: 'STRIPE_LIVE_WEBHOOK_SECRET',
|
|
15
|
+
funnelIosDeepLink: 'NEXT_PUBLIC_FUNNEL_IOS_DEEP_LINK',
|
|
16
|
+
funnelAndroidPlayStoreUrl: 'NEXT_PUBLIC_ANDROID_PLAY_STORE_URL',
|
|
17
|
+
funnelUniversalLink: 'NEXT_PUBLIC_FUNNEL_UNIVERSAL_LINK',
|
|
18
|
+
funnelAppStoreId: 'NEXT_PUBLIC_FUNNEL_APP_STORE_ID',
|
|
19
|
+
funnelGoogleStoreId: 'NEXT_PUBLIC_FUNNEL_GOOGLE_STORE_ID',
|
|
20
|
+
funnelTimezone: 'NEXT_PUBLIC_FUNNEL_TIMEZONE',
|
|
21
|
+
funnelFaviconUrl: 'NEXT_PUBLIC_FUNNEL_FAVICON_URL',
|
|
22
|
+
funnelPageTitle: 'NEXT_PUBLIC_FUNNEL_PAGE_TITLE',
|
|
23
|
+
funnelPageDescription: 'NEXT_PUBLIC_FUNNEL_PAGE_DESCRIPTION',
|
|
24
|
+
funnelPagePreviewImageUrl: 'NEXT_PUBLIC_FUNNEL_PAGE_PREVIEW_IMAGE_URL',
|
|
25
|
+
funnelCompanyName: 'NEXT_PUBLIC_FUNNEL_COMPANY_NAME',
|
|
26
|
+
funnelCompanyAddress: 'NEXT_PUBLIC_FUNNEL_COMPANY_ADDRESS',
|
|
27
|
+
funnelCompanyCountry: 'NEXT_PUBLIC_FUNNEL_COMPANY_COUNTRY',
|
|
28
|
+
funnelPrivacyUrl: 'NEXT_PUBLIC_FUNNEL_PRIVACY_URL',
|
|
29
|
+
funnelTermsUrl: 'NEXT_PUBLIC_FUNNEL_TERMS_URL',
|
|
30
|
+
funnelCustomDomain: 'FUNNEL_CUSTOM_DOMAIN',
|
|
31
|
+
funnelSupportEmail: 'NEXT_PUBLIC_FUNNEL_SUPPORT_EMAIL',
|
|
32
|
+
metaPixelEnabled: 'NEXT_PUBLIC_META_PIXEL_ENABLED',
|
|
33
|
+
metaPixelId: 'NEXT_PUBLIC_META_PIXEL_ID',
|
|
34
|
+
metaConversionsAccessToken: 'META_CONVERSIONS_ACCESS_TOKEN',
|
|
35
|
+
metaTestEventCode: 'META_TEST_EVENT_CODE',
|
|
36
|
+
};
|
|
37
|
+
export const PROJECT_ENV_STANDARD_KEY_ALIASES = {
|
|
38
|
+
funnelSdkPublishableKey: [
|
|
39
|
+
PROJECT_ENV_STANDARD_KEYS.funnelSdkPublishableKey,
|
|
40
|
+
'NEXT_PUBLIC_FUNNEL_SDK_PUBLISHABLE_KEY',
|
|
41
|
+
],
|
|
42
|
+
funnelId: [PROJECT_ENV_STANDARD_KEYS.funnelId],
|
|
43
|
+
funnelVersionId: [PROJECT_ENV_STANDARD_KEYS.funnelVersionId],
|
|
44
|
+
projectId: [PROJECT_ENV_STANDARD_KEYS.projectId],
|
|
45
|
+
posthogProjectApiKey: [PROJECT_ENV_STANDARD_KEYS.posthogProjectApiKey],
|
|
46
|
+
stripeEnabled: [PROJECT_ENV_STANDARD_KEYS.stripeEnabled],
|
|
47
|
+
stripeActiveMode: [PROJECT_ENV_STANDARD_KEYS.stripeActiveMode, 'STRIPE_ACTIVE_MODE'],
|
|
48
|
+
stripeTestPublishableKey: [PROJECT_ENV_STANDARD_KEYS.stripeTestPublishableKey, 'STRIPE_TEST_PUBLISHABLE_KEY'],
|
|
49
|
+
stripeTestSecretKey: [PROJECT_ENV_STANDARD_KEYS.stripeTestSecretKey],
|
|
50
|
+
stripeTestWebhookSecret: [PROJECT_ENV_STANDARD_KEYS.stripeTestWebhookSecret],
|
|
51
|
+
stripeLivePublishableKey: [PROJECT_ENV_STANDARD_KEYS.stripeLivePublishableKey, 'STRIPE_LIVE_PUBLISHABLE_KEY'],
|
|
52
|
+
stripeLiveSecretKey: [PROJECT_ENV_STANDARD_KEYS.stripeLiveSecretKey],
|
|
53
|
+
stripeLiveWebhookSecret: [PROJECT_ENV_STANDARD_KEYS.stripeLiveWebhookSecret],
|
|
54
|
+
funnelIosDeepLink: [PROJECT_ENV_STANDARD_KEYS.funnelIosDeepLink, 'APPSTORE_DEEPLINK_URL'],
|
|
55
|
+
funnelAndroidPlayStoreUrl: [PROJECT_ENV_STANDARD_KEYS.funnelAndroidPlayStoreUrl, 'GOOGLE_PLAY_URL'],
|
|
56
|
+
funnelUniversalLink: [PROJECT_ENV_STANDARD_KEYS.funnelUniversalLink, 'WEB_LANDING_URL'],
|
|
57
|
+
funnelAppStoreId: [PROJECT_ENV_STANDARD_KEYS.funnelAppStoreId],
|
|
58
|
+
funnelGoogleStoreId: [PROJECT_ENV_STANDARD_KEYS.funnelGoogleStoreId],
|
|
59
|
+
funnelTimezone: [PROJECT_ENV_STANDARD_KEYS.funnelTimezone],
|
|
60
|
+
funnelFaviconUrl: [PROJECT_ENV_STANDARD_KEYS.funnelFaviconUrl],
|
|
61
|
+
funnelPageTitle: [PROJECT_ENV_STANDARD_KEYS.funnelPageTitle],
|
|
62
|
+
funnelPageDescription: [PROJECT_ENV_STANDARD_KEYS.funnelPageDescription],
|
|
63
|
+
funnelPagePreviewImageUrl: [PROJECT_ENV_STANDARD_KEYS.funnelPagePreviewImageUrl],
|
|
64
|
+
funnelCompanyName: [PROJECT_ENV_STANDARD_KEYS.funnelCompanyName],
|
|
65
|
+
funnelCompanyAddress: [PROJECT_ENV_STANDARD_KEYS.funnelCompanyAddress],
|
|
66
|
+
funnelCompanyCountry: [PROJECT_ENV_STANDARD_KEYS.funnelCompanyCountry],
|
|
67
|
+
funnelPrivacyUrl: [PROJECT_ENV_STANDARD_KEYS.funnelPrivacyUrl],
|
|
68
|
+
funnelTermsUrl: [PROJECT_ENV_STANDARD_KEYS.funnelTermsUrl],
|
|
69
|
+
funnelCustomDomain: [PROJECT_ENV_STANDARD_KEYS.funnelCustomDomain],
|
|
70
|
+
funnelSupportEmail: [PROJECT_ENV_STANDARD_KEYS.funnelSupportEmail, 'FUNNEL_SUPPORT_EMAIL'],
|
|
71
|
+
metaPixelEnabled: [PROJECT_ENV_STANDARD_KEYS.metaPixelEnabled, 'META_PIXEL_ENABLED'],
|
|
72
|
+
metaPixelId: [PROJECT_ENV_STANDARD_KEYS.metaPixelId, 'META_PIXEL_ID'],
|
|
73
|
+
metaConversionsAccessToken: [PROJECT_ENV_STANDARD_KEYS.metaConversionsAccessToken],
|
|
74
|
+
metaTestEventCode: [PROJECT_ENV_STANDARD_KEYS.metaTestEventCode],
|
|
75
|
+
};
|
|
76
|
+
const LEGACY_TO_CANONICAL_KEY = new Map([
|
|
77
|
+
['NEXT_PUBLIC_FUNNEL_SDK_PUBLISHABLE_KEY', PROJECT_ENV_STANDARD_KEYS.funnelSdkPublishableKey],
|
|
78
|
+
['STRIPE_ACTIVE_MODE', PROJECT_ENV_STANDARD_KEYS.stripeActiveMode],
|
|
79
|
+
['STRIPE_TEST_PUBLISHABLE_KEY', PROJECT_ENV_STANDARD_KEYS.stripeTestPublishableKey],
|
|
80
|
+
['STRIPE_LIVE_PUBLISHABLE_KEY', PROJECT_ENV_STANDARD_KEYS.stripeLivePublishableKey],
|
|
81
|
+
['APPSTORE_DEEPLINK_URL', PROJECT_ENV_STANDARD_KEYS.funnelIosDeepLink],
|
|
82
|
+
['GOOGLE_PLAY_URL', PROJECT_ENV_STANDARD_KEYS.funnelAndroidPlayStoreUrl],
|
|
83
|
+
['WEB_LANDING_URL', PROJECT_ENV_STANDARD_KEYS.funnelUniversalLink],
|
|
84
|
+
['FUNNEL_SUPPORT_EMAIL', PROJECT_ENV_STANDARD_KEYS.funnelSupportEmail],
|
|
85
|
+
['META_PIXEL_ENABLED', PROJECT_ENV_STANDARD_KEYS.metaPixelEnabled],
|
|
86
|
+
['META_PIXEL_ID', PROJECT_ENV_STANDARD_KEYS.metaPixelId],
|
|
87
|
+
['NEXT_PUBLIC_PROJECT_ID', PROJECT_ENV_STANDARD_KEYS.projectId],
|
|
88
|
+
['NEXT_PUBLIC_POSTHOG_PROJECT_API_KEY', PROJECT_ENV_STANDARD_KEYS.posthogProjectApiKey],
|
|
89
|
+
]);
|
|
90
|
+
export const canonicalizeProjectEnvKey = (key) => {
|
|
91
|
+
return LEGACY_TO_CANONICAL_KEY.get(key) || key;
|
|
92
|
+
};
|
|
93
|
+
export const normalizeProjectEnvValue = (value) => {
|
|
94
|
+
return (value === null || value === void 0 ? void 0 : value.trim()) || '';
|
|
95
|
+
};
|
|
96
|
+
export const buildProjectEnvMap = (variables) => {
|
|
97
|
+
const envMap = new Map();
|
|
98
|
+
for (const variable of variables) {
|
|
99
|
+
const key = canonicalizeProjectEnvKey(variable.key.trim());
|
|
100
|
+
if (!key) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const nextValue = normalizeProjectEnvValue(variable.value);
|
|
104
|
+
const existingValue = envMap.get(key);
|
|
105
|
+
if (existingValue === undefined || (!existingValue && nextValue)) {
|
|
106
|
+
envMap.set(key, nextValue);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return envMap;
|
|
110
|
+
};
|
|
111
|
+
export const getProjectEnvValue = (envMap, keys, options) => {
|
|
112
|
+
const requireNonEmpty = Boolean(options === null || options === void 0 ? void 0 : options.requireNonEmpty);
|
|
113
|
+
for (const key of keys) {
|
|
114
|
+
const canonicalKey = canonicalizeProjectEnvKey(key.trim());
|
|
115
|
+
if (!canonicalKey || !envMap.has(canonicalKey)) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const value = normalizeProjectEnvValue(envMap.get(canonicalKey));
|
|
119
|
+
if (requireNonEmpty && !value) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
return value;
|
|
123
|
+
}
|
|
124
|
+
return '';
|
|
125
|
+
};
|
|
126
|
+
const buildProjectStandardValues = (envMap) => {
|
|
127
|
+
return {
|
|
128
|
+
funnelSdkPublishableKey: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelSdkPublishableKey),
|
|
129
|
+
funnelId: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelId),
|
|
130
|
+
funnelVersionId: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelVersionId),
|
|
131
|
+
projectId: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.projectId),
|
|
132
|
+
posthogProjectApiKey: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.posthogProjectApiKey),
|
|
133
|
+
stripeEnabled: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.stripeEnabled),
|
|
134
|
+
stripeActiveMode: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.stripeActiveMode),
|
|
135
|
+
stripeTestPublishableKey: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.stripeTestPublishableKey),
|
|
136
|
+
stripeTestSecretKey: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.stripeTestSecretKey),
|
|
137
|
+
stripeTestWebhookSecret: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.stripeTestWebhookSecret),
|
|
138
|
+
stripeLivePublishableKey: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.stripeLivePublishableKey),
|
|
139
|
+
stripeLiveSecretKey: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.stripeLiveSecretKey),
|
|
140
|
+
stripeLiveWebhookSecret: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.stripeLiveWebhookSecret),
|
|
141
|
+
funnelIosDeepLink: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelIosDeepLink),
|
|
142
|
+
funnelAndroidPlayStoreUrl: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelAndroidPlayStoreUrl),
|
|
143
|
+
funnelUniversalLink: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelUniversalLink),
|
|
144
|
+
funnelAppStoreId: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelAppStoreId),
|
|
145
|
+
funnelGoogleStoreId: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelGoogleStoreId),
|
|
146
|
+
funnelTimezone: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelTimezone),
|
|
147
|
+
funnelFaviconUrl: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelFaviconUrl),
|
|
148
|
+
funnelPageTitle: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelPageTitle),
|
|
149
|
+
funnelPageDescription: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelPageDescription),
|
|
150
|
+
funnelPagePreviewImageUrl: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelPagePreviewImageUrl),
|
|
151
|
+
funnelCompanyName: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelCompanyName),
|
|
152
|
+
funnelCompanyAddress: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelCompanyAddress),
|
|
153
|
+
funnelCompanyCountry: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelCompanyCountry),
|
|
154
|
+
funnelPrivacyUrl: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelPrivacyUrl),
|
|
155
|
+
funnelTermsUrl: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelTermsUrl),
|
|
156
|
+
funnelCustomDomain: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelCustomDomain),
|
|
157
|
+
funnelSupportEmail: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.funnelSupportEmail),
|
|
158
|
+
metaPixelEnabled: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.metaPixelEnabled),
|
|
159
|
+
metaPixelId: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.metaPixelId),
|
|
160
|
+
metaConversionsAccessToken: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.metaConversionsAccessToken),
|
|
161
|
+
metaTestEventCode: getProjectEnvValue(envMap, PROJECT_ENV_STANDARD_KEY_ALIASES.metaTestEventCode),
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
export const parseProjectEnvVariables = (variables) => {
|
|
165
|
+
const envMap = buildProjectEnvMap(variables);
|
|
166
|
+
return {
|
|
167
|
+
envMap,
|
|
168
|
+
standard: buildProjectStandardValues(envMap),
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
export const normalizeProjectEnvVariables = (variables) => {
|
|
172
|
+
const deduped = new Map();
|
|
173
|
+
for (const variable of variables) {
|
|
174
|
+
const key = canonicalizeProjectEnvKey(variable.key.trim());
|
|
175
|
+
if (!key) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
deduped.set(key, variable.value);
|
|
179
|
+
}
|
|
180
|
+
return Array.from(deduped.entries()).map(([key, value]) => ({
|
|
181
|
+
key,
|
|
182
|
+
value,
|
|
183
|
+
}));
|
|
184
|
+
};
|
|
@@ -2,7 +2,7 @@ import { isDevelopmentRuntime, readRuntimeEnv } from '../config/env.config.js';
|
|
|
2
2
|
export { isDevelopmentRuntime, readRuntimeEnv };
|
|
3
3
|
export declare const RUNTIME_PUBLIC_ENV_KEYS: {
|
|
4
4
|
readonly apiBaseUrl: readonly ["NEXT_PUBLIC_APP_DEALS_API_BASE_URL", "APP_DEALS_API_BASE_URL"];
|
|
5
|
-
readonly funnelSdkPublishableKey: readonly ["
|
|
5
|
+
readonly funnelSdkPublishableKey: readonly ["NEXT_PUBLIC_FUNNEL_PUBLISHABLE_KEY", "NEXT_PUBLIC_FUNNEL_SDK_PUBLISHABLE_KEY", "FUNNEL_SDK_PUBLISHABLE_KEY"];
|
|
6
6
|
readonly funnelId: readonly ["NEXT_PUBLIC_FUNNEL_ID", "FUNNEL_ID", "NEXT_PUBLIC_RAG_FUNNEL_ID", "RAG_FUNNEL_ID", "NEXT_PUBLIC_PREVIEW_TEST_FUNNEL_ID", "PREVIEW_TEST_FUNNEL_ID"];
|
|
7
7
|
readonly funnelVersionId: readonly ["NEXT_PUBLIC_FUNNEL_VERSION_ID", "FUNNEL_VERSION_ID"];
|
|
8
8
|
readonly projectId: readonly ["NEXT_PUBLIC_PROJECT_ID", "PROJECT_ID"];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RUNTIME_ENV_KEYS, isDevelopmentRuntime, readRuntimeEnv, runtimeEnvConfig, } from '../config/env.config.js';
|
|
2
|
+
import { PROJECT_ENV_STANDARD_KEYS } from './project-env.js';
|
|
2
3
|
export { isDevelopmentRuntime, readRuntimeEnv };
|
|
3
4
|
const DEFAULT_API_BASE_URL = 'https://sdk-api.funnelsgrove.com';
|
|
4
5
|
const DEFAULT_FUNNEL_SDK_PUBLISHABLE_KEY = 'pk_test_app_deals_seed_public';
|
|
@@ -95,58 +96,58 @@ const NEXT_STATIC_EXPORT_RUNTIME_PUBLIC_KEYS = [
|
|
|
95
96
|
inputKeys: ['NEXT_PUBLIC_APP_DEALS_API_BASE_URL'],
|
|
96
97
|
},
|
|
97
98
|
{
|
|
98
|
-
outputKey:
|
|
99
|
+
outputKey: PROJECT_ENV_STANDARD_KEYS.funnelSdkPublishableKey,
|
|
99
100
|
inputKeys: [
|
|
100
|
-
|
|
101
|
+
PROJECT_ENV_STANDARD_KEYS.funnelSdkPublishableKey,
|
|
101
102
|
'NEXT_PUBLIC_FUNNEL_SDK_PUBLISHABLE_KEY',
|
|
102
103
|
],
|
|
103
104
|
},
|
|
104
|
-
{ outputKey:
|
|
105
|
-
{ outputKey:
|
|
106
|
-
{ outputKey:
|
|
105
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelId, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelId] },
|
|
106
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelVersionId, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelVersionId] },
|
|
107
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.projectId, inputKeys: [PROJECT_ENV_STANDARD_KEYS.projectId] },
|
|
107
108
|
{
|
|
108
|
-
outputKey:
|
|
109
|
-
inputKeys: [
|
|
109
|
+
outputKey: PROJECT_ENV_STANDARD_KEYS.posthogProjectApiKey,
|
|
110
|
+
inputKeys: [PROJECT_ENV_STANDARD_KEYS.posthogProjectApiKey],
|
|
110
111
|
},
|
|
111
|
-
{ outputKey:
|
|
112
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelSupportEmail, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelSupportEmail] },
|
|
112
113
|
{ outputKey: 'NEXT_PUBLIC_IOS_APP_STORE_URL', inputKeys: ['NEXT_PUBLIC_IOS_APP_STORE_URL'] },
|
|
113
|
-
{ outputKey:
|
|
114
|
-
{ outputKey:
|
|
115
|
-
{ outputKey:
|
|
116
|
-
{ outputKey:
|
|
117
|
-
{ outputKey:
|
|
118
|
-
{ outputKey:
|
|
114
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelAndroidPlayStoreUrl, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelAndroidPlayStoreUrl] },
|
|
115
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelAppStoreId, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelAppStoreId] },
|
|
116
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelGoogleStoreId, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelGoogleStoreId] },
|
|
117
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelTimezone, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelTimezone] },
|
|
118
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelFaviconUrl, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelFaviconUrl] },
|
|
119
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelPageTitle, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelPageTitle] },
|
|
119
120
|
{
|
|
120
|
-
outputKey:
|
|
121
|
-
inputKeys: [
|
|
121
|
+
outputKey: PROJECT_ENV_STANDARD_KEYS.funnelPageDescription,
|
|
122
|
+
inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelPageDescription],
|
|
122
123
|
},
|
|
123
124
|
{
|
|
124
|
-
outputKey:
|
|
125
|
-
inputKeys: [
|
|
125
|
+
outputKey: PROJECT_ENV_STANDARD_KEYS.funnelPagePreviewImageUrl,
|
|
126
|
+
inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelPagePreviewImageUrl],
|
|
126
127
|
},
|
|
127
|
-
{ outputKey:
|
|
128
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelCompanyName, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelCompanyName] },
|
|
128
129
|
{
|
|
129
|
-
outputKey:
|
|
130
|
-
inputKeys: [
|
|
130
|
+
outputKey: PROJECT_ENV_STANDARD_KEYS.funnelCompanyAddress,
|
|
131
|
+
inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelCompanyAddress],
|
|
131
132
|
},
|
|
132
133
|
{
|
|
133
|
-
outputKey:
|
|
134
|
-
inputKeys: [
|
|
134
|
+
outputKey: PROJECT_ENV_STANDARD_KEYS.funnelCompanyCountry,
|
|
135
|
+
inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelCompanyCountry],
|
|
135
136
|
},
|
|
136
|
-
{ outputKey:
|
|
137
|
-
{ outputKey:
|
|
137
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelPrivacyUrl, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelPrivacyUrl] },
|
|
138
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelTermsUrl, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelTermsUrl] },
|
|
138
139
|
{
|
|
139
|
-
outputKey:
|
|
140
|
-
inputKeys: [
|
|
140
|
+
outputKey: PROJECT_ENV_STANDARD_KEYS.funnelUniversalLink,
|
|
141
|
+
inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelUniversalLink],
|
|
141
142
|
},
|
|
142
|
-
{ outputKey:
|
|
143
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.funnelIosDeepLink, inputKeys: [PROJECT_ENV_STANDARD_KEYS.funnelIosDeepLink] },
|
|
143
144
|
{
|
|
144
145
|
outputKey: 'NEXT_PUBLIC_FUNNEL_ANDROID_DEEP_LINK',
|
|
145
146
|
inputKeys: ['NEXT_PUBLIC_FUNNEL_ANDROID_DEEP_LINK'],
|
|
146
147
|
},
|
|
147
148
|
{ outputKey: 'NEXT_PUBLIC_FUNNEL_QR_TARGET', inputKeys: ['NEXT_PUBLIC_FUNNEL_QR_TARGET'] },
|
|
148
|
-
{ outputKey:
|
|
149
|
-
{ outputKey:
|
|
149
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.metaPixelEnabled, inputKeys: [PROJECT_ENV_STANDARD_KEYS.metaPixelEnabled] },
|
|
150
|
+
{ outputKey: PROJECT_ENV_STANDARD_KEYS.metaPixelId, inputKeys: [PROJECT_ENV_STANDARD_KEYS.metaPixelId] },
|
|
150
151
|
];
|
|
151
152
|
const readNonEmptyStaticExportEnv = (env, keys) => {
|
|
152
153
|
var _a;
|
|
@@ -170,8 +171,8 @@ export const resolveNextStaticExportRuntimeEnv = (env) => {
|
|
|
170
171
|
}));
|
|
171
172
|
}
|
|
172
173
|
return {
|
|
173
|
-
|
|
174
|
-
|
|
174
|
+
[PROJECT_ENV_STANDARD_KEYS.funnelSdkPublishableKey]: DEFAULT_PREVIEW_PAYMENT_PUBLISHABLE_KEY,
|
|
175
|
+
[PROJECT_ENV_STANDARD_KEYS.funnelId]: ((_b = env.NEXT_PUBLIC_RAG_FUNNEL_ID) === null || _b === void 0 ? void 0 : _b.trim()) || '',
|
|
175
176
|
};
|
|
176
177
|
};
|
|
177
178
|
export const isSeedFunnelSdkPublishableKey = (value) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@funnelsgrove/runtime",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"types": "./dist/config/env.config.d.ts",
|
|
17
17
|
"import": "./dist/config/env.config.js",
|
|
18
18
|
"default": "./dist/config/env.config.js"
|
|
19
|
+
},
|
|
20
|
+
"./services/project-env": {
|
|
21
|
+
"types": "./dist/services/project-env.d.ts",
|
|
22
|
+
"import": "./dist/services/project-env.js",
|
|
23
|
+
"default": "./dist/services/project-env.js"
|
|
19
24
|
}
|
|
20
25
|
},
|
|
21
26
|
"files": [
|