@paakd/config 0.0.2

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 (140) hide show
  1. package/dist/src/index.js +20 -0
  2. package/gen/go/addresses/Address.pkl.go +10 -0
  3. package/gen/go/addresses/Addresses.pkl.go +43 -0
  4. package/gen/go/addresses/BillingAddress.pkl.go +8 -0
  5. package/gen/go/addresses/Field.pkl.go +43 -0
  6. package/gen/go/addresses/addressgroup/AddressGroup.pkl.go +43 -0
  7. package/gen/go/addresses/fieldtype/FieldType.pkl.go +61 -0
  8. package/gen/go/addresses/init.pkl.go +11 -0
  9. package/gen/go/cloudflare/Cloudflare.pkl.go +37 -0
  10. package/gen/go/cloudflare/R2Bucket.pkl.go +22 -0
  11. package/gen/go/cloudflare/TerraformBackend.pkl.go +16 -0
  12. package/gen/go/cloudflare/Turnstile.pkl.go +8 -0
  13. package/gen/go/cloudflare/init.pkl.go +11 -0
  14. package/gen/go/db/DB.pkl.go +43 -0
  15. package/gen/go/db/DBConnection.pkl.go +12 -0
  16. package/gen/go/db/init.pkl.go +9 -0
  17. package/gen/go/dune/Dune.pkl.go +47 -0
  18. package/gen/go/dune/init.pkl.go +8 -0
  19. package/gen/go/enterprise/Enterprise.pkl.go +118 -0
  20. package/gen/go/enterprise/init.pkl.go +8 -0
  21. package/gen/go/enterprise/taxonomyversion/TaxonomyVersion.pkl.go +37 -0
  22. package/gen/go/redis/Redis.pkl.go +41 -0
  23. package/gen/go/redis/init.pkl.go +8 -0
  24. package/gen/go/shared/Build.pkl.go +46 -0
  25. package/gen/go/shared/Shared.pkl.go +35 -0
  26. package/gen/go/shared/init.pkl.go +9 -0
  27. package/gen/go/worker/Worker.pkl.go +55 -0
  28. package/gen/go/worker/WorkerConnect.pkl.go +6 -0
  29. package/gen/go/worker/init.pkl.go +9 -0
  30. package/gen/js/development/basket_eco_packages_config_addresses.pkl.ts +106 -0
  31. package/gen/js/development/basket_eco_packages_config_checkout.pkl.ts +73 -0
  32. package/gen/js/development/basket_eco_packages_config_cloudflare.pkl.ts +69 -0
  33. package/gen/js/development/basket_eco_packages_config_cms.pkl.ts +119 -0
  34. package/gen/js/development/basket_eco_packages_config_db.pkl.ts +47 -0
  35. package/gen/js/development/basket_eco_packages_config_dune.pkl.ts +36 -0
  36. package/gen/js/development/basket_eco_packages_config_enterprise.pkl.ts +290 -0
  37. package/gen/js/development/basket_eco_packages_config_feature.pkl.ts +58 -0
  38. package/gen/js/development/basket_eco_packages_config_redis.pkl.ts +30 -0
  39. package/gen/js/development/basket_eco_packages_config_renderer_development_cms.pkl.ts +28 -0
  40. package/gen/js/development/basket_eco_packages_config_shared.pkl.ts +73 -0
  41. package/gen/js/development/basket_eco_packages_config_worker.pkl.ts +53 -0
  42. package/gen/js/production/basket_eco_packages_config_addresses.pkl.ts +106 -0
  43. package/gen/js/production/basket_eco_packages_config_checkout.pkl.ts +73 -0
  44. package/gen/js/production/basket_eco_packages_config_cloudflare.pkl.ts +69 -0
  45. package/gen/js/production/basket_eco_packages_config_cms.pkl.ts +119 -0
  46. package/gen/js/production/basket_eco_packages_config_db.pkl.ts +47 -0
  47. package/gen/js/production/basket_eco_packages_config_dune.pkl.ts +36 -0
  48. package/gen/js/production/basket_eco_packages_config_enterprise.pkl.ts +290 -0
  49. package/gen/js/production/basket_eco_packages_config_feature.pkl.ts +58 -0
  50. package/gen/js/production/basket_eco_packages_config_kiosk_host.pkl.ts +72 -0
  51. package/gen/js/production/basket_eco_packages_config_redis.pkl.ts +30 -0
  52. package/gen/js/production/basket_eco_packages_config_renderer_production_cms.pkl.ts +28 -0
  53. package/gen/js/production/basket_eco_packages_config_renderer_production_dune_config.pkl.ts +29 -0
  54. package/gen/js/production/basket_eco_packages_config_renderer_production_workflow_config.pkl.ts +29 -0
  55. package/gen/js/production/basket_eco_packages_config_renderer_staging_dune_config.pkl.ts +29 -0
  56. package/gen/js/production/basket_eco_packages_config_shared.pkl.ts +73 -0
  57. package/gen/js/production/basket_eco_packages_config_worker.pkl.ts +49 -0
  58. package/gen/js/staging/basket_eco_packages_config_addresses.pkl.ts +106 -0
  59. package/gen/js/staging/basket_eco_packages_config_checkout.pkl.ts +77 -0
  60. package/gen/js/staging/basket_eco_packages_config_cloudflare.pkl.ts +74 -0
  61. package/gen/js/staging/basket_eco_packages_config_cms.pkl.ts +119 -0
  62. package/gen/js/staging/basket_eco_packages_config_db.pkl.ts +47 -0
  63. package/gen/js/staging/basket_eco_packages_config_dune.pkl.ts +40 -0
  64. package/gen/js/staging/basket_eco_packages_config_enterprise.pkl.ts +290 -0
  65. package/gen/js/staging/basket_eco_packages_config_feature.pkl.ts +58 -0
  66. package/gen/js/staging/basket_eco_packages_config_redis.pkl.ts +30 -0
  67. package/gen/js/staging/basket_eco_packages_config_renderer_staging_cms.pkl.ts +28 -0
  68. package/gen/js/staging/basket_eco_packages_config_renderer_staging_dune_config.pkl.ts +29 -0
  69. package/gen/js/staging/basket_eco_packages_config_renderer_staging_workflow_config.pkl.ts +29 -0
  70. package/gen/js/staging/basket_eco_packages_config_shared.pkl.ts +69 -0
  71. package/gen/js/staging/basket_eco_packages_config_worker.pkl.ts +53 -0
  72. package/package.json +66 -0
  73. package/src/addresses.ts +90 -0
  74. package/src/authorization/policy.conf +15 -0
  75. package/src/authorization/policy.csv +26 -0
  76. package/src/chk.spec.ts +61 -0
  77. package/src/chk.ts +88 -0
  78. package/src/cms.test.ts +52 -0
  79. package/src/cms.ts +65 -0
  80. package/src/index.ts +4 -0
  81. package/src/pkl/PklProject +21 -0
  82. package/src/pkl/development/Addresses.pkl +2114 -0
  83. package/src/pkl/development/CMS.pkl +37 -0
  84. package/src/pkl/development/Checkout.pkl +32 -0
  85. package/src/pkl/development/Cloudflare.pkl +20 -0
  86. package/src/pkl/development/Db.pkl +14 -0
  87. package/src/pkl/development/Dune.pkl +12 -0
  88. package/src/pkl/development/Enterprise.pkl +158 -0
  89. package/src/pkl/development/Feature.pkl +4 -0
  90. package/src/pkl/development/Redis.pkl +6 -0
  91. package/src/pkl/development/Shared.pkl +16 -0
  92. package/src/pkl/development/Worker.pkl +43 -0
  93. package/src/pkl/development/renderer/CMS.pkl +59 -0
  94. package/src/pkl/production/Addresses.pkl +2114 -0
  95. package/src/pkl/production/CMS.pkl +34 -0
  96. package/src/pkl/production/Checkout.pkl +32 -0
  97. package/src/pkl/production/Cloudflare.pkl +20 -0
  98. package/src/pkl/production/Db.pkl +14 -0
  99. package/src/pkl/production/Dune.pkl +12 -0
  100. package/src/pkl/production/Enterprise.pkl +158 -0
  101. package/src/pkl/production/Feature.pkl +8 -0
  102. package/src/pkl/production/KioskHost.pkl +5 -0
  103. package/src/pkl/production/Redis.pkl +6 -0
  104. package/src/pkl/production/Shared.pkl +15 -0
  105. package/src/pkl/production/Worker.pkl +43 -0
  106. package/src/pkl/production/renderer/CMS.pkl +59 -0
  107. package/src/pkl/production/renderer/Dune.pkl +52 -0
  108. package/src/pkl/production/renderer/Feature.pkl +51 -0
  109. package/src/pkl/production/renderer/Workflow.pkl +51 -0
  110. package/src/pkl/staging/Addresses.pkl +2114 -0
  111. package/src/pkl/staging/CMS.pkl +35 -0
  112. package/src/pkl/staging/Checkout.pkl +32 -0
  113. package/src/pkl/staging/Cloudflare.pkl +20 -0
  114. package/src/pkl/staging/Db.pkl +14 -0
  115. package/src/pkl/staging/Dune.pkl +12 -0
  116. package/src/pkl/staging/Enterprise.pkl +158 -0
  117. package/src/pkl/staging/Feature.pkl +8 -0
  118. package/src/pkl/staging/Redis.pkl +6 -0
  119. package/src/pkl/staging/Shared.pkl +16 -0
  120. package/src/pkl/staging/Worker.pkl +43 -0
  121. package/src/pkl/staging/renderer/CMS.pkl +59 -0
  122. package/src/pkl/staging/renderer/Dune.pkl +52 -0
  123. package/src/pkl/staging/renderer/Feature.pkl +51 -0
  124. package/src/pkl/staging/renderer/Workflow.pkl +51 -0
  125. package/src/pkl/tmpl/AddressesTmpl.pkl +44 -0
  126. package/src/pkl/tmpl/CMSTmpl.pkl +64 -0
  127. package/src/pkl/tmpl/CheckoutTmpl.pkl +34 -0
  128. package/src/pkl/tmpl/CloudflareTmpl.pkl +33 -0
  129. package/src/pkl/tmpl/DbTmpl.pkl +18 -0
  130. package/src/pkl/tmpl/DuneTmpl.pkl +124 -0
  131. package/src/pkl/tmpl/EnterpriseTmpl.pkl +105 -0
  132. package/src/pkl/tmpl/FeatureTmpl.pkl +90 -0
  133. package/src/pkl/tmpl/KioskHostTmpl.pkl +194 -0
  134. package/src/pkl/tmpl/RedisTmpl.pkl +9 -0
  135. package/src/pkl/tmpl/SharedTmpl.pkl +40 -0
  136. package/src/pkl/tmpl/WorkerTmpl.pkl +27 -0
  137. package/src/pkl-reader/main.go +167 -0
  138. package/src/shared.ts +65 -0
  139. package/src/vault.spec.ts +62 -0
  140. package/src/vault.ts +68 -0
@@ -0,0 +1,64 @@
1
+ @go.Package { name = "paakd.com/packages/config/gen/go/cms" }
2
+ module paakd.com.packages.config.CMS
3
+
4
+ import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.12.1#/go.pkl"
5
+ import "./DbTmpl.pkl"
6
+ import "./RedisTmpl.pkl"
7
+
8
+ db: DbTmpl
9
+ redis: RedisTmpl
10
+ tenantAssetURL:String
11
+ nodeEnv: String
12
+ appKeys: List<String>
13
+ apiTokenSalt: String
14
+ adminJwtSecret: String
15
+ jwtSecret: String
16
+ JWT_SECRET: String = jwtSecret
17
+ transferTokenSalt: String
18
+ strapiAdminBackendUrl: String = "/cms-admin-api"
19
+ adminStrapiUrl: String = "/cms-admin"
20
+ STRAPI_ADMIN_BACKEND_URL = strapiAdminBackendUrl
21
+ ADMIN_STRAPI_URL = adminStrapiUrl
22
+ cfAccountEndpoint: String
23
+ cfApiKey: String
24
+ cfApiSecret: String
25
+ cfTsSecretKey: String
26
+ cfBucketRegion: String
27
+ host: String
28
+ selfHost: String = "0.0.0.0"
29
+ port:UInt16 = 1337
30
+ selfUrl: String = "http://localhost:\(port)"
31
+ cmsURL: String
32
+ tenantBucketName: String
33
+ shopId: String
34
+ restateHost: String
35
+ restatePort: UInt16
36
+
37
+ output {
38
+ renderer {
39
+ converters {
40
+ [Mapping] = (it) -> new Mapping {
41
+ for (k, v in it) {
42
+ [k.toString()] = v
43
+ }
44
+ }
45
+ [Duration] = (it) ->
46
+ let (days = it.toUnit("d").value.toInt())
47
+ let (hours = it.toUnit("h").value.toInt() % 24)
48
+ let (minutes = it.toUnit("min").value.toInt() % 60)
49
+ let (seconds = it.toUnit("s").value % 60)
50
+ "P0Y0M" + new Listing {
51
+ days
52
+ "D"
53
+ hours
54
+ "H"
55
+ minutes
56
+ "M"
57
+ seconds
58
+ "S"
59
+ }.join("")
60
+ [List] = (it) -> it.join(",")
61
+ [Listing] = (it) -> it.join(",")
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,34 @@
1
+ @go.Package { name = "paakd.com/packages/config/gen/go/checkout" }
2
+ module paakd.com.packages.config.Checkout
3
+
4
+ import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.12.1#/go.pkl"
5
+
6
+ import "./SharedTmpl.pkl"
7
+ import "./CloudflareTmpl.pkl"
8
+ import "./RedisTmpl.pkl"
9
+
10
+ hostname: String = "0.0.0.0"
11
+ cmsRemoteURL:String
12
+ enterpriseRemoteURL:String
13
+
14
+ cmsURL: String
15
+ enterpriseURL:String
16
+
17
+ secureCookiePassword: String
18
+ forestAPIKey: String
19
+ saleChannelAccessKey: String
20
+ salesChannelAPISecret: String
21
+ storeAccessKey: String
22
+ storeAPISecret: String
23
+ isProduction: Boolean
24
+
25
+ posthogKey: String = "phc_Wj6AOmw3uujXdeR0tYozrXz3H5OubAhdkIjjEAVIk0b"
26
+ posthogDomain: String = "event.shofluent.xyz"
27
+ posthogHost: String = "https://\(posthogDomain)"
28
+
29
+
30
+ assetsPath: String = SharedTmpl.build.getAssetsURL()
31
+ assetsDomain: String = SharedTmpl.build.getAssetsDomain()
32
+ turnstileKey: String = CloudflareTmpl.shopTurnstile.siteKey
33
+ turnstileSecret: String = CloudflareTmpl.shopTurnstile.secretKey
34
+ redis: RedisTmpl
@@ -0,0 +1,33 @@
1
+ @go.Package { name = "paakd.com/packages/config/gen/go/cloudflare" }
2
+ module paakd.com.packages.config.Cloudflare
3
+
4
+ import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.12.1#/go.pkl"
5
+
6
+ class TerraformBackend {
7
+ accessKey: String
8
+ secretKey: String
9
+ bucket: String
10
+ path: String
11
+ region: String
12
+ endpoint: String
13
+ }
14
+
15
+ class R2Bucket {
16
+ endpoint: String
17
+ endpointEU: String
18
+ apiKey: String
19
+ apiSecret: String
20
+ region: String
21
+ token: String
22
+ zoneId: String
23
+ shopBucketName: String
24
+ taxonomyBucketName:String
25
+ }
26
+
27
+ class Turnstile {
28
+ siteKey: String
29
+ secretKey: String
30
+ }
31
+
32
+ shopR2: R2Bucket
33
+ shopTurnstile: Turnstile
@@ -0,0 +1,18 @@
1
+ @go.Package { name = "paakd.com/packages/config/gen/go/db" }
2
+ module paakd.com.packages.config.DB
3
+
4
+ import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.12.1#/go.pkl"
5
+
6
+
7
+ class DBConnection {
8
+ host: String
9
+ port: UInt16
10
+ user: String
11
+ password: String
12
+ }
13
+
14
+ conn: DBConnection
15
+ cms: String
16
+ dune: String
17
+ enterprise: String
18
+ feature: String
@@ -0,0 +1,124 @@
1
+ @go.Package { name = "paakd.com/packages/config/gen/go/dune" }
2
+ module paakd.com.packages.config.Dune
3
+ import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.12.1#/go.pkl"
4
+
5
+ duneHost: String
6
+ dunePort: UInt16
7
+ serverAPIKey: String
8
+ dataStore: String
9
+ cacheStore: String
10
+
11
+ // https://github.com/gorse-io/gorse/blob/release-0.4/config/config.toml
12
+ configFile {
13
+ server {
14
+ auto_insert_user = true
15
+ auto_insert_item = true
16
+ clock_error = "5s"
17
+ cache_expire = "10s"
18
+ api_key = serverAPIKey
19
+ }
20
+ master {
21
+ host = duneHost
22
+ port = dunePort
23
+ dashboard_user_name = "admin"
24
+ dashboard_password = "admin"
25
+ }
26
+ database {
27
+ data_table_prefix = "dune_"
28
+ table_prefix = "dune_"
29
+ cache_table_prefix = "dune_cache_"
30
+ cache_store = cacheStore
31
+ data_store = dataStore
32
+ }
33
+ recommend {
34
+ cache_size = 100
35
+ cache_expire = "72h"
36
+ data_source {
37
+ positive_feedback_types = List("wish_list", "cart", "positive_review", "repeat_purchases", "referral", "social_media_engagement", "email_signup", "repeat_visit")
38
+ read_feedback_types = List("product_view", "customer_review", "customer_service_chat", "social_media_comment", "support_ticket", "return_request", "survey_response", "user_feedback", "product_question")
39
+ }
40
+ replacement {
41
+ enable_replacement = false
42
+ positive_replacement_decay = 0.8
43
+ read_replacement_decay = 0.6
44
+ }
45
+ online {
46
+ fallback_recommend = List("item_based", "latest")
47
+ num_feedback_fallback_item_based = 10
48
+ }
49
+ collaborative {
50
+ model_fit_period = "60m"
51
+ model_search_period = "360m"
52
+ model_search_epoch = 100
53
+ model_search_trials = 10
54
+ enable_model_size_search = false
55
+ }
56
+ offline {
57
+ check_recommend_period = "1m"
58
+ refresh_recommend_period = "24h"
59
+ enable_latest_recommend = true
60
+ enable_popular_recommend = false
61
+ enable_user_based_recommend = true
62
+ enable_item_based_recommend = false
63
+ enable_collaborative_recommend = true
64
+ enable_click_through_prediction = true
65
+ explore_recommend = Map("popular", 0.1, "latest", 0.2)
66
+ }
67
+ }
68
+ ["recommend.replacement"] {
69
+ enable_replacement = false
70
+ positive_replacement_decay = 0.8
71
+ read_replacement_decay = 0.6
72
+ }
73
+ ["recommend.online"]{
74
+ fallback_recommend = List("item_based", "latest")
75
+ num_feedback_fallback_item_based = 10
76
+ }
77
+ ["recommend.collaborative"] {
78
+ model_fit_period = "60m"
79
+ model_search_period = "360m"
80
+ model_search_epoch = 100
81
+ model_search_trials = 10
82
+ enable_model_size_search = false
83
+ }
84
+ ["recommend.offline"] {
85
+ check_recommend_period = "1m"
86
+ refresh_recommend_period = "24h"
87
+ enable_latest_recommend = true
88
+ enable_popular_recommend = false
89
+ enable_user_based_recommend = true
90
+ enable_item_based_recommend = false
91
+ enable_collaborative_recommend = true
92
+ enable_click_through_prediction = true
93
+ explore_recommend = Map("popular", 0.1, "latest", 0.2)
94
+ }
95
+ }
96
+
97
+ output {
98
+ renderer {
99
+ converters {
100
+ [Mapping] = (it) -> new Mapping {
101
+ for (k, v in it) {
102
+ [k.toString()] = v
103
+ }
104
+ }
105
+ [Duration] = (it) ->
106
+ let (days = it.toUnit("d").value.toInt())
107
+ let (hours = it.toUnit("h").value.toInt() % 24)
108
+ let (minutes = it.toUnit("min").value.toInt() % 60)
109
+ let (seconds = it.toUnit("s").value % 60)
110
+ "P0Y0M" + new Listing {
111
+ days
112
+ "D"
113
+ hours
114
+ "H"
115
+ minutes
116
+ "M"
117
+ seconds
118
+ "S"
119
+ }.join("")
120
+ [List] = (it) -> it.join(",")
121
+ [Listing] = (it) -> it.join(",")
122
+ }
123
+ }
124
+ }
@@ -0,0 +1,105 @@
1
+ @go.Package { name = "paakd.com/packages/config/gen/go/enterprise" }
2
+ module paakd.com.packages.config.Enterprise
3
+ import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.12.1#/go.pkl"
4
+ import "RedisTmpl.pkl"
5
+ import "DuneTmpl.pkl"
6
+ import "DbTmpl.pkl"
7
+ import "CloudflareTmpl.pkl"
8
+ import "WorkerTmpl.pkl"
9
+ import "SharedTmpl.pkl"
10
+
11
+ typealias TaxonomyVersion = "2025-06-unstable"|"warn"|"info"
12
+
13
+ taxonomyVersion: TaxonomyVersion
14
+ productTaxonomyPath: String
15
+ host:String
16
+ port: UInt16
17
+ defaultRequestTimeout: Duration
18
+ testEmail: String
19
+ jwtExpTime: Duration
20
+ refreshTokenExpTime: Duration
21
+ tenantAssetURL:String
22
+ shopBucketName: String
23
+ bleveStorePath:String
24
+ restateHost: String
25
+ restatePort: UInt16
26
+ workerPort: UInt16
27
+ workerHost: String
28
+ breezeBasicAuthHeader: String
29
+ userJWTSecret: String
30
+ customerJWTSecret: String
31
+ customerJWTSecretExpTime: Duration
32
+ userJWTSecretExpTime: Duration
33
+
34
+ userJwtPrivateKey: String
35
+ userJwtPublicKey: String
36
+ customerJwtPrivateKey: String
37
+ customerJwtPublicKey: String
38
+
39
+ isTest:Boolean
40
+ isProduction:Boolean
41
+ isStaging:Boolean
42
+ isLocal:Boolean
43
+ isDocker:Boolean
44
+ productTaxonomyIndexBucket: String
45
+ resendAPIKey: String = "re_iUq1MTWd_Hd6XbZCb34h1XEBzAmQkdjWJ"
46
+
47
+ redis: RedisTmpl
48
+ dune: DuneTmpl
49
+ worker: WorkerTmpl
50
+ db: DbTmpl
51
+ cloudflare: CloudflareTmpl
52
+ shared: SharedTmpl
53
+
54
+ // https://docs.restate.dev/references/server_config
55
+ workflowConfig {
56
+ admin {
57
+ ["bind-address"] = "0.0.0.0:9070"
58
+ }
59
+ ingress {
60
+ ["bind-address"] = "0.0.0.0:8080"
61
+ }
62
+
63
+ worker {
64
+ snapshots {
65
+ destination = "s3://\(cloudflare.shopR2.shopBucketName)/workflow"
66
+ snapshotIntervalNumRecords = 1000
67
+
68
+ ["aws-region"] = "us-east-1"
69
+ ["aws-access-key-id"] = cloudflare.shopR2.apiKey
70
+ ["aws-secret-access-key"] = cloudflare.shopR2.apiSecret
71
+ ["aws-endpoint-url"] = cloudflare.shopR2.endpointEU
72
+ ["aws-allow-http"] = true
73
+ ["aws-ec2-metadata-disabled"] = true
74
+ }
75
+ }
76
+ }
77
+
78
+ output {
79
+ renderer {
80
+ converters {
81
+ [Mapping] = (it) -> new Mapping {
82
+ for (k, v in it) {
83
+ [k.toString()] = v
84
+ }
85
+ }
86
+ [Duration] = (it) ->
87
+ let (days = it.toUnit("d").value.toInt())
88
+ let (hours = it.toUnit("h").value.toInt() % 24)
89
+ let (minutes = it.toUnit("min").value.toInt() % 60)
90
+ let (seconds = it.toUnit("s").value % 60)
91
+ "P0Y0M" + new Listing {
92
+ days
93
+ "D"
94
+ hours
95
+ "H"
96
+ minutes
97
+ "M"
98
+ seconds
99
+ "S"
100
+ }.join("")
101
+ [List] = (it) -> it.join(",")
102
+ [Listing] = (it) -> it.join(",")
103
+ }
104
+ }
105
+ }
@@ -0,0 +1,90 @@
1
+ @go.Package { name = "paakd.com/packages/config/gen/go/feature" }
2
+ module paakd.com.packages.config.Feature
3
+ import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.12.1#/go.pkl"
4
+ import "DbTmpl.pkl"
5
+ import "SharedTmpl.pkl"
6
+
7
+
8
+ db: DbTmpl
9
+ shopId: String
10
+ dbName: String
11
+
12
+ //https://docs.growthbook.io/self-host/config
13
+
14
+ configFile {
15
+
16
+ datasources {
17
+ warehouse {
18
+ type = "postgres"
19
+ name = "Main Warehouse"
20
+ params {
21
+ host = db.conn.host
22
+ port = db.conn.port
23
+ user = db.conn.user
24
+ password = db.conn.password
25
+ database = dbName
26
+ schema = shopId
27
+ }
28
+ settings {
29
+ userIdTypes = new Listing {
30
+ new {
31
+ userIdType = "user_id"
32
+ description = "Logged-in user id"
33
+ }
34
+ new {
35
+ userIdType = "anonymous_id"
36
+ description = "Anonymous visitor id"
37
+ }
38
+ }
39
+ queries {
40
+ exposure = new Listing {
41
+ new {
42
+ id = "user_id"
43
+ name = "Logged-in user experiments"
44
+ userIdType = "user_id"
45
+ query = """
46
+ SELECT \nuser_id,\n received_at as timestamp,\n experiment_id,\n variation_id,\n context_location_country as country
47
+ FROM \nexperiment_viewed
48
+ """
49
+ dimensions = List("country")
50
+ }
51
+ }
52
+ identityJoins = new Listing {
53
+ new {
54
+ ids = List("user_id", "anonymous_id")
55
+ query = "SELECT user_id, anonymous_id FROM identifies"
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
62
+ metrics {
63
+ signups {
64
+ type = "binomial"
65
+ name = "Sign Ups"
66
+ userIdType = "user_id"
67
+ datasource = "warehouse"
68
+ sql = "SELECT user_id, anonymous_id, received_at as timestamp FROM signups"
69
+ }
70
+ }
71
+ dimensions {
72
+ country {
73
+ name = "Country"
74
+ userIdType = "user_id"
75
+ datasource = "warehouse"
76
+ sql = "SELECT user_id, country as value FROM users"
77
+ }
78
+ }
79
+ segments {
80
+ visitors {
81
+ name = "Visitors in the US"
82
+ datasource = "warehouse"
83
+ sql = """
84
+ SELECT userid as user_id, timestamp as date
85
+ FROM users WHERE country='US'
86
+ """
87
+ userIdType = "user_id"
88
+ }
89
+ }
90
+ }
@@ -0,0 +1,194 @@
1
+ @go.Package { name = "paakd.com/packages/config/gen/go/kiosk_host" }
2
+ module paakd.com.packages.config.KioskHost
3
+ import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.12.1#/go.pkl"
4
+
5
+ import "./WorkerTmpl.pkl"
6
+ import "./ClodflareTmpl.pkl"
7
+ import "./SharedTmpl.pkl"
8
+
9
+ pgCatTLSCertPath: String
10
+ pgCatTLSKeyPath: String
11
+ pgCatConfigPath: String = "/firecracker-vm/"
12
+ maxVmCount: UInt16 = 8
13
+ orchestratorUrl: String = WorkerTmpl.orchestrator.endpoint
14
+ enterpriseHttpPort: UInt16 = 80
15
+ vmDir: String = "/firecracker-vm/"
16
+ kernelPath: String = "/firecracker-vm/"
17
+ defaultRootFsPath: String = "/firecracker-vm/"
18
+ firecrackerExecPath: String = "/usr/local/bin/"
19
+ jailerExecPath: String = "/usr/local/bin/"
20
+ pgCatExecPath: String = "/usr/local/bin/"
21
+ firecrackerVersion: String = "v1.10.1"
22
+ hostIP: String
23
+
24
+ pgCatAdminUser: String = "admin_usevr"
25
+ pgCatAdminPass: String = "admin_passv"
26
+
27
+ vmSSHPrivKey: String = """
28
+ -----BEGIN OPENSSH PRIVATE KEY-----
29
+ b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
30
+ QyNTUxOQAAACCLmZctUHbalnaDvz5WjLhLUxVVktLyP7yvAt9eaX3myAAAAKhvMQbqbzEG
31
+ 6gAAAAtzc2gtZWQyNTUxOQAAACCLmZctUHbalnaDvz5WjLhLUxVVktLyP7yvAt9eaX3myA
32
+ AAAECbTNoOpjexOXfIUcCmnH7k2dVsgqEVpNMGIxk7dkjAJYuZly1QdtqWdoO/PlaMuEtT
33
+ FVWS0vI/vK8C315pfebIAAAAIXJvb3RAVWJ1bnR1LTI0MDQtbm9ibGUtYW1kNjQtYmFzZQ
34
+ ECAwQ=
35
+ -----END OPENSSH PRIVATE KEY-----
36
+ """
37
+
38
+ pgCatTLSCert: String = """
39
+ -----BEGIN CERTIFICATE-----
40
+ MIIDvTCCAqUCFD3qkRo66FbQj6XjfP0aaCG40UfcMA0GCSqGSIb3DQEBCwUAMIGa
41
+ MQswCQYDVQQGEwJOTDEWMBQGA1UECAwNTm9ydGggSG9sbGFuZDEQMA4GA1UEBwwH
42
+ SGFhcmxlbTESMBAGA1UECgwJU2hvbGZ1ZW50MREwDwYDVQQLDAhTb2Z0d2FyZTES
43
+ MBAGA1UEAwwJbG9jYWxob3N0MSYwJAYJKoZIhvcNAQkBFhd0aW1vdGV3cGV0ZXJz
44
+ QGdtYWlsLmNvbTAeFw0yNTAyMjcxNjM3NTRaFw0yNjAyMjcxNjM3NTRaMIGaMQsw
45
+ CQYDVQQGEwJOTDEWMBQGA1UECAwNTm9ydGggSG9sbGFuZDEQMA4GA1UEBwwHSGFh
46
+ cmxlbTESMBAGA1UECgwJU2hvbGZ1ZW50MREwDwYDVQQLDAhTb2Z0d2FyZTESMBAG
47
+ A1UEAwwJbG9jYWxob3N0MSYwJAYJKoZIhvcNAQkBFhd0aW1vdGV3cGV0ZXJzQGdt
48
+ YWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKhoLn4DXCCh
49
+ 02o6xu6yFQ2B6Fe7mSlyQIHhdl9J/HOt/tTNPFIgqxQbNn/2AiGXduhgqmvn9k0p
50
+ EzvVGEPl/PGpy5+ITPd5I2QYfbgNJXFGMVbKDE6wOUavbYgk1j4Ka83XRF9sSVWo
51
+ eEDhJC9JS8FMEFhUn8Pl/gdSQTov/ahHhRsoYWAC57XfISo2vaNDrhai5U/oUmfj
52
+ s1kUpkPI1ZepD/3Tgu+TUpsdZn8HyABZQPj57vrvuZ6mZZmmaZchOxoyMPHOt9rP
53
+ urNqPJTl1c/f9u0HrdskWQ6nyBEMHYyFPPblRSVSNh6ruvTsJ5Y/zOA+MapDIeU8
54
+ VvGf9QUxdU0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAn6M7SG0839xZ6CoRjOfM
55
+ q9OCEf36V7Igsnfelb1dXhn1CKaCLDTCiiFXIfU8BCJecTCNH/xVUOKsv9Kbqoqh
56
+ PduUHq/mW3G7cU6ktGC7iPkVXRyPmfMs2inoHdTWvwdssc9cNWqxcFd1zVftV23D
57
+ 54+FPIcoGId39tofXu2sog0mu5UgYogk5x7lSBnI1lDlIdnf8mb7Pchds35MDXsm
58
+ m7VrxE0AHYA++vDp3Sjp15vcudXmwdPUZ217Ra5g15DKZr1mOZfUHT5rcioPO36I
59
+ BY90QXxo1WDrrIdVCaHhQ97OdBRNt3qML7zUwoSoccdv4apK4UqczhpkSa5D06sL
60
+ cQ==
61
+ -----END CERTIFICATE-----
62
+ """
63
+ pgCatTLSKey: String = """
64
+ -----BEGIN PRIVATE KEY-----
65
+ MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCoaC5+A1wgodNq
66
+ OsbushUNgehXu5kpckCB4XZfSfxzrf7UzTxSIKsUGzZ/9gIhl3boYKpr5/ZNKRM7
67
+ 1RhD5fzxqcufiEz3eSNkGH24DSVxRjFWygxOsDlGr22IJNY+CmvN10RfbElVqHhA
68
+ 4SQvSUvBTBBYVJ/D5f4HUkE6L/2oR4UbKGFgAue13yEqNr2jQ64WouVP6FJn47NZ
69
+ FKZDyNWXqQ/904Lvk1KbHWZ/B8gAWUD4+e7677mepmWZpmmXITsaMjDxzrfaz7qz
70
+ ajyU5dXP3/btB63bJFkOp8gRDB2MhTz25UUlUjYeq7r07CeWP8zgPjGqQyHlPFbx
71
+ n/UFMXVNAgMBAAECggEAZKsiX6GSiM8zmeTY1gcOHqzxPsCdpfDuLrWgFQYdKulv
72
+ 07V7wXxVyAccZRGh5IKuSeq+9RIMYcOUA8g2YSAyPCPL3OmVWLnJNiSNwl/ZagUT
73
+ qVXOVZtyIZbsWt3qU9vW5Y0xCfmpPNMgT2hGQR4Hct0NSEAN4QSy/Z1l8GqPru9Y
74
+ 9CCg2Bn+VHtuQLAbKryVwvvptI3lNc0/hD8GzSD7kxgmbr3dVbWm24R2Mymo3cRL
75
+ qC5V6HwOFtFbNwsIGvfeFj8HSRCnqfMef8uJsWaqdeQs2Q1zW6bxll2ZFzWp7JPH
76
+ lIU9TMwo47dmgRyTGnZ0BHPX4XhLmazkVbqNWniMAQKBgQDfU2Mm0jsiaDe0N0I1
77
+ mp3Ma2kwUU/tTnrbTkD39nrZhvKn50i8hDCT9xKBEFORdYkaKJP5dGUnZQVJmFsP
78
+ 302h7xA3afjprfrhPHYyIQP/AxlYKajlPE2tSO+ooi99fYPe6J2d5KJc1E/0jTyV
79
+ 7clkeHDPgftN9gtfXdtObCbSrQKBgQDBC9MaFclMB+e1U11SRki4h50oyOjWaVMq
80
+ oUoRcbDV7cRoJcdjv+XgqlisS9YP6dGbJzeaGdhDlPXxB+SHAMDFkFwSDEDCV/ET
81
+ eRVU3NoTrDddEbfjELwh4inGvXEwVAaexcroo0WIXdsbZ2eA/O6M0tBjHarOpDkV
82
+ QN1AyCghIQKBgBHnV32XQRJjFIQoIfC2Moxe2BH9ktDNh9/pCCBY7ERgIzf+vMAQ
83
+ QOy71AnwyyJQL+ue8S4AfNOJr8DUrAg7uLeQuNYYctIZFpHUDQ27w9w/3VpKDLZD
84
+ /V41CLGWPwRqeZX3RBuSZsnWY4qRgBfs9kZNuY2JOCJp5UOB/MDuvrYJAoGAGesb
85
+ gbIRH7sj+e1iZyx2kQfsKtCmqjrj5qJXDnaENoTAzPbdiV/3Xi2g0CkyaVqMQNeI
86
+ GJGFvrUePClCHnoUZ7IVGns4qp8iB+pG2ej5ApEpsb4yQTM6/xWdZEiFDOcLKIAH
87
+ 2SoqqL9pLom4lNHguVmIjvYpu6rC2z6lNhBpiuECgYBkP1/dFYe4nHywy01cxHIx
88
+ le6tiFMZL9f7Z2NYAkdiy8EFTuE+iHY6qeHoq6tHnziJ2AuF6Hx5iD1btr2sSNsm
89
+ AYoSQk8HIgu/v99cYSwTgrEm5IFES3czJFEYxICRxbTwOQO3l7BtlZZ7tcRMM4wJ
90
+ 134IKQZ1pi2KVmtFfErBLA==
91
+ -----END PRIVATE KEY-----
92
+ """
93
+
94
+ pgCatTLSCsr: String = """
95
+ -----BEGIN CERTIFICATE REQUEST-----
96
+ MIIC4DCCAcgCAQAwgZoxCzAJBgNVBAYTAk5MMRYwFAYDVQQIDA1Ob3J0aCBIb2xs
97
+ YW5kMRAwDgYDVQQHDAdIYWFybGVtMRIwEAYDVQQKDAlTaG9sZnVlbnQxETAPBgNV
98
+ BAsMCFNvZnR3YXJlMRIwEAYDVQQDDAlsb2NhbGhvc3QxJjAkBgkqhkiG9w0BCQEW
99
+ F3RpbW90ZXdwZXRlcnNAZ21haWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
100
+ MIIBCgKCAQEAqGgufgNcIKHTajrG7rIVDYHoV7uZKXJAgeF2X0n8c63+1M08UiCr
101
+ FBs2f/YCIZd26GCqa+f2TSkTO9UYQ+X88anLn4hM93kjZBh9uA0lcUYxVsoMTrA5
102
+ Rq9tiCTWPgprzddEX2xJVah4QOEkL0lLwUwQWFSfw+X+B1JBOi/9qEeFGyhhYALn
103
+ td8hKja9o0OuFqLlT+hSZ+OzWRSmQ8jVl6kP/dOC75NSmx1mfwfIAFlA+Pnu+u+5
104
+ nqZlmaZplyE7GjIw8c632s+6s2o8lOXVz9/27Qet2yRZDqfIEQwdjIU89uVFJVI2
105
+ Hqu69Ownlj/M4D4xqkMh5TxW8Z/1BTF1TQIDAQABoAAwDQYJKoZIhvcNAQELBQAD
106
+ ggEBAGVyPLuWWQqHbS3gLzh8y75QWSINxKUA1mfJ0eH1hHBW7b88lspiBDph70aT
107
+ AsQbOX/RFFXQOwYksFbfD8L6sstPodctuX9r4B2nl8uUSIov/+U494mp9Wvnlc3w
108
+ 1pbm1RDfilnha2E4GQgqDS6GnIowbCf6EOSPXpji32LQRN+vQGbnHbzn96J27Bb+
109
+ PjuMxbGyDGDjzn4rA+xr21iNOrADV+po+C3HfVTswCmFxwJevnIzmbHTL2Jwifpf
110
+ X+zDh0PC+rAF517wAVtci1MR77Wkd6KOF/3oJufvhVzcG8XvAgJk/d7VjR1/UCon
111
+ 0oeFYaeHCHiDbOHo51y43EdAFAY=
112
+ -----END CERTIFICATE REQUEST-----
113
+ """
114
+
115
+ proxyServiceFileContent: String = """
116
+ [Unit]
117
+ Description=Gateway
118
+ After=network.target
119
+
120
+ [Service]
121
+ ExecStart=/usr/local/bin/host-proxy
122
+ Restart=always
123
+ User=root
124
+
125
+ [Install]
126
+ WantedBy=multi-user.target
127
+ """
128
+
129
+ orchestratorServiceFileContent: String = """
130
+ [Unit]
131
+ Description=Orchestrator
132
+ After=network.target
133
+
134
+ [Service]
135
+ ExecStart=/usr/local/bin/orchestrator
136
+ Restart=always
137
+ User=root
138
+ EnvironmentFile=/etc/orchestrator.env
139
+
140
+ [Install]
141
+ WantedBy=multi-user.target
142
+ """
143
+
144
+ orchestratorEnvFileContent: String = """
145
+ FIRECRACKER_PATH=\( firecrackerExecPath )
146
+ JAILER_PATH=\( jailerExecPath )
147
+ VM_DIR=\( vmDir )
148
+ DEFAULT_ROOT_FS_PATH=\(defaultRootFsPath)
149
+ KERNEL_PATH=\( kernelPath )
150
+ VM_SSH_KEY="\(vmSSHPrivKey)"
151
+ ENTERPRISE_HTTP_PORT=\(enterpriseHttpPort)
152
+ VAULT_URL=\(SharedTmpl.build.vaultUrl)
153
+ ORCHESTRATOR_URL=\(orchestratorUrl)
154
+ ORCHESTRATOR_USER=\(WorkerTmpl.orchestrator.user)
155
+ ORCHESTRATOR_PASS=\(WorkerTmpl.orchestrator.password)
156
+ HOST_IP=\(hostIP)
157
+ MAX_VM_COUNT=\(maxVmCount)
158
+ PGCAT_CONFIG_PATH=\(pgCatConfigPath)
159
+ """
160
+
161
+ // https://github.com/postgresml/pgcat/blob/main/CONFIG.md
162
+ pgCatConfig {
163
+ general {
164
+ host = "0.0.0.0"
165
+ port = 5432
166
+ enable_prometheus_exporter = true
167
+ prometheus_exporter_port = 9930
168
+ connect_timeout = 1000
169
+ healthcheck_timeout = 1000
170
+ healthcheck_delay = 30000
171
+ shutdown_timeout = 5000
172
+ ban_time = 60 // Seconds
173
+ log_client_connections = false
174
+ log_client_disconnections = false
175
+ autoreload = 5000
176
+ server_round_robin = false
177
+ admin_username = pgCatAdminUser
178
+ admin_password = pgCatAdminPass
179
+ tls_certificate = pgCatTLSCertPath
180
+ tls_private_key = pgCatTLSKeyPath
181
+ }
182
+ }
183
+
184
+
185
+ rcloneConfig {
186
+ ["host-files"] {
187
+ type = "s3"
188
+ provider = "Cloudflare"
189
+ access_key_id = "f651e66f44b0a4b28a441bfa621d6af2"
190
+ secret_access_key = "3852797df26b2e1810f96ed7aa08564719fb9fd56e9dd8f4345dbeab10557f7d"
191
+ endpoint = "https://3545c559905315bb593ba3c502b3fe07.r2.cloudflarestorage.com"
192
+ acl = "private"
193
+ }
194
+ }
@@ -0,0 +1,9 @@
1
+ @go.Package { name = "paakd.com/packages/config/gen/go/redis" }
2
+ module paakd.com.packages.config.Redis
3
+
4
+ import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.12.1#/go.pkl"
5
+
6
+ user: String
7
+ host: String
8
+ password: String
9
+ port: UInt16 = 6379